PRELOADBARS
PRELOADBARS is een DEFPARAM-parameter die bepaalt hoeveel historische bars ProBacktest en ProOrder laden voordat een strategie start, zodat indicatoren accuraat beginnen.
Syntaxis
DEFPARAM PRELOADBARS = number_of_barsParameters
| Naam | Type | Standaard | Beschrijving |
|---|---|---|---|
number_of_bars | geheel getal | platformstandaard | Aantal historische bars dat wordt geladen vóór de eerste bar waarop de strategie wordt uitgevoerd. Stem het af op de langste lookback die een indicator in de code gebruikt. |
Hoe het werkt
PRELOADBARS is een van de parameters die de DEFPARAM-instructie accepteert, naast instellingen zoals CUMULATEORDERS, FLATAFTER, FLATBEFORE, en NOCASHUPDATE. Zoals elke DEFPARAM-regel moet het bovenaan de code staan, vóór elke andere instructie, en het wordt één keer bij het opstarten geëvalueerd in plaats van op elke bar.
Het doel is het opwarmen van indicatoren. Een moving average over 100 bars heeft 100 voorgaande closes nodig voordat hij een stabiele waarde geeft. Zonder voldoende voorgeladen historie worden indicatorwaarden op de eerste bars van een backtest of een live run uit een afgekapte reeks berekend, wat kan afwijken van de waarden op de grafiek en valse signalen kan uitlokken. Voorladen n bars geeft elke indicator tot n bars context voor de eerste handelsbeslissing, zonder op die historische bars orders te genereren.
Het bepalen van de waarde is een afweging. Hij moet ruim boven de langste lookback in de code liggen, inclusief geneste lookbacks zoals een gemiddelde van een gemiddelde, maar te grote preloads verhogen het geheugengebruik en de opstarttijd. Een gangbare regel is de langste periode plus een marge van 25 tot 50 procent.
Voorbeelden
Voorbeeld 1, Een voortschrijdend gemiddelde over 100 bars opwarmen (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 2Het gemiddelde over 100 bars vereist 100 slotkoersen, dus het preloaden van 150 bars garandeert correcte waarden vanaf de eerste uitgevoerde bar van de strategie. Dit is het referentievoorbeeld uit de brondocumentatie met herschreven commentaar.
Voorbeeld 2, Breakout op een kanaal van 200 bars (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.5Zonder de preload zou de hoogste waarde over 200 bars aan het begin van de test uit minder bars worden berekend, waardoor vroege breakout-signalen op een kunstmatig laag kanaal afgaan.
Voorbeeld 3, Meerdere DEFPARAM-instellingen combineren (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 staat bij de andere DEFPARAM-declaraties aan het begin van het bestand. De preload van 500 bars dekt het gemiddelde over 200 bars met een ruime marge.
Veelvoorkomende fouten en valkuilen
- DEFPARAM placement. Alle DEFPARAM-regels, inclusief PRELOADBARS, moeten vóór elke andere instructie komen. Een DEFPARAM na de eerste gewone instructie compileert niet.
- Preload kleiner dan de lookback. Als de waarde lager is dan de langste indicatorperiode, worden de eerste signalen uit afgekapte data berekend en kunnen ze afwijken van de waarden in de grafiek. Backtest-entries aan het begin van de test zijn het gebruikelijke symptoom.
- Verborgen geneste lookbacks. Een
average[50]van eenaverage[100]heeft in de praktijk ongeveer 150 bars nodig. Stem de preload af op de gecombineerde diepte, niet alleen op de grootste afzonderlijke periode. - Beperkt door de beschikbare historie. Het platform kan alleen bars preloaden die in de datafeed voor het gekozen tijdframe bestaan. Meer opvragen dan beschikbaar is levert minder gepreloade bars op, dus zeer lange lookbacks op hoge tijdframes kunnen nog steeds gedeeltelijk opgewarmd starten.
Gerelateerde instructies
DEFPARAM, de instructie waar PRELOADBARS een parameter van is.CumulateOrders, DEFPARAM-parameter die de accumulatie van orders regelt.FLATAFTER, DEFPARAM-parameter die na een tijdstip een vlakke positie forceert.FLATBEFORE, DEFPARAM-parameter die posities vóór een tijdstip blokkeert.NOCASHUPDATE, DEFPARAM-parameter die kapitaal tussen trades bevriest.Average, voortschrijdend gemiddelde waarvan de lookback de grootte van de preload bepaalt.BarIndex, telt bars sinds het begin van de geladen data.ONCE, initialiseert een variabele eenmalig bij het opstarten.