Bli medlem idag
ProBacktest/probacktest · proorder

PRELOADBARS

PRELOADBARS är en DEFPARAM-parameter som anger hur många historiska barer ProBacktest och ProOrder läser in innan en strategi startar, så att indikatorer startar korrekt.

Syntax

probuilder
DEFPARAM PRELOADBARS = number_of_bars

Parametrar

NamnTypStandardBeskrivning
number_of_barsheltalplattformens standardAntal historiska barer som läses in före den första baren där strategin körs. Anpassa storleken till den längsta lookback som någon indikator i koden använder.

Så fungerar det

PRELOADBARS är en av de parametrar som DEFPARAM-instruktionen godtar, jämte inställningar som CUMULATEORDERS, FLATAFTER, FLATBEFORE, och NOCASHUPDATE. Som varje DEFPARAM-rad måste den stå högst upp i koden, före alla andra instruktioner, och den utvärderas en gång vid start i stället för på varje bar.

Syftet är att värma upp indikatorerna. Ett glidande medelvärde på 100 barer behöver 100 tidigare stängningar innan det ger ett stabilt värde. Utan tillräckligt med förinläst historik beräknas indikatorvärdena på de första barerna i en backtest eller en livekörning från en avhuggen serie, vilket kan skilja sig från de värden som visas i diagrammet och utlösa falska signaler. Att förinläsa n barer ger varje indikator upp till n barer med kontext innan det första handelsbeslutet, utan att generera några ordrar på de historiska barerna.

Att välja värdet är en avvägning. Det bör med god marginal överstiga den längsta lookbacken i koden, inklusive nästlade lookbacks som ett medelvärde av ett medelvärde, men överdimensionerade förinläsningar ökar minnesanvändning och starttid. En vanlig regel är den längsta perioden plus en marginal på 25 till 50 procent.

Exempel

Exempel 1, Värma upp ett 100-bars glidande medelvärde (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

100-bars medelvärdet kräver 100 stängningskurser, så att förinläsa 150 barer garanterar korrekta värden från strategins första körda bar. Detta är referensexemplet från källdokumentationen med omskrivna kommentarer.

Exempel 2, Breakout på en 200-bars kanal (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

Utan förinläsningen skulle 200-bars högsta beräknas från färre barer i början av testet, vilket gör att tidiga breakout-signaler utlöses på en konstlat låg kanal.

Exempel 3, Kombinera flera DEFPARAM-inställningar (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 ligger tillsammans med de övriga DEFPARAM-deklarationerna i början av filen. Förinläsningen på 500 barer täcker 200-bars medelvärdet med bred marginal.

Vanliga fel och fallgropar

  • DEFPARAM placement. Alla DEFPARAM-rader, inklusive PRELOADBARS, måste komma före alla andra satser. En DEFPARAM efter den första vanliga instruktionen går inte att kompilera.
  • Förinläsning mindre än lookbacken. Om värdet är under den längsta indikatorperioden beräknas tidiga signaler från avkortade data och kan avvika från diagramvärdena. Entries i backtestet nära testets början är det vanliga symptomet.
  • Dolda nästlade lookbacks. En average[50] av en average[100] behöver i praktiken omkring 150 barer. Dimensionera förinläsningen efter det sammanlagda djupet, inte bara den största enskilda perioden.
  • Begränsad av tillgänglig historik. Plattformen kan bara förinläsa barer som finns i dataflödet för den valda tidsramen. Att begära mer än vad som finns tillgängligt ger färre förinlästa barer, så mycket långa lookbacks på höga tidsramar kan fortfarande starta delvis uppvärmda.
  • DEFPARAM, instruktionen som PRELOADBARS är en parameter till.
  • CumulateOrders, DEFPARAM-parameter som styr ackumulering av order.
  • FLATAFTER, DEFPARAM-parameter som tvingar fram en stängd position efter en viss tidpunkt.
  • FLATBEFORE, DEFPARAM-parameter som blockerar positioner före en viss tidpunkt.
  • NOCASHUPDATE, DEFPARAM-parameter som fryser kapital mellan affärer.
  • Average, glidande medelvärde vars lookback styr storleken på förinläsningen.
  • BarIndex, räknar barer sedan början av den inlästa datan.
  • ONCE, initierar en variabel en enda gång vid start.