Jetzt beitreten
Befehle/probacktest · proorder

DEFPARAM

DEFPARAM sets execution parameters for a ProRealTime™ strategy, such as CumulateOrders, FlatBefore, and FlatAfter, and must appear at the top of the code.

Syntax

probuilder
DEFPARAM ParameterName = Value

Parameter

NameTypStandardBeschreibung
CumulateOrdersBooleantrueBei true fügen neue Signale der offenen Position hinzu. Bei false ist nur eine Position zugleich offen und ein neues Signal ersetzt die aktuelle.
FlatBeforeZeit (HHMMSS)keineZeit, vor der die Strategie flat bleibt: Positionen werden geschlossen und bis zu dieser Zeit werden keine neuen Orders platziert.
FlatAfterZeit (HHMMSS)keineZeit, nach der die Strategie flat geht: offene Positionen werden geschlossen und für den Rest der Sitzung werden keine neuen Positionen eröffnet.
PreLoadBarsGanzzahl200Anzahl der vor dem Start geladenen historischen Bars, damit die Indikatoren ab dem ersten ausgewerteten Bar Daten haben.
NoCashUpdateBooleanfalseBei true ändern realisierte Gewinne und Verluste nicht das Kapital, das für die Position Size verwendet wird, es bleibt auf seinem Anfangswert.

So funktioniert es

DEFPARAM lines are directives, not per-bar instructions. They are read when the strategy starts and fix its execution environment for the whole run. Place them at the top of the code, before any variable assignments or trading logic, one parameter per line.

CumulateOrders bestimmt, was ein wiederholtes Einstiegssignal bedeutet. Mit dem Standardwert true stapelt jedes Signal eine weitere Order auf die Position. Setzt man es auf false, wird eine einzige offene Position erzwungen, was dem Verhalten entspricht, das die meisten Strategien mit Einzeleinstieg erwarten.

FlatBefore und FlatAfter beschränken die Strategie auf ein Handelsfenster innerhalb der Sitzung. Beide nehmen eine Zeit im Format HHMMSS, interpretiert in der lokalen Zeitzone der Börse des Instruments. PreLoadBars und NoCashUpdate stellen die Simulation selbst ein: wie viel Historie die Indikatoren am Anfang sehen können und ob die Position Size mit den Ergebnissen mitwächst.

Beispiele

Beispiel 1, Sitzungsfenster mit Einzelpositionen (ProOrder)

probuilder
DEFPARAM CumulateOrders = false  // one position at a time
DEFPARAM FlatBefore = 090000     // stay flat before 9:00 AM
DEFPARAM FlatAfter = 173000      // go flat after 5:30 PM

Dieser Kopfbereich hält die Strategie außerhalb von 9:00 bis 17:30 Börsenzeit flat und ersetzt Positionen bei jedem neuen Signal, anstatt sie zu akkumulieren.

Beispiel 2, Vorgeladene Historie für langsame Indikatoren (ProBacktest)

probuilder
DEFPARAM PreLoadBars = 300   // enough history for the 200-bar average
DEFPARAM NoCashUpdate = true // size positions on initial capital only
ma = Average[200](close)
IF close CROSSES OVER ma AND NOT onmarket THEN
  BUY 1 CONTRACT AT MARKET
ENDIF
IF close CROSSES UNDER ma THEN
  SELL AT MARKET
ENDIF

Das Vorladen von 300 Bars bedeutet, dass der 200-Perioden-Durchschnitt ab dem ersten getesteten Bar gültig ist, und NoCashUpdate hält die Position Size im Backtest konstant, unabhängig von aufgelaufenem Gewinn oder Verlust.

Beispiel 3, Pyramidisieren mit kumulierten Orders (ProOrder)

probuilder
DEFPARAM CumulateOrders = true  // allow entries to stack
IF close CROSSES OVER Average[20](close) AND countofposition < 3 THEN
  // add one contract per signal, up to three
  BUY 1 CONTRACT AT MARKET
ENDIF
IF close CROSSES UNDER Average[50](close) THEN
  SELL AT MARKET
ENDIF

Mit aktiviertem CumulateOrders fügt jede neue Kreuzung einen Kontrakt hinzu, bis die Positionsobergrenze erreicht ist, und der Ausstieg schließt den gesamten Stapel auf einmal.

Häufige Fehler und Stolperfallen

  • DEFPARAM below other code. Die Direktive muss vor der Strategielogik stehen. Ein DEFPARAM, das nach ausführbaren Anweisungen platziert wird, wird zur Kompilierzeit abgelehnt.
  • Vergessen, dass CumulateOrders standardmäßig true ist. Eine Strategie, die an jedem Bar eines Trends ein Signal gibt, baut weiter Positionen auf, sofern CumulateOrders nicht explizit auf false gesetzt wird. Unerwartet große Positionen in einem Backtest lassen sich meist auf diese Standardeinstellung zurückführen.
  • Falsches Zeitformat. FlatBefore und FlatAfter erwarten HHMMSS als einfache Zahl, 9:00 AM ist also 090000 und 5:30 PM ist 173000. Die Werte werden in der lokalen Zeitzone der Börse gelesen, nicht in der des Rechners, was beim Handel an ausländischen Märkten wichtig ist.
  • Zu wenige vorgeladene Bars. Wenn PreLoadBars kleiner ist als der längste Indikator-Lookback, berechnen frühe Bars Indikatoren auf unvollständigen Daten und können Signale erzeugen, die vom Chart abweichen. Setzen Sie es über die größte im Code verwendete Periode.
  • CumulateOrders, der Parameter zur Orderakkumulation im Detail.
  • FLATBEFORE, die Beschränkung zum Sitzungsbeginn im Detail.
  • FLATAFTER, die Beschränkung zum Sitzungsende im Detail.
  • PRELOADBARS, der Parameter zum Vorladen der Historie im Detail.
  • NOCASHUPDATE, der Parameter zur Kapitalbehandlung im Detail.
  • ONCE, einmalige Variableninitialisierung im Skriptkörper.