Iscriviti ora
ProBacktest/probacktest · proorder

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

probuilder
DEFPARAM PRELOADBARS = number_of_bars

Parametri

NomeTipoPredefinitoDescrizione
number_of_barsinteropredefinito della piattaformaNumero 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)

probuilder
// 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 2

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

probuilder
// 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.5

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

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

PRELOADBARS 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 un average[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.
  • 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.