Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

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

probuilder
FOR variable = start TO end DO
  // commands repeated on each pass
NEXT

Conteggio decrescente:

probuilder
FOR variable = start DOWNTO end DO
  // commands repeated on each pass
NEXT

Come 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)

probuilder
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)

probuilder
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)

probuilder
// 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
ENDIF

DOWNTO 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 5 ciclo non viene mai eseguito, e nemmeno FOR 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 summation o highest quando ne esiste uno, e uscire in anticipo con BREAK quando la risposta è trovata.
  • 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.