Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

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

probuilder
FOR variable = startValue DOWNTO endValue DO
  // loop body
NEXT

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

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

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

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

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

Il 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 20 esegue 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 0 viene eseguito 21 volte. Riferirsi a close[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.
  • 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.