Boucle While Défectueuse ?

Viewing 3 posts - 1 through 3 (of 3 total)
  • Author
    Posts
  • #225249 quote
    Pierreco1991
    Participant
    Junior

    Bonjour

    J’ai une erreur sur la boucle while. Il m’est indiqué qu’elle est inifinie. Pourtant, il existe bien dans le passé un break donc je dois passer par le if . Si la condition est validée, je passe en init =1 pour ne pas reboucler . Ai je bon ?

    i = 1
    WHILE init = 0 DO
    Cbreak = DClose(i)>DHigh(i-1) or DClose(i)<DLow(i-1)
    
    if Cbreak Then
    init = 1
    EcartJOUR = DHigh(i) - DLow(i)
    SupportJOUR = DLow(i)
    ENDIF
    i = 1+1
    WEND

    Mon but est de rechercher le dernier Break out Daily avant de lancer le code pour avoir le low et les extremes de la bougie qui a breaké

    Merci de votre retour

    #225259 quote
    JC_Bywan
    Moderator
    Master

    Bonjour,

    A priori si je comprends ce que tu veux faire, dans cbreak tu as inversé l’ordre chronologique du Dclose avec Dhigh et Dlow (pris le close du jour “avant” celui des high et low au lieu du jour “après” ceux-ci).

    Aussi, pour incrémenter ta boucle tu as écrit (je le mets en lettre pour éviter qu’une lecture rapide ne passe à côté de la distinction entre i et  1): ” i = un + un” mais je suppose que tu voulais ” i = i + un”, si la boucle n’a pas rencontré Cbreak avant i=2, elle va rester scotchée sur i=2

     

    Alternativement, si tu ne tiens pas forcément à la boucle while, à la place tu peux faire:

    if DClose(0)>DHigh(1) or DClose(0)<DLow(1) then
    EcartJOUR = DHigh(0) – DLow(0)
    SupportJOUR = DLow(0)
    endif

    ce qui soit génèrera EcartJour et SupportJour si la condition est réalisée, soit tout simplement les gardera en mémoire si elle ne l’est pas, ce qui en fait le plus récent sans besoin de repartir en arrière le chercher avec une boucle.

    Autre version si jamais tu ne veux pas que le temps réel remplace l’état de la veille:

    if DClose(0)>DHigh(1) or DClose(0)<DLow(1) then
    EcartJOURtemp = DHigh(0) – DLow(0)
    SupportJOURtemp = DLow(0)
    endif
    if openday<>openday[1] then
    EcartJOUR = EcartJOURtemp
    SupportJOUR = SupportJOURtemp
    endif

    Pierreco1991 thanked this post
    #225271 quote
    Pierreco1991
    Participant
    Junior

    Bonjour

    En effet i = 1+1 était mon erreur, ….. le boulet

    Bref, j’ai mis cela dans une fonction et avec un call, j’évite de passer par un while

    Merci

Viewing 3 posts - 1 through 3 (of 3 total)
  • You must be logged in to reply to this topic.

Boucle While Défectueuse ?


ProOrder : Trading Automatique & Backtests

New Reply
Author
Summary

This topic contains 2 replies,
has 2 voices, and was last updated by Pierreco1991
2 years, 2 months ago.

Topic Details
Forum: ProOrder : Trading Automatique & Backtests
Language: French
Started: 12/14/2023
Status: Active
Attachments: No files
Logo Logo
Loading...