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
FOR variable = startValue DOWNTO endValue DO
// loop body
NEXTComment ç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)
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 ValueLe 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)
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)
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
ENDIFLa 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 20exé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 0s'exécute 21 fois. Référencerclose[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.
Instructions liées
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.