Jetzt beitreten
ProBacktest/probacktest · proorder

COUNTOFLONGSHARES

COUNTOFLONGSHARES gibt die Anzahl der von einer ProBacktest- oder ProOrder-Strategie long gehaltenen Einheiten zurück, verwendet zur Begrenzung der Position Size beim Anhäufen mehrerer Orders.

Syntax

probuilder
COUNTOFLONGSHARES

So funktioniert es

Die Funktion liest die offene Position und gibt eine Ganzzahl zurück: die Anzahl der zum Zeitpunkt der Auswertung auf der Long-Seite gehaltenen Einheiten. Sie benötigt keine Parameter und keine Klammern. Wenn die Strategie flat oder short ist, gibt sie 0 zurück.

Die Zählung erfolgt in Einheiten, nicht in Trades. Eine einzelne Order von 3 Kontrakten und drei kumulierte Orders von 1 Kontrakt ergeben beide 3. Um über einzelne Einstiege nachzudenken, kombinieren Sie es mit TRADEINDEX und TRADEPRICE, die Orders über ihren Index ansprechen.

Der typische Kontext ist eine Strategie mit DEFPARAM CumulateOrders = true, wo sich mehrere Einstiegsorders zu einer Position stapeln können. Der Vergleich COUNTOFLONGSHARES gegen eine Obergrenze vor jeder weiteren BUY hält das Gesamtengagement innerhalb eines geplanten Limits. Das Äquivalent auf der Short-Seite ist COUNTOFSHORTSHARES, und COUNTOFPOSITION meldet die vorzeichenbehaftete Größe der jeweils offenen Position.

Beispiele

Beispiel 1, Pyramidisieren begrenzt auf drei Einheiten (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true

myMACD = MACD[12,26,9](close)
long = myMACD crosses over 0

// First entry when flat
IF NOT LongOnMarket AND long THEN
    BUY 1 CONTRACTS AT MARKET
ENDIF

// Allow additions only while holding three units or fewer
MAXSHARES = COUNTOFLONGSHARES <= 3

// Add a unit if the last entry is seasoned and in profit
IF TRADEINDEX(1) > 5 AND Close - TRADEPRICE(1) > 10 AND LongOnMarket AND MAXSHARES THEN
    BUY 1 CONTRACTS AT MARKET
ENDIF
SET STOP TRAILING 50

Die Strategie eröffnet bei einem MACD-Kreuzen und fügt dann einen Kontrakt pro Schritt hinzu, solange die laufende Anzahl bei drei oder weniger bleibt, der letzte Einstieg mindestens fünf bars alt ist und sich der Kurs 10 Punkte darüber hinaus bewegt hat.

Beispiel 2, Harte Obergrenze für das Exposure vor jeder Aufstockung (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

trendUp = close > Average[100](close)
pullback = RSI[7](close) < 35

// Never hold more than 5 units long
IF trendUp AND pullback AND COUNTOFLONGSHARES < 5 THEN
    BUY 1 CONTRACT AT MARKET
ENDIF
SET STOP %TRAILING 2

Jeder Rücksetzer in einem Aufwärtstrend fügt eine Einheit hinzu, aber die Bedingung auf COUNTOFLONGSHARES garantiert, dass die gestapelte Position nie fünf Einheiten überschreitet.

Beispiel 3, Abbau der Position, sobald sie groß ist (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

IF close crosses over Average[50](close) AND COUNTOFLONGSHARES < 4 THEN
    BUY 1 CONTRACT AT MARKET
ENDIF

// When fully loaded and momentum fades, shed one unit
IF COUNTOFLONGSHARES >= 4 AND RSI[14](close) crosses under 70 THEN
    SELL 1 CONTRACT AT MARKET
ENDIF
SET STOP %LOSS 3

Die Anzahl steuert beide Richtungen: Sie lässt neue Einstiege nur unter vier Einheiten zu und löst einen Teilausstieg aus, sobald die Position vollständig aufgebaut ist und das Momentum dreht.

Häufige Fehler und Stolperfallen

  • Einheiten, nicht Trades. Der Rückgabewert zählt Aktien, Kontrakte oder Lots, nicht die Anzahl der Einstiegsorders. Eine Strategie, die 2 Kontrakte pro Signal kauft, erreicht eine Obergrenze von 6 nach drei Signalen, nicht nach sechs.
  • Ohne kumulierte Orders sinnlos. Mit dem Standard CumulateOrders = false, hält eine Strategie höchstens einen Einstieg zur Zeit, sodass die Funktion nur die Menge dieser einen Order oder 0 zurückgibt. Pyramiding-Logik benötigt DEFPARAM CumulateOrders = true eine Rolle zu spielen.
  • Null, wenn short oder flat. Die Funktion ignoriert Short-Exposure vollständig und gibt 0 zurück. Ein Test COUNTOFLONGSHARES = 0 bedeutet nicht, dass die Strategie keine Position hält; kombinieren Sie es mit ONMARKET oder COUNTOFSHORTSHARES für das vollständige Bild.
  • Wird zur bar-Zeit ausgewertet. Die Anzahl spiegelt die zum aktuellen Bar ausgeführten Orders wider. Eine in diesem Bar gesendete, aber noch nicht ausgeführte Order ist nicht enthalten, daher können aufeinanderfolgende Aufstockungen in einem Bar eine zuvor im Code geprüfte Obergrenze überschreiten.
  • COUNTOFSHORTSHARES, Anzahl der short gehaltenen Einheiten.
  • COUNTOFPOSITION, vorzeichenbehaftete Größe der offenen Position.
  • CumulateOrders, DEFPARAM, das das Stapeln mehrerer Einstiegsorders erlaubt.
  • LONGONMARKET, wahr, solange eine Long-Position offen ist.
  • ONMARKET, wahr, solange eine Position offen ist.
  • TRADEINDEX, bar-Index einer bestimmten Einstiegsorder.
  • TRADEPRICE, Einstiegskurs einer bestimmten Order.
  • BUY, eröffnet eine Long-Position oder baut sie aus.