DOWNTO
DOWNTO in ProBuilder fa contare un ciclo FOR verso il basso, da un valore iniziale più alto a un valore finale più basso, decrementando di uno a ogni passaggio nel ciclo.
Sintassi
FOR variable = startValue DOWNTO endValue DO
// loop body
NEXTCome funziona
Un ciclo FOR con DOWNTO fa partire il contatore da startValue e lo decrementa di uno dopo ogni passaggio, eseguendo il corpo per ogni valore fino a includere endValue. È la controparte decrescente di TO, che incrementa.
La direzione conta ogni volta che l'ordine di iterazione influisce sul risultato. Gli offset di bar in ProBuilder crescono con l'età, quindi close[20] è più vecchio di close[0]. Un ciclo scritto FOR i = 20 DOWNTO 0 percorre quindi i bar dal più vecchio al più recente, che è l'ordine naturale per i calcoli che costruiscono uno stato in modo cronologico, come tenere traccia dell'ultima occorrenza di un evento o ripercorrere una sequenza di bar in ordine temporale.
Il valore iniziale deve essere maggiore o uguale al valore finale. Se startValue è più piccolo di endValue, il corpo non viene mai eseguito e lo script continua dopo NEXT senza alcun errore. BREAK resta disponibile dentro il corpo per abbandonare il ciclo in anticipo.
Esempi
Esempio 1, Conteggio delle bar in ribasso dalla più vecchia alla più recente (Indicatore)
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 ValueIl contatore va da 20 fino a 0, quindi la scansione parte dalla bar più vecchia della finestra e avanza verso il presente, fermandosi alla prima bar che ha chiuso pari o sopra la propria apertura.
Esempio 2, Offset del gap rialzista più recente (Indicatore)
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"Poiché DOWNTO elabora prima le barre più vecchie, ogni gap rilevato sovrascrive il precedente, lasciando l'offset del gap più recente in lastGap quando il ciclo termina.
Esempio 3, Punteggio di momentum cronologico (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
ENDIFIl ciclo percorre le ultime dieci variazioni da bar a bar in ordine temporale e compensa i rialzi con i ribassi. Un punteggio di 8 o più indica un avanzamento persistente e attiva un ingresso long.
Errori e insidie comuni
- Valore iniziale minore di quello finale.
FOR i = 0 DOWNTO 20esegue zero iterazioni. Non viene generato nessun errore, quindi le variabili a valle mantengono silenziosamente i loro valori iniziali. Verifica che gli estremi siano in ordine decrescente. - La direzione cambia il risultato. I cicli che sovrascrivono una variabile in caso di corrispondenza, o che eseguono BREAK su una condizione, producono risposte diverse con DOWNTO rispetto a TO. Scegli la direzione che corrisponde alla cronologia desiderata.
- Errore di uno ai bordi. Entrambi i limiti sono inclusivi.
FOR i = 20 DOWNTO 0viene eseguito 21 volte. Riferirsi aclose[i + 1]all'interno del corpo si estende anche una bar oltre la finestra dichiarata. - Nessun passo personalizzato. Il contatore si muove sempre esattamente di uno. Saltare un valore ogni due richiede operazioni aritmetiche sul contatore all'interno del corpo invece di una clausola di passo.
Istruzioni correlate
FOR, il ciclo contato che DOWNTO modifica.TO, la controparte ascendente di DOWNTO.NEXT, chiude il ciclo FOR e sposta il contatore.DO, marcatore opzionale tra l'intestazione del ciclo e il corpo.BREAK, esce dal ciclo prima che il contatore raggiunga il valore finale.WHILE, alternativa guidata da una condizione quando il numero di iterazioni è sconosciuto.WEND, chiude un ciclo WHILE.BarIndex, numero della bar corrente, spesso abbinato a scansioni discendenti.