PRELOADBARS
PRELOADBARS è un parametro DEFPARAM che imposta quante bar storiche ProBacktest e ProOrder caricano prima dell'avvio di una strategia, affinché gli indicatori partano accurati.
Sintassi
DEFPARAM PRELOADBARS = number_of_barsParametri
| Nome | Tipo | Predefinito | Descrizione |
|---|---|---|---|
number_of_bars | intero | predefinito della piattaforma | Numero di bar storiche caricate prima della prima bar su cui la strategia viene eseguita. Dimensionalo in base al lookback più lungo usato da qualsiasi indicatore nel codice. |
Come funziona
PRELOADBARS è uno dei parametri accettati dall'istruzione DEFPARAM, insieme a impostazioni come CUMULATEORDERS, FLATAFTER, FLATBEFORE, e NOCASHUPDATE. Come ogni riga DEFPARAM, deve comparire all'inizio del codice, prima di qualsiasi altra istruzione, e viene valutata una volta all'avvio anziché su ogni barra.
Il suo scopo è il riscaldamento degli indicatori. Una media mobile a 100 bar ha bisogno di 100 chiusure passate prima di produrre un valore stabile. Senza storico precaricato a sufficienza, le letture degli indicatori sui primi bar di un backtest o di un'esecuzione reale sono calcolate su una serie troncata, il che può differire dai valori mostrati sul grafico e generare segnali spuri. Precaricare n bar fornisce a ogni indicatore fino a n bars di contesto prima della prima decisione di trading, senza generare alcun ordine su quelle bars storiche.
Dimensionare il valore è un compromesso. Dovrebbe superare comodamente il lookback più lungo nel codice, compresi i lookback annidati come una media di una media, ma preload sovradimensionati aumentano l'uso di memoria e il tempo di avvio. Una regola comune è il periodo più lungo più un margine dal 25 al 50 percento.
Esempi
Esempio 1, Riscaldare una media mobile a 100 bar (ProOrder)
// Preload 150 bars so the 100 bar average is valid from the first decision
DEFPARAM PRELOADBARS = 150
myMA = average[100](close)
IF NOT ShortOnMarket AND close[1] < myMA[1] THEN
SELLSHORT 1 SHARES AT MARKET
ENDIF
SET STOP %TRAILING 2La media a 100 bar richiede 100 chiusure, quindi precaricare 150 bar garantisce valori corretti dalla prima bar eseguita della strategia. Questo è l'esempio di riferimento della documentazione originale con i commenti riscritti.
Esempio 2, Breakout su un canale a 200 bar (ProBacktest)
// Preload enough history for the 200 bar channel
DEFPARAM PRELOADBARS = 250
upperBand = highest[200](high[1])
IF NOT onmarket AND close > upperBand THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
SET STOP %TRAILING 1.5Senza il preload, il massimo a 200 bar verrebbe calcolato su un numero minore di bar all'inizio del test, facendo scattare i primi segnali di breakout su un canale artificialmente basso.
Esempio 3, Combinare diverse impostazioni DEFPARAM (ProOrder)
// All DEFPARAM lines must precede any other instruction
DEFPARAM CUMULATEORDERS = FALSE
DEFPARAM PRELOADBARS = 500
slowMA = average[200](close)
fastMA = average[50](close)
IF NOT onmarket AND fastMA CROSSES OVER slowMA THEN
BUY 1 CONTRACTS AT MARKET
ENDIF
IF longonmarket AND fastMA CROSSES UNDER slowMA THEN
SELL AT MARKET
ENDIFPRELOADBARS si trova insieme alle altre dichiarazioni DEFPARAM all'inizio del file. Il preload di 500 bar copre la media a 200 bar con ampio margine.
Errori e insidie comuni
- DEFPARAM placement. Tutte le righe DEFPARAM, compresa PRELOADBARS, devono precedere qualsiasi altra istruzione. Un DEFPARAM dopo la prima istruzione ordinaria non compila.
- Preload inferiore al lookback. Se il valore è inferiore al periodo più lungo degli indicatori, i primi segnali sono calcolati su dati troncati e possono non corrispondere ai valori del grafico. Gli ingressi del backtest vicino all'inizio del test sono il sintomo tipico.
- Lookback annidati nascosti. Un
average[50]di unaverage[100]ha bisogno in pratica di circa 150 bars. Dimensiona il preload sulla profondità complessiva, non solo sul singolo periodo più lungo. - Limitato dallo storico disponibile. La piattaforma può precaricare solo le bar presenti nel flusso dati per il timeframe scelto. Richiederne più di quante siano disponibili comporta un numero inferiore di bar precaricate, quindi lookback molto lunghi su timeframe elevati possono comunque partire solo parzialmente riscaldati.
Istruzioni correlate
DEFPARAM, l'istruzione di cui PRELOADBARS è un parametro.CumulateOrders, parametro DEFPARAM che controlla l'accumulo degli ordini.FLATAFTER, parametro DEFPARAM che forza una posizione flat dopo un orario.FLATBEFORE, parametro DEFPARAM che blocca le posizioni prima di un orario.NOCASHUPDATE, parametro DEFPARAM che congela il capitale tra le operazioni.Average, media mobile il cui lookback determina la dimensione del preload.BarIndex, conta le bar dall'inizio dei dati caricati.ONCE, inizializza una variabile una sola volta all'avvio.