CalculateOnLastBars
DEFPARAM CalculateOnLastBars limits a ProBuilder indicator calculation to the most recent n bars, cutting computation time and memory use on large charts.
Sintassi
DEFPARAM CalculateOnLastBars = nParametri
| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
n | intero | tutte le bar caricate | Numero di bar, contate all'indietro dalla più recente, su cui l'indicatore viene valutato. |
Come funziona
Per impostazione predefinita, un indicatore viene valutato su ogni bar caricata nel grafico. Su strumenti con centinaia di migliaia di bar, o con script che contengono cicli, array o chiamate di disegno, questa passata completa può essere lenta. CalculateOnLastBars dice alla piattaforma di eseguire lo script solo sulle ultime n bar e di saltare tutto ciò che è più vecchio.
L'istruzione è un DEFPARAM, quindi va in cima allo script, prima di qualsiasi istruzione eseguibile. Configura il modo in cui l'indicatore viene pianificato invece di calcolare qualcosa, e si applica all'intero script, non alle singole righe.
Il compromesso è l'accuratezza al bordo. Le bar più vecchie della finestra semplicemente non vengono valutate, quindi lì l'indicatore non traccia nulla, e i calcoli vicino all'inizio della finestra possono non avere lo storico che si aspettano. Una media a 200 periodi calcolata sulla prima bar dentro una finestra di 300 bar non può vedere le bar precedenti alla finestra e differirà dal valore che produrrebbe un calcolo completo. I costrutti ricorsivi, come le medie esponenziali o le variabili riportate manualmente, sono i più colpiti, perché il loro stato normalmente si accumula sull'intero storico.
Valori sensati di n includono quindi un margine generoso oltre il lookback più lungo dello script. Per strumenti puramente visivi, dashboard o overlay in stile scansione che guardano solo alle bar recenti, valori aggressivi vanno bene e producono forti accelerazioni. L'istruzione si applica agli indicatori; le strategie automatiche controllano invece la loro profondità storica con PRELOADBARS.
Esempi
Esempio 1, Limitare una media mobile alle bar recenti (Indicatore)
// Evaluate this indicator on the last 100 bars only
DEFPARAM CalculateOnLastBars = 100
myMovingAverage = Average[100](close)
RETURN myMovingAverage AS "MA 100"La media viene calcolata e tracciata solo sulle ultime 100 bar. Poiché il lookback è uguale alla finestra, i primi valori tracciati sono costruiti su meno bar di quante ne userebbe un calcolo completo.
Esempio 2, Velocizzare uno script ricco di cicli (Indicatore)
// Heavy per-bar loop, so limit evaluation to the last 500 bars
DEFPARAM CalculateOnLastBars = 500
// Count how many of the previous 50 closes are below the current close
strength = 0
FOR i = 1 TO 50 DO
IF close > close[i] THEN
strength = strength + 1
ENDIF
NEXT
RETURN strength AS "Closes beaten (of 50)"Il ciclo da 50 iterazioni viene eseguito su 500 bar invece che sull'intero grafico, il che mantiene reattivo l'indicatore su strumenti con storici lunghi.
Esempio 3, Dashboard disegnata sulla bar in corso (Indicatore)
// Only the newest bars matter for a text dashboard
DEFPARAM CalculateOnLastBars = 10
DEFPARAM DrawOnLastBarOnly = true
r = RSI[14](close)
a = AverageTrueRange[14](close)
// Print current readings next to the last bar
DRAWTEXT("RSI: #r#", barindex + 5, close, sansserif, standard, 14)
DRAWTEXT("ATR: #a#", barindex + 5, close - a, sansserif, standard, 14)
RETURNCombinare CalculateOnLastBars con DrawOnLastBarOnly mantiene economica una dashboard testuale: lo script valuta sempre solo una manciata di bar recenti e disegna una volta sola.
Errori e insidie comuni
- I valori al bordo sono distorti. I calcoli vicino all'inizio della finestra non dispongono dello storico più vecchio, quindi lì medie, somme e valori ricorsivi differiscono da un calcolo sull'intero grafico. Imposta n ben al di sopra del lookback più lungo presente nello script.
- DEFPARAM placement. La riga deve comparire in cima allo script, prima del codice eseguibile. Collocarla dopo i calcoli provoca un errore di compilazione.
- Le bar più vecchie non mostrano nulla. L'indicatore è vuoto prima della finestra. È un comportamento previsto, non un problema di dati, ma sorprende gli utenti che lo confrontano con la stessa formula senza il parametro.
- Ambito indicatore. CalculateOnLastBars è un'ottimizzazione per gli indicatori. Le strategie gestiscono la loro profondità storica con
PRELOADBARS, e usare quella sbagliata per il contesto non ha effetto o impedisce la compilazione.
Istruzioni correlate
DEFPARAM, dichiara i parametri a livello di script come questo.DrawOnLastBarOnly, limita l'output di disegno all'ultima bar.IsLastBarUpdate, vero solo durante l'aggiornamento dell'ultima bar, per proteggere il codice pesante.PRELOADBARS, controlla quanto storico carica una strategia prima di partire.BarIndex, posizione a base zero della bar corrente nei dati caricati.ONCE, inizializza una variabile una sola volta sulla prima bar valutata.