Jetzt beitreten
ProBacktest/probacktest · proorder

CumulateOrders

CumulateOrders ist ein DEFPARAM-Parameter, der steuert, ob eine ProOrder-Strategie mehrere Einstiege in dieselbe Richtung stapeln kann. Syntax und Beispiele.

Syntax

probuilder
DEFPARAM CumulateOrders = true
probuilder
DEFPARAM CumulateOrders = false

Parameter

NameTypStandardBeschreibung
CumulateOrdersBooleantrueWenn true, erhöhen Einstiegsorders in Richtung einer offenen Position diese. Wenn false, werden solche Orders ignoriert, bis die Position geschlossen ist.

So funktioniert es

CumulateOrders ist kein ausführbarer Befehl, sondern ein Parameter auf Strategieebene, deklariert mit DEFPARAM. Wie alle DEFPARAM Zeilen muss es am Anfang des Codes stehen, vor jeder Trading-Logik, und es wird einmal beim Start der Strategie ausgewertet.

Mit CumulateOrders = false, hält die Strategie höchstens eine Positionsscheibe pro Richtung. Wenn ein BUY Bedingung auslöst, während ein Long bereits offen ist, wird die zusätzliche Order verworfen. Das hält die Position Size fest und ist die übliche Wahl für Strategien, bei denen jedes Signal einen vollständigen Trade darstellt.

Mit CumulateOrders = true, wird bei jeder erfüllten Einstiegsbedingung eine weitere Order in dieselbe Richtung gesendet, sodass die Position wächst. Das ermöglicht Pyramidisieren und Nachkaufen, bedeutet aber auch, dass eine Bedingung, die Bar für Bar wahr bleibt, immer weiter kauft, bis Margin- oder Plattformgrenzen eingreifen. Kumulative Strategien koppeln den Parameter daher fast immer mit einer Größenprüfung auf Basis von COUNTOFPOSITION, COUNTOFLONGSHARES oder COUNTOFSHORTSHARES.

Der Parameter hat keinen Einfluss auf Ausstiege. SELL, EXITSHORT und Stop- oder Target-Befehle verhalten sich in beiden Modi gleich.

Beispiele

Beispiel 1, Die Strategie auf einen Einstieg pro Richtung beschränken (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// One position slice at a time. While a long is open,
// further BUY orders in the same direction are ignored.

Die aus der offiziellen Referenz übernommene Deklaration. Am Anfang des Programms platziert, verhindert sie, dass die Strategie eine bestehende Position aufstockt.

Beispiel 2, Pyramiding mit einer ausdrücklichen Größenbegrenzung (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true

fastMA = Average[20](close)
slowMA = Average[50](close)

// Add one contract on each new bullish crossover,
// but never hold more than 4 contracts in total
IF fastMA crosses over slowMA AND abs(COUNTOFPOSITION) < 4 THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

// Flatten everything on a bearish crossover
IF LongOnMarket AND fastMA crosses under slowMA THEN
  SELL AT MARKET
ENDIF

Aktivieren CumulateOrders lässt jede Kreuzung einen Kontrakt hinzufügen, während COUNTOFPOSITION Schutz begrenzt das Gesamtexposure auf vier Kontrakte.

Beispiel 3, Eine short-Position bei Rallyes stufenweise aufbauen (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

rsiVal = RSI[14](close)

// Open or add to the short each time RSI pushes above 70,
// capped at three lots
IF rsiVal crosses over 70 AND COUNTOFSHORTSHARES < 3 THEN
  SELLSHORT 1 LOT AT MARKET
ENDIF

SET STOP %TRAILING 1

Jeder Überkauft-Schub fügt dem short ein Lot hinzu. Da für den Einstieg crosses over, wird die Order einmal pro RSI-Ausschlag ausgelöst und nicht auf jeder Bar, auf der das Niveau hält.

Häufige Fehler und Stolperfallen

  • DEFPARAM placed too late. Alle DEFPARAM Deklarationen, einschließlich CumulateOrders, muss vor jedem anderen Befehl stehen. Eine Deklaration nach der Handelslogik verursacht einen Kompilierfehler.
  • Stilles Scheitern des Pyramidings. Wenn Nachkauf-Einstiege trotz erfüllter Bedingungen nie ausgeführt werden, liegt die übliche Ursache im Parameter, belassen auf false oder in Code weggelassen, der aus einer Strategie mit nur einem Einstieg kopiert wurde. Die Orders werden ohne jede Warnung verworfen.
  • Unkontrollierte Akkumulation. Mit CumulateOrders = true, eine als Zustand geschriebene Bedingung (rsiVal > 70) anstelle eines Ereignisses (rsiVal crosses over 70) sendet auf jeder Bar eine Order, auf der sie wahr bleibt. Kombinieren Sie ereignisartige Bedingungen mit einem COUNTOFPOSITION Obergrenze.
  • Erwarten, dass es entgegengesetzte Orders zusammenführt. Der Parameter steuert nur das Stapeln in derselben Richtung. Eine Order gegen eine offene Position reduziert oder dreht sie weiterhin gemäß der normalen Orderverarbeitung, unabhängig von dieser Einstellung.
  • DEFPARAM, deklariert Strategieparameter am Anfang des Codes.
  • COUNTOFPOSITION, vorzeichenbehaftete Größe der offenen Position, verwendet zur Begrenzung des Pyramidings.
  • COUNTOFLONGSHARES, vorzeichenlose Anzahl der long gehaltenen Aktien.
  • COUNTOFSHORTSHARES, vorzeichenlose Anzahl der short gehaltenen Aktien.
  • BUY, eröffnet eine Long-Position oder baut sie aus.
  • SELLSHORT, eröffnet eine Short-Position oder baut sie aus.
  • ONMARKET, wahr, solange eine Position offen ist.
  • FLATAFTER, DEFPARAM-Parameter, der die Strategie nach einer festgelegten Zeit flat stellt.
  • FLATBEFORE, DEFPARAM-Parameter, der die Strategie vor einer festgelegten Zeit flat hält.