PRELOADBARS
PRELOADBARS ist ein DEFPARAM-Parameter, der festlegt, wie viele historische Bars ProBacktest und ProOrder laden, bevor eine Strategie startet, damit Indikatoren von Anfang an korrekt sind.
Syntax
DEFPARAM PRELOADBARS = number_of_barsParameter
| Name | Typ | Standard | Beschreibung |
|---|---|---|---|
number_of_bars | Ganzzahl | Plattformstandard | Anzahl der historischen Bars, die vor der ersten Bar geladen werden, auf der die Strategie ausgeführt wird. Dimensionieren Sie sie nach dem längsten Rückblick, den irgendein Indikator im Code verwendet. |
So funktioniert es
PRELOADBARS ist einer der Parameter, die der Befehl DEFPARAM akzeptiert, neben Einstellungen wie CUMULATEORDERS, FLATAFTER, FLATBEFORE, und NOCASHUPDATE. Wie jede DEFPARAM-Zeile muss er am Anfang des Codes stehen, vor jedem anderen Befehl, und er wird einmal beim Start ausgewertet und nicht auf jeder Bar.
Der Zweck ist das Aufwärmen der Indikatoren. Ein gleitender Durchschnitt über 100 Bars benötigt 100 vergangene Closes, bevor er einen stabilen Wert liefert. Ohne ausreichend vorgeladene Historie werden Indikatorwerte auf den ersten Bars eines Backtests oder eines Live-Durchlaufs aus einer abgeschnittenen Serie berechnet, was von den im Chart gezeigten Werten abweichen und falsche Signale auslösen kann. Das Vorladen von n Bars geben jedem Indikator bis zu n Bars Kontext vor der ersten Handelsentscheidung, ohne auf diesen historischen Bars Orders zu erzeugen.
Die Dimensionierung des Werts ist ein Kompromiss. Er sollte den längsten Rückblick im Code deutlich übersteigen, einschließlich verschachtelter Rückblicke wie einem Durchschnitt eines Durchschnitts, aber überdimensioniertes Vorladen erhöht den Speicherbedarf und die Startzeit. Eine verbreitete Regel ist die längste Periode plus einen Spielraum von 25 bis 50 Prozent.
Beispiele
Beispiel 1, Einen gleitenden 100-Bar-Durchschnitt aufwärmen (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 2Der 100-Bar-Durchschnitt benötigt 100 Schlusskurse, daher garantiert das Vorladen von 150 Bars korrekte Werte ab der ersten ausgeführten Bar der Strategie. Dies ist das Referenzbeispiel aus der Originaldokumentation mit neu geschriebenen Kommentaren.
Beispiel 2, Breakout auf einem 200-Bar-Kanal (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.5Ohne das Vorladen würde das 200-Bar-Hoch zu Beginn des Tests aus weniger Bars berechnet, wodurch frühe breakout-Signale auf einem künstlich niedrigen Kanal auslösen.
Beispiel 3, Mehrere DEFPARAM-Einstellungen kombinieren (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 steht bei den anderen DEFPARAM-Deklarationen am Anfang der Datei. Das Vorladen von 500 Bars deckt den 200-Bar-Durchschnitt mit großem Spielraum ab.
Häufige Fehler und Stolperfallen
- DEFPARAM placement. Alle DEFPARAM-Zeilen, einschließlich PRELOADBARS, müssen vor jeder anderen Anweisung stehen. Ein DEFPARAM nach dem ersten regulären Befehl lässt sich nicht kompilieren.
- Vorladen kleiner als der Rückblick. Wenn der Wert unter der längsten Indikatorperiode liegt, werden frühe Signale aus abgeschnittenen Daten berechnet und stimmen möglicherweise nicht mit den Chartwerten überein. Backtest-Einstiege nahe dem Testbeginn sind das übliche Symptom.
- Versteckte verschachtelte Rückblicke. Ein
average[50]einesaverage[100]benötigt effektiv etwa 150 Bars. Bemessen Sie den Vorlauf nach der kombinierten Tiefe, nicht nur nach der größten einzelnen Periode. - Begrenzt durch die verfügbare Historie. Die Plattform kann nur Bars vorladen, die im Datenfeed für die gewählte Zeiteinheit vorhanden sind. Mehr anzufordern, als verfügbar ist, führt zu weniger vorgeladenen Bars, daher starten sehr lange Rückblicke auf hohen Zeiteinheiten möglicherweise dennoch nur teilweise aufgewärmt.
Verwandte Befehle
DEFPARAM, der Befehl, zu dem PRELOADBARS als Parameter gehört.CumulateOrders, DEFPARAM-Parameter, der die Orderkumulierung steuert.FLATAFTER, DEFPARAM-Parameter, der nach einer Uhrzeit eine geschlossene Position erzwingt.FLATBEFORE, DEFPARAM-Parameter, der Positionen vor einer Uhrzeit blockiert.NOCASHUPDATE, DEFPARAM-Parameter, der Kapital zwischen Trades einfriert.Average, gleitender Durchschnitt, dessen Rückblick die Größe des Vorladens bestimmt.BarIndex, zählt die Bars seit Beginn der geladenen Daten.ONCE, initialisiert eine Variable einmalig beim Start.