Iscriviti ora
Istruzioni/probuilder · probacktest · proorder · proscreener

Unset

Unset cancella ogni valore memorizzato in un array ProBuilder con una sola chiamata, riportando l'array a uno stato vuoto perché possa essere riempito con dati nuovi in seguito.

Sintassi

probuilder
Unset($array)

Parametri

NomeTipoPredefinitoDescrizione
$arrayarrayobbligatorioLa variabile array il cui contenuto viene azzerato. I nomi degli array iniziano sempre con $.

Come funziona

Unset cancella tutti gli elementi dell'array indicato in una sola volta. Dopo la chiamata, nessun indice conta più come assegnato: IsSet restituisce 0 per ogni posizione e LastSet restituisce -1, esattamente come se l'array non fosse mai stato scritto. La variabile stessa non viene eliminata, le assegnazioni successive la ripopolano normalmente.

L'istruzione esiste perché gli array persistono da una barra all'altra. I valori scritti sulle barre precedenti restano disponibili su quelle successive, ed è questo che rende gli array utili come buffer di accumulo, ma significa anche che i dati obsoleti sopravvivono se non vengono cancellati esplicitamente. Unset è l'interruttore di azzeramento di quella persistenza.

Gli schemi tipici legano l'azzeramento a un evento di mercato o a un confine di calendario: svuotare un buffer di sessione quando inizia una nuova giornata di negoziazione, scartare le statistiche raccolte quando il prezzo rompe un livello chiave, o svuotare un array di lavoro all'inizio di un calcolo per barra prima di riempirlo di nuovo. È interessato solo l'array indicato, gli altri array e le variabili semplici conservano i loro valori.

Leggere un elemento dopo Unset senza riassegnarlo prima restituisce lo stato non assegnato invece del valore precedente, quindi qualsiasi codice che usa l'array dovrebbe riempirlo di nuovo oppure verificare IsSet prima della lettura.

Esempi

Esempio 1, Svuotare un buffer su un breakdown (Indicatore)

probuilder
// Fill the array with moving average values
FOR i = 0 TO 19 DO
  $Array1[i] = average[i](close)
NEXT

// Reset the buffer when price breaks the 20-bar low
IF close crosses under low[20] THEN
  Unset($Array1)
ENDIF
RETURN lastset($Array1) AS "filled up to index"

L'array conserva i valori medi finché non scatta la condizione di breakdown, momento in cui Unset lo svuota perché possa essere ricostruito con dati nuovi.

Esempio 2, Azzerare le statistiche di sessione ogni giorno (ProOrder)

probuilder
// Collect the range of every bar during the session
IF intradaybarindex = 0 THEN
  // new trading day, discard yesterday's data
  Unset($barRanges)
ENDIF
$barRanges[max(0, lastset($barRanges) + 1)] = high - low

// Trade only when today already shows expanding ranges
IF lastset($barRanges) >= 5 THEN
  IF high - low > arraymax($barRanges) * 0.9 AND NOT onmarket THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ENDIF

SET STOP %LOSS 1

Unset viene eseguito sulla prima barra di ogni giorno, così l'array delle statistiche descrive sempre e solo la sessione corrente.

Esempio 3, Array di lavoro ricostruito a ogni barra (ProScreener)

probuilder
// Start from an empty scratch buffer on each evaluation
Unset($gains)
FOR k = 0 TO 9 DO
  IF close[k] > close[k + 1] THEN
    $gains[k] = close[k] - close[k + 1]
  ENDIF
NEXT

// Sum only the indices that were actually set
total = 0
FOR k = 0 TO 9 DO
  IF isset($gains[k]) THEN
    total = total + $gains[k]
  ENDIF
NEXT

SCREENER[total > 0] (total AS "10-bar gain sum")

Poiché gli array persistono tra le barre, l'Unset iniziale garantisce che il buffer contenga solo valori calcolati per la barra corrente.

Errori e insidie comuni

  • Leggere dopo la cancellazione. Gli elementi letti dopo Unset non sono assegnati, non sono residui garantiti a zero. Riempi di nuovo l'array o proteggi le letture con IsSet prima di consumare i valori.
  • Dimenticare che gli array persistono. Omettere Unset non genera un errore, mescola silenziosamente i dati delle barre precedenti nei nuovi calcoli. I buffer ricostruiti a ogni barra o a ogni sessione richiedono un azzeramento esplicito.
  • Cancellare più del previsto. Unset cancella sempre l'intero array. Non esiste una forma per singolo indice, rimuovere un singolo elemento richiede di ricostruire l'array senza di esso.
  • LastSet restituisce -1 successivamente. Il codice che accoda con $array[lastset($array) + 1] funziona ancora dopo Unset perché -1 + 1 = 0, ma il codice che legge $array[lastset($array)] senza una protezione indicizza -1.
  • IsSet, verifica se un indice specifico dell'array contiene un valore.
  • LastSet, restituisce l'indice assegnato più alto, -1 dopo Unset.
  • ArrayMax, valore maggiore attualmente memorizzato in un array.
  • ArrayMin, valore minore attualmente memorizzato in un array.
  • ArraySort, ordina il contenuto di un array sul posto.
  • ONCE, inizializzazione una sola volta per le variabili semplici.
  • BarIndex, posizione della barra corrente, spesso usata con gli array come indice.