FOR
Il ciclo FOR in ProBuilder ripete un blocco di codice un numero fisso di volte, contando in avanti con TO o a ritroso con DOWNTO. Ogni blocco FOR è chiuso da NEXT.
Sintassi
FOR variable = start TO end DO
// commands repeated on each pass
NEXTConteggio decrescente:
FOR variable = start DOWNTO end DO
// commands repeated on each pass
NEXTCome funziona
Su ogni bar il ciclo inizializza la variabile contatore al valore iniziale, esegue il blocco, poi incrementa il contatore di 1 (TO) o lo decrementa di 1 (DOWNTO). Quando il contatore supera il valore finale, l'esecuzione continua dopo NEXT. La parola chiave DO è opzionale nelle versioni attuali di ProRealTime™ ma mantenerla migliora la leggibilità.
Il contatore è una variabile normale e si usa comunemente come offset di bar, quindi close[i] all'interno di un ciclo legge il prezzo di chiusura i bars indietro. Questo rende FOR lo strumento standard per sommare, scansionare o disegnare su un intervallo di bars storiche.
I cicli possono essere nidificati. L'intero ciclo viene eseguito di nuovo su ogni bar del grafico, quindi un ciclo di 100 passaggi su un grafico di 10,000 bar esegue un milione di iterazioni. Mantieni gli intervalli più piccoli possibile per quanto consentito dal calcolo, e usa BREAK per uscire anticipatamente quando il risultato è noto.
Esempi
Esempio 1, Somma dei prezzi di apertura su un intervallo di bar (Indicatore)
a = 0
FOR i = 10 TO 20 DO
// add the open of each bar in the range to the running total
a = open[i] + a
NEXT
RETURN a AS "Sum of Opens"Il contatore i scorre dall'offset bar 10 all'offset bar 20, accumulando ogni prezzo di apertura in a, che viene restituito al termine del ciclo.
Esempio 2, Conteggio dei bar rialzisti in una finestra (ProScreener)
count = 0
FOR i = 0 TO 19 DO
// count the bars that closed above their open
IF close[i] > open[i] THEN
count = count + 1
ENDIF
NEXT
SCREENER[count >= 15] (count AS "Bullish bars")Il ciclo esamina gli ultimi 20 bar e lo screener elenca gli strumenti in cui almeno 15 di essi hanno chiuso più in alto di quanto hanno aperto.
Esempio 3, Scansione a ritroso con DOWNTO (ProOrder)
// find the most recent bar that matches the 50-bar high
hh = highest[50](high)
found = 50
FOR i = 50 DOWNTO 0 DO
IF high[i] = hh THEN
found = i
ENDIF
NEXT
// enter only if the high was printed within the last 5 bars
IF found <= 5 AND NOT onmarket THEN
BUY 1 CONTRACT AT MARKET
ENDIFDOWNTO scorre dall'offset più vecchio verso il bar corrente, lasciando found allo scostamento più recente in cui è stato fissato il massimo a 50 bar.
Errori e insidie comuni
- NEXT mancante. Ogni FOR richiede un NEXT corrispondente. Con i cicli nidificati il compilatore può segnalare l'errore lontano dal ciclo che è effettivamente non chiuso, quindi abbina le coppie dall'interno verso l'esterno.
- Valore iniziale oltre quello finale. A
FOR i = 10 TO 5ciclo non viene mai eseguito, e nemmenoFOR i = 5 DOWNTO 10. La parola chiave di direzione deve corrispondere alla direzione dell'intervallo, altrimenti il blocco viene saltato silenziosamente. - Modificare il contatore all'interno del ciclo. Riassegnare la variabile del ciclo all'interno del blocco interferisce con l'incremento automatico e può produrre passaggi saltati o uscite inattese. Usa una variabile separata per i calcoli intermedi.
- Prestazioni su intervalli ampi. Il ciclo viene rieseguito su ogni bar, quindi intervalli ampi si moltiplicano rapidamente. Preferisci funzioni integrate come
summationohighestquando ne esiste uno, e uscire in anticipo con BREAK quando la risposta è trovata.
Istruzioni correlate
TO, separatore di intervallo crescente all'interno di un'intestazione FOR.DOWNTO, separatore di intervallo decrescente all'interno di un'intestazione FOR.NEXT, chiude un blocco FOR e avvia il passaggio successivo.DO, parola chiave opzionale che chiude un'intestazione FOR o WHILE.BREAK, esce dal ciclo corrente prima che l'intervallo sia esaurito.WHILE, ciclo guidato da una condizione per un numero di passaggi non noto.WEND, chiude un blocco WHILE.BarIndex, contatore di bar utile per delimitare gli intervalli dei cicli.