Bli medlem idag
ProBacktest/probacktest · proorder

COUNTOFLONGSHARES

COUNTOFLONGSHARES returnerar antalet enheter som hålls long av en ProBacktest- eller ProOrder-strategi, används för att begränsa position size när flera ordrar ackumuleras.

Syntax

probuilder
COUNTOFLONGSHARES

Så fungerar det

Funktionen läser den öppna positionen och returnerar ett heltal: antalet enheter som hålls på long-sidan vid utvärderingstillfället. Den kräver inga parametrar och inga parenteser. När strategin är utan position eller short returnerar den 0.

Antalet uttrycks i enheter, inte i affärer. En enskild order på 3 kontrakt och tre kumulerade ordrar på 1 kontrakt returnerar båda 3. För att resonera om enskilda entryer, kombinera den med TRADEINDEX och TRADEPRICE, som adresserar ordrar via deras index.

Det typiska sammanhanget är en strategi med DEFPARAM CumulateOrders = true, där flera entryordrar kan staplas till en position. Att jämföra COUNTOFLONGSHARES mot ett tak före varje ytterligare BUY håller den totala exponeringen inom en planerad gräns. Motsvarigheten på short-sidan är COUNTOFSHORTSHARES, och COUNTOFPOSITION rapporterar den tecknade storleken på vilken position som än är öppen.

Exempel

Exempel 1, Pyramidering begränsad till tre enheter (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

Strategin öppnar på en MACD-korsning och lägger sedan till ett kontrakt i taget så länge det löpande antalet håller sig på tre eller lägre, den senaste entryn är minst fem barer gammal och priset har rört sig 10 punkter bortom den.

Exempel 2, Hårt exponeringstak före varje påfyllning (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

Varje pullback i en uppgående trend lägger till en enhet, men villkoret på COUNTOFLONGSHARES garanterar att den staplade positionen aldrig överstiger fem enheter.

Exempel 3, Skala ut när positionen är stor (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

Antalet styr i båda riktningarna: det spärrar nya entries under fyra enheter och triggar en delvis exit när positionen är fullt uppbyggd och momentum vänder.

Vanliga fel och fallgropar

  • Enheter, inte affärer. Returvärdet räknar aktier, kontrakt eller lotter, inte antalet entryordrar. En strategi som köper 2 kontrakt per signal når ett tak på 6 efter tre signaler, inte efter sex.
  • Meningslöst utan ackumulerade ordrar. Med standardvärdet CumulateOrders = false, håller en strategi högst en entry åt gången, så funktionen returnerar bara den enda orderns kvantitet eller 0. Pyramideringslogik behöver DEFPARAM CumulateOrders = true att ha betydelse.
  • Noll när short eller utan position. Funktionen ignorerar short-exponering helt och returnerar 0. Att testa COUNTOFLONGSHARES = 0 betyder inte att strategin är flat; kombinera med ONMARKET eller COUNTOFSHORTSHARES för hela bilden.
  • Utvärderas vid barens tidpunkt. Antalet speglar fyllda ordrar per den aktuella baren. En order som skickats denna bar men ännu inte utförts räknas inte med, så påfyllningar direkt efter varandra inom en bar kan överskrida ett tak som kontrollerats tidigare i koden.