Iscriviti ora
Costanti/probuilder · probacktest · proorder · proscreener

Undefined

Undefined è un valore ProBuilder che azzera il valore predefinito 0 di una variabile, contrassegnandola come non ancora impostata. Assegna Undefined una volta sola, così una variabile non viene tracciata né trattata come zero.

Sintassi

probuilder
myVariable = Undefined

Undefined viene assegnato a una variabile e non accetta indice. Può essere assegnato a una variabile una sola volta, normalmente all'inizio del codice.

Come funziona

In ProBuilder le variabili non vengono inizializzate esplicitamente e partono da 0. Quel valore predefinito può creare problemi quando 0 è un prezzo significativo o quando la variabile dovrebbe restare nascosta finché una condizione non le assegna un valore. Impostare la variabile a Undefined azzera quel valore predefinito, così non viene né disegnato sul grafico né trattato come un valore reale.

Una variabile può essere impostata a Undefined solo una volta, e solo prima che riceva un valore numerico. Dopo l'assegnazione di un numero reale, non può più essere riportata allo stato indefinito.

Non c'è modo di verificare direttamente se una variabile è uguale a Undefined. Nei contesti booleani e numerici una variabile non definita si comporta come 0, quindi il pattern usuale è verificare se è ancora uguale a 0 per decidere se è stata impostata. I valori non definiti sono anche esclusi dal ridimensionamento dell'indicatore, il che evita che una serie non impostata distorca l'asse del grafico.

Esempi

Esempio 1, Nascondere un livello finché non è impostato (Indicatore)

probuilder
// Start undefined so no flat line at 0 is drawn before a signal
myLevel = Undefined

// Capture the close only when price crosses its average
IF Close CROSSES OVER Average[20](Close) THEN
  myLevel = Close
ENDIF

RETURN myLevel AS "Signal level"

Poiché la variabile inizia come Undefined, nessuna linea appare finché il crossover non assegna un valore.

Esempio 2, Rilevare un valore non impostato (ProScreener)

probuilder
// Undefined behaves as 0, so a 0 test reveals whether it was set
target = Undefined
IF High > High[1] THEN
  target = High
ENDIF

// Keep only instruments where the target was assigned
SCREENER[target > 0] (target AS "Target")

Lo screener usa il confronto con 0 per mantenere gli strumenti in cui target ha ricevuto un valore reale.

Esempio 3, Livello di stop opzionale in una strategia (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

stopLevel = Undefined

IF Close CROSSES OVER Average[20](Close) THEN
  BUY 1 CONTRACT AT MARKET
  stopLevel = Lowest[10](Low)
ENDIF

// Apply the stop only once it has been set
IF LONGONMARKET AND stopLevel > 0 THEN
  SELL AT stopLevel STOP
ENDIF

Partendo stopLevel come Undefined lo mantiene inerte finché un ingresso non assegna uno stop reale.

Errori e insidie comuni

  • Non può essere testato direttamente. Non esiste IF x = Undefined confronto. Poiché una variabile non definita vale 0, verifica IF x = 0 per verificare se è stato impostato.
  • Assegna solo una volta. Una variabile accetta Undefined una sola volta, prima che contenga un numero. Non può più essere riportato a indefinito.
  • Entra in conflitto con uno zero reale. Se 0 è un valore valido per la variabile, il test su 0 non può distinguere tra non impostata e uno zero autentico. In quel caso usa un flag separato.
  • Close, il prezzo di chiusura di una bar.
  • Open, il prezzo di apertura di una bar.
  • High, il prezzo più alto di una bar.
  • Low, il prezzo più basso di una bar.
  • Decimals, il numero di cifre decimali dello strumento.
  • Range, il massimo meno il minimo di una bar.
  • Volume, il volume scambiato di una bar.
  • TypicalPrice, la media di massimo, minimo e chiusura.