Bli medlem i dag
ProBacktest/probacktest · proorder

COUNTOFPOSITION

COUNTOFPOSITION returnerer den fortegnede størrelsen på den åpne posisjonen i ProBacktest og ProOrder, positiv for long og negativ for short. Syntaks og eksempler.

Syntaks

probuilder
COUNTOFPOSITION

Nøkkelordet tar ingen parametere og brukes som en skrivebeskyttet variabel inne i uttrykk.

Slik fungerer det

På hver bar, COUNTOFPOSITION gjenspeiler antallet strategien holder akkurat nå. Fortegnet angir retning: en strategi som er long 3 kontrakter viser 3, en strategi som er short 3 kontrakter leser -3, og en flat strategi leser 0. Verdien oppdateres etter hvert som ordrer fylles, så etter en delvis utgang viser den gjenstående kvantitet, ikke den opprinnelige inngangsstørrelsen.

Fortegnskonvensjonen gjør nøkkelordet nyttig i to situasjoner. Først retningssjekker: COUNTOFPOSITION > 0 er ekvivalent med LONGONMARKET, og COUNTOFPOSITION < 0 til SHORTONMARKET. For det andre, eksponeringsgrenser: ABS(COUNTOFPOSITION) gir total størrelse uavhengig av retning, som er den vanlige måten å begrense pyramidering når DEFPARAM CumulateOrders = true tillater gjentatte innganger i samme retning.

Bare utført kvantum telles. Ventende limit- eller stoppordrer som ikke er utført, endrer ikke verdien. For fortegnsløse opptellinger per retning, COUNTOFLONGSHARES og COUNTOFSHORTSHARES rapporterer long- og short-antallet separat.

Eksempler

Eksempel 1, Sette tak på en pyramidert short-posisjon (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

Strategien skalerer inn i en short mens prisen faller. Fordi COUNTOFPOSITION er negativ når man er short, ABS() konverterer den til en total størrelse før den sammenlignes mot taket på 10.

Eksempel 2, Retningssjekk uten ONMARKET-nøkkelord (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 oppdager en flat strategi og COUNTOFPOSITION > 0 oppdager en åpen long, og speiler ONMARKET og LONGONMARKET med ett enkelt nøkkelord.

Eksempel 3, Dimensjonere en delvis utgang ut fra den løpende posisjonen (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

Å lese den løpende størrelsen lar utgangen tilpasse seg hvor mange innganger som faktisk ble utført, i stedet for å hardkode en mengde.

Vanlige feil og fallgruver

  • Å glemme fortegnet på shorts. Mens short, COUNTOFPOSITION er negativ, så en sikring som COUNTOFPOSITION <= 10 er alltid sann og begrenser aldri noe. Sammenlign ABS(COUNTOFPOSITION) når hensikten er total størrelse.
  • Å forvente at ventende ordrer teller med. Verdien gjenspeiler bare utført kvantum. En liggende limitordre som ikke er utført, lar COUNTOFPOSITION uendret, så eksponeringsgrenser basert på den tar ikke hensyn til ordrer som venter hos megleren.
  • Ingen akkumulering uten CumulateOrders. Med standard DEFPARAM CumulateOrders = false, stables ikke flere ordrer i samme retning, så COUNTOFPOSITION vokser aldri forbi den første inngangen, og pyramideringslogikk gjør stille ingenting.
  • Å bruke det utenfor strategier. Nøkkelordet finnes ikke i ProBuilder-indikatorer eller ProScreener. Posisjonsbevisst logikk må ligge i selve ProBacktest- eller ProOrder-koden.