Jetzt beitreten
ProBacktest/probacktest · proorder

COUNTOFPOSITION

COUNTOFPOSITION gibt die vorzeichenbehaftete Größe der offenen Position in ProBacktest und ProOrder zurück, positiv für long und negativ für short. Syntax und Beispiele.

Syntax

probuilder
COUNTOFPOSITION

Das Schlüsselwort nimmt keine Parameter und wird innerhalb von Ausdrücken wie eine schreibgeschützte Variable verwendet.

So funktioniert es

Auf jedem Bar, COUNTOFPOSITION spiegelt die aktuell von der Strategie gehaltene Menge wider. Das Vorzeichen kodiert die Richtung: eine Strategie, die 3 Kontrakte long ist, liefert 3, eine Strategie short mit 3 Kontrakten liest -3, und eine flache Strategie liest 0. Der Wert aktualisiert sich, wenn Orders ausgeführt werden, sodass er nach einem Teilausstieg die verbleibende Menge zeigt, nicht die ursprüngliche Einstiegsgröße.

Die vorzeichenbehaftete Konvention macht das Schlüsselwort in zwei Situationen nützlich. Erstens, Richtungsprüfungen: COUNTOFPOSITION > 0 ist gleichbedeutend mit LONGONMARKET, und COUNTOFPOSITION < 0 zu SHORTONMARKET. Zweitens, Positionsobergrenzen: ABS(COUNTOFPOSITION) liefert die Gesamtgröße unabhängig von der Richtung, was der übliche Weg ist, das Pyramidisieren zu begrenzen, wenn DEFPARAM CumulateOrders = true erlaubt wiederholte Einstiege in dieselbe Richtung.

Nur die ausgeführte Menge wird gezählt. Schwebende Limit- oder Stop-Orders, die nicht ausgeführt wurden, ändern den Wert nicht. Für vorzeichenlose Zählungen je Richtung COUNTOFLONGSHARES und COUNTOFSHORTSHARES melden die Long- und Short-Mengen getrennt.

Beispiele

Beispiel 1, Begrenzung einer pyramidisierten Short-Position (ProBacktest)

probuilder
myMACD = MACD[12,26,9](close)
short = myMACD crosses under 0

// First short entry when flat on the short side
IF NOT ShortOnMarket AND short THEN
  SELLSHORT 1 CONTRACTS AT MARKET
ENDIF

// Allow re-entries only while total size stays at or below 10 contracts
MAXSHARES = abs(COUNTOFPOSITION) <= 10
IF TRADEINDEX(1) > 5 AND TRADEPRICE(1) - Close > 10 * pointsize AND ShortOnMarket AND MAXSHARES THEN
  SELLSHORT 1 CONTRACTS AT MARKET
ENDIF
SET STOP TRAILING 50

Die Strategie baut einen Short auf, während der Kurs fällt. Weil COUNTOFPOSITION ist negativ, solange short, ABS() rechnet sie in eine Gesamtgröße um, bevor sie mit der Obergrenze von 10 verglichen wird.

Beispiel 2, Richtungsprüfung ohne ONMARKET-Schlüsselwörter (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

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

// Enter long on a bullish crossover when flat
IF COUNTOFPOSITION = 0 AND fastMA crosses over slowMA THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

// Close the long on a bearish crossover
IF COUNTOFPOSITION > 0 AND fastMA crosses under slowMA THEN
  SELL AT MARKET
ENDIF

COUNTOFPOSITION = 0 erkennt eine flache Strategie und COUNTOFPOSITION > 0 erkennt einen offenen Long, analog zu ONMARKET und LONGONMARKET mit einem einzigen Schlüsselwort.

Beispiel 3, Bemessung eines Teilausstiegs anhand der laufenden Position (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

// Scale into a long, then bank half once the trade is 20 points onside
IF LongOnMarket AND close - TRADEPRICE >= 20 * pointsize AND COUNTOFPOSITION >= 4 THEN
  // Exit half of whatever is currently held
  SELL COUNTOFPOSITION / 2 CONTRACTS AT MARKET
ENDIF

Das Auslesen der laufenden Größe erlaubt es dem Ausstieg, sich an die tatsächlich ausgeführte Anzahl von Einstiegen anzupassen, anstatt eine Menge fest zu codieren.

Häufige Fehler und Stolperfallen

  • Das Vorzeichen bei Shorts vergessen. Solange short, COUNTOFPOSITION ist negativ, daher eine Absicherung wie COUNTOFPOSITION <= 10 ist immer wahr und begrenzt nie etwas. Vergleichen Sie ABS(COUNTOFPOSITION) wenn die Gesamtgröße gemeint ist.
  • Erwartung, dass ausstehende Orders mitzählen. Der Wert spiegelt nur die ausgeführte Menge wider. Eine liegende Limit-Order, die nicht ausgeführt wurde, lässt COUNTOFPOSITION unverändert, daher berücksichtigen darauf basierende Exposure-Obergrenzen keine beim Broker wartenden Orders.
  • Keine Anhäufung ohne CumulateOrders. Mit dem Standard DEFPARAM CumulateOrders = false, stapeln sich zusätzliche Orders in derselben Richtung nicht, daher COUNTOFPOSITION wächst nie über den ersten Einstieg hinaus und die Pyramiding-Logik bleibt stillschweigend wirkungslos.
  • Verwendung außerhalb von Strategien. Das Schlüsselwort existiert in ProBuilder-Indikatoren oder ProScreener nicht. Positionsabhängige Logik muss im ProBacktest- oder ProOrder-Code selbst stehen.
  • COUNTOFLONGSHARES, vorzeichenlose Anzahl der long gehaltenen Aktien.
  • COUNTOFSHORTSHARES, vorzeichenlose Anzahl der short gehaltenen Aktien.
  • CumulateOrders, DEFPARAM-Parameter, der das Stapeln von Einstiegen in dieselbe Richtung ermöglicht.
  • ONMARKET, wahr, solange eine Position offen ist.
  • LONGONMARKET, wahr, solange eine Long-Position offen ist.
  • SHORTONMARKET, wahr, solange eine Short-Position offen ist.
  • TRADEINDEX, Bar-Index der Ausführung eines vorherigen Trades.
  • TRADEPRICE, Einstiegskurs des aktuellen oder eines vorherigen Trades.