Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

NEXT

NEXT chiude un blocco di ciclo FOR in ProBuilder, riportando l'esecuzione all'intestazione del ciclo finché il contatore non supera il suo valore finale. Ogni FOR richiede un NEXT.

Sintassi

probuilder
FOR variable = start TO end DO
  // statements executed on each iteration
NEXT

Come funziona

Un ciclo FOR in ProBuilder è composto da un'intestazione, un corpo e la parola chiave di chiusura NEXT. L'intestazione assegna un valore iniziale alla variabile contatore e dichiara il valore finale con TO per i cicli ascendenti o DOWNTO per quelli discendenti. Tutto ciò che si trova tra DO e NEXT forma il corpo.

Ogni volta che l'esecuzione raggiunge NEXT, il contatore viene incrementato (o decrementato con DOWNTO) e confrontato con il valore finale. Quando il contatore è ancora dentro l'intervallo, l'esecuzione torna all'inizio del corpo del ciclo. Quando ha superato il valore finale, l'esecuzione prosegue con la prima istruzione dopo NEXT. Entrambi gli estremi sono inclusi, quindi FOR i = 10 TO 20 esegue undici iterazioni.

NEXT è puramente strutturale, non accetta argomenti e non produce alcun valore. Ogni FOR deve essere chiuso da esattamente un NEXT, e i cicli annidati richiedono un NEXT per ogni FOR, chiudendo dal ciclo più interno verso l'esterno. Per uscire da un ciclo prima che il contatore sia esaurito, usa BREAK, che trasferisce il controllo all'istruzione successiva al NEXT corrispondente.

Poiché l'intero script viene già eseguito una volta per bar, i cicli delimitati da NEXT sono tipicamente usati per calcoli su un intervallo di periodi o di indici di array all'interno di un singolo bar, non per avanzare nel tempo.

Esempi

Esempio 1, Sommare medie su un intervallo di periodi (Indicatore)

probuilder
a = 0
FOR i = 10 TO 20 DO
  // accumulate the moving average of the open for each period length
  a = average[i](open) + a
NEXT
RETURN a AS "compound averages direction"

Il ciclo gira con i da 10 a 20. NEXT incrementa il contatore e ripete il corpo, e dopo l'ultima iterazione viene restituita la somma accumulata.

Esempio 2, Contare i bar rialzisti in una finestra (ProOrder)

probuilder
// Count how many of the last 10 bars closed up
bullCount = 0
FOR k = 0 TO 9 DO
  IF close[k] > open[k] THEN
    bullCount = bullCount + 1
  ENDIF
NEXT

IF bullCount >= 7 AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

Il corpo tra DO e NEXT esamina un bar storico per iterazione. Dopo che NEXT completa il decimo passaggio, il conteggio alimenta la condizione di ingresso.

Esempio 3, Fare la media di un intervallo di chiusure (ProScreener)

probuilder
// Mean close of the last 15 bars, computed manually
total = 0
FOR n = 0 TO 14 DO
  total = total + close[n]
NEXT
meanClose = total / 15

SCREENER[close > meanClose * 1.02] (meanClose AS "15-bar mean")

NEXT chiude il ciclo di accumulo, dopo il quale la media viene confrontata con la chiusura corrente per filtrare gli strumenti.

Errori e insidie comuni

  • NEXT mancante o in eccesso. Ogni FOR richiede esattamente un NEXT. Nei cicli annidati il compilatore abbina ogni NEXT al FOR aperto più vicino, quindi la mancanza di uno produce spesso un errore a diverse righe di distanza dall'errore reale.
  • Modificare il contatore all'interno del corpo. Riassegnare la variabile del ciclo tra DO e NEXT modifica quante iterazioni restano e può creare cicli che non terminano mai all'interno del bar. Preferisci BREAK per l'uscita anticipata.
  • Parola chiave di direzione errata. FOR i = 20 TO 10 non entra mai nel corpo perché il contatore supera già il valore finale. Gli intervalli decrescenti richiedono DOWNTO invece di TO.
  • Cicli pesanti su ogni bar. L'intero blocco FOR...NEXT viene eseguito una volta per bar. Intervalli ampi combinati con chiamate costose come average[i] moltiplicano il tempo di calcolo su tutto il grafico.
  • FOR, apre il ciclo contato che NEXT chiude.
  • TO, dichiara il valore finale ascendente del contatore del ciclo.
  • DOWNTO, dichiara un intervallo di ciclo discendente.
  • DO, separa l'intestazione del ciclo dal corpo.
  • BREAK, esce dal ciclo prima che il contatore sia esaurito.
  • WHILE, alternativa di ciclo guidata da una condizione.
  • WEND, chiude un ciclo WHILE, l'equivalente di NEXT.