Rejoignez-nous
Instructions/probuilder · probacktest · proorder · proscreener

DOWNTO

DOWNTO en ProBuilder fait compter une boucle FOR à rebours, d'une valeur de départ plus élevée vers une valeur finale plus basse, en décrémentant de un à chaque passage dans la boucle.

Syntaxe

probuilder
FOR variable = startValue DOWNTO endValue DO
  // loop body
NEXT

Comment ça marche

Une boucle FOR avec DOWNTO démarre le compteur à startValue et le décrémente de un après chaque passage, exécutant le corps de boucle pour chaque valeur jusqu'à et y compris endValue. C'est l'équivalent décroissant de TO, qui incrémente.

Le sens compte dès que l'ordre d'itération influe sur le résultat. Dans ProBuilder, les décalages de barres augmentent avec l'ancienneté, de sorte que close[20] est antérieur à close[0]. Une boucle écrite FOR i = 20 DOWNTO 0 parcourt donc les bars du plus ancien au plus récent, ce qui est l'ordre naturel pour les calculs qui construisent un état de façon chronologique, comme suivre la dernière occurrence d'un événement ou rejouer une séquence de bars dans l'ordre du temps.

La valeur de départ doit être supérieure ou égale à la valeur d'arrivée. Si startValue est plus petit que endValue, le corps ne s'exécute jamais et le script continue après NEXT sans aucune erreur. BREAK reste disponible dans le corps pour abandonner la boucle plus tôt.

Exemples

Exemple 1, Compter les bars en baisse du plus ancien au plus récent (Indicateur)

probuilder
Value = 0
// Scan from 20 bars back toward the current bar
FOR i = 20 DOWNTO 0 DO
  IF (Close[i] < Open[i]) THEN
    Value = Value + 1
  ELSE
    BREAK
  ENDIF
NEXT
RETURN Value

Le compteur va de 20 jusqu'à 0, le balayage commence donc au bar le plus ancien de la fenêtre et avance vers le présent, en s'arrêtant au premier bar qui a clôturé à son ouverture ou au-dessus.

Exemple 2, Décalage du gap haussier le plus récent (Indicateur)

probuilder
lastGap = -1
// Visit bars oldest first so the final assignment is the newest gap
FOR i = 50 DOWNTO 1 DO
  IF low[i - 1] > high[i] THEN
    lastGap = i - 1
  ENDIF
NEXT
RETURN lastGap AS "bars since last up gap"

Comme DOWNTO traite d'abord les bars les plus anciens, chaque gap détecté écrase le précédent, laissant le décalage du gap le plus récent dans lastGap quand la boucle se termine.

Exemple 3, Score de momentum chronologique (ProOrder)

probuilder
score = 0
// Compare each bar with the one before it, oldest pair first
FOR i = 10 DOWNTO 1 DO
  IF close[i] > close[i + 1] THEN
    score = score + 1
  ELSE
    score = score - 1
  ENDIF
NEXT

IF score >= 8 AND NOT ONMARKET THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

La boucle parcourt les dix dernières variations d'un bar à l'autre dans l'ordre chronologique et compense les hausses par les baisses. Un score de 8 ou plus indique une progression persistante et déclenche une entrée long.

Erreurs et pièges courants

  • Départ inférieur à la fin. FOR i = 0 DOWNTO 20 exécute zéro itération. Aucune erreur n'est levée, de sorte que les variables en aval conservent silencieusement leurs valeurs initiales. Vérifiez que les bornes sont en ordre décroissant.
  • Le sens change le résultat. Les boucles qui écrasent une variable en cas de correspondance, ou qui exécutent BREAK sur une condition, donnent des résultats différents avec DOWNTO et avec TO. Choisissez le sens qui correspond à la chronologie voulue.
  • Décalage de un aux extrémités. Les deux bornes sont incluses. FOR i = 20 DOWNTO 0 s'exécute 21 fois. Référencer close[i + 1] à l'intérieur du corps dépasse aussi d'une bar la fenêtre indiquée.
  • Pas de pas personnalisé. Le compteur avance toujours d'exactement un. Sauter une valeur sur deux exige de faire de l'arithmétique sur le compteur à l'intérieur du corps plutôt qu'une clause de pas.
  • FOR, la boucle comptée que DOWNTO modifie.
  • TO, l'équivalent ascendant de DOWNTO.
  • NEXT, ferme la boucle FOR et fait avancer le compteur.
  • DO, marqueur optionnel entre l'en-tête de boucle et le corps.
  • BREAK, sort de la boucle avant que le compteur n'atteigne la valeur finale.
  • WHILE, alternative pilotée par une condition lorsque le nombre d'itérations est inconnu.
  • WEND, ferme une boucle WHILE.
  • BarIndex, numéro du bar en cours, souvent associé aux balayages descendants.