Bli medlem idag
ProBacktest/probacktest · proorder

COUNTOFPOSITION

COUNTOFPOSITION returnerar den öppna positionens storlek med tecken i ProBacktest och ProOrder, positiv för long och negativ för short. Syntax och exempel.

Syntax

probuilder
COUNTOFPOSITION

Nyckelordet tar inga parametrar och används som en skrivskyddad variabel inuti uttryck.

Så fungerar det

På varje bar, COUNTOFPOSITION speglar den kvantitet som strategin håller just nu. Tecknet anger riktning: en strategi som är long 3 kontrakt visar 3, en strategi som är short 3 kontrakt läser -3, och en flat strategi läser 0. Värdet uppdateras när order fylls, så efter en delvis exit visar det den återstående kvantiteten, inte den ursprungliga entrystorleken.

Teckenkonventionen gör nyckelordet användbart i två situationer. Först, riktningskontroller: COUNTOFPOSITION > 0 motsvarar LONGONMARKET, och COUNTOFPOSITION < 0 till SHORTONMARKET. För det andra, exponeringstak: ABS(COUNTOFPOSITION) ger total storlek oberoende av riktning, vilket är det vanliga sättet att begränsa pyramidering när DEFPARAM CumulateOrders = true tillåter upprepade entries i samma riktning.

Endast fylld kvantitet räknas. Väntande limit- eller stoppordrar som inte har utförts ändrar inte värdet. För teckenlösa antal per riktning, COUNTOFLONGSHARES och COUNTOFSHORTSHARES rapporterar long- och short-kvantiteterna separat.

Exempel

Exempel 1, Begränsa en pyramiderad 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

Strategin skalar in i en short när priset faller. Eftersom COUNTOFPOSITION är negativt när positionen är short, ABS() omvandlar det till en total storlek innan den jämförs med taket på 10.

Exempel 2, Riktningskontroll utan ONMARKET-nyckelord (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 upptäcker en flat strategi och COUNTOFPOSITION > 0 upptäcker en öppen long, som speglar ONMARKET och LONGONMARKET med ett enda nyckelord.

Exempel 3, Dimensionera en delvis exit från den aktiva positionen (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

Att läsa den aktuella storleken låter exiten anpassa sig till hur många entries som faktiskt fylldes, i stället för att hårdkoda en volym.

Vanliga fel och fallgropar

  • Att glömma tecknet på shorts. Medan short, COUNTOFPOSITION är negativ, så ett skydd som COUNTOFPOSITION <= 10 är alltid sant och begränsar aldrig något. Jämför ABS(COUNTOFPOSITION) när avsikten är total storlek.
  • Att förvänta sig att väntande ordrar räknas med. Värdet speglar endast exekverad kvantitet. En liggande limitorder som inte har exekverats lämnar COUNTOFPOSITION oförändrad, så exponeringstak som bygger på den tar inte hänsyn till order som ligger hos mäklaren.
  • Ingen ackumulering utan CumulateOrders. Med standardvärdet DEFPARAM CumulateOrders = false, staplas inte ytterligare ordrar i samma riktning, så COUNTOFPOSITION växer aldrig utöver det första entryt och pyramidlogiken gör i tysthet ingenting.
  • Att använda det utanför strategier. Nyckelordet finns inte i ProBuilder-indikatorer eller ProScreener. Positionsmedveten logik måste ligga i själva ProBacktest- eller ProOrder-koden.
  • COUNTOFLONGSHARES, antal aktier som innehas long, utan tecken.
  • COUNTOFSHORTSHARES, antal aktier som innehas short, utan tecken.
  • CumulateOrders, DEFPARAM-parameter som gör det möjligt att stapla entries i samma riktning.
  • ONMARKET, sant så länge någon position är öppen.
  • LONGONMARKET, sant så länge en long-position är öppen.
  • SHORTONMARKET, sant så länge en short-position är öppen.
  • TRADEINDEX, barindex för exekveringen av en tidigare affär.
  • TRADEPRICE, entrypriset för den aktuella eller en tidigare affären.