Word nu lid
ProBacktest/probacktest · proorder

COUNTOFPOSITION

COUNTOFPOSITION geeft de grootte van de open positie met teken in ProBacktest en ProOrder, positief voor long en negatief voor short. Syntaxis en voorbeelden.

Syntaxis

probuilder
COUNTOFPOSITION

Het keyword neemt geen parameters en wordt binnen expressies gebruikt als een alleen-lezen variabele.

Hoe het werkt

Op elke bar, COUNTOFPOSITION geeft de hoeveelheid weer die de strategie momenteel aanhoudt. Het teken codeert de richting: een strategie die 3 contracten long is, geeft 3, een strategie die short staat met 3 contracten leest -3, en een strategie zonder positie leest 0. De waarde wordt bijgewerkt terwijl orders worden uitgevoerd, dus na een gedeeltelijke uitstap toont hij de resterende hoeveelheid, niet de oorspronkelijke instapgrootte.

De conventie met teken maakt het keyword nuttig in twee situaties. Ten eerste, richtingscontroles: COUNTOFPOSITION > 0 is gelijk aan LONGONMARKET, en COUNTOFPOSITION < 0 naar SHORTONMARKET. Ten tweede, exposurelimieten: ABS(COUNTOFPOSITION) geeft de totale grootte onafhankelijk van de richting, wat de gebruikelijke manier is om pyramiding te beperken wanneer DEFPARAM CumulateOrders = true staat herhaalde instappen in dezelfde richting toe.

Alleen uitgevoerde kwantiteit wordt geteld. Openstaande limiet- of stoporders die niet zijn uitgevoerd veranderen de waarde niet. Voor tekenloze aantallen per richting, COUNTOFLONGSHARES en COUNTOFSHORTSHARES rapporteren de long- en short-aantallen afzonderlijk.

Voorbeelden

Voorbeeld 1, Een gepyramideerde short positie begrenzen (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

De strategie bouwt een short op terwijl de prijs daalt. Omdat COUNTOFPOSITION is negatief bij short, ABS() zet het om naar een totale grootte voordat het met de limiet van 10 wordt vergeleken.

Voorbeeld 2, Richtingscontrole zonder ONMARKET-keywords (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 detecteert een strategie zonder positie en COUNTOFPOSITION > 0 detecteert een open long, als spiegelbeeld van ONMARKET en LONGONMARKET met één enkel sleutelwoord.

Voorbeeld 3, Een gedeeltelijke uitstap dimensioneren op de lopende positie (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

Door de lopende grootte uit te lezen past de uitstap zich aan aan het aantal instappen dat daadwerkelijk is uitgevoerd, in plaats van een hoeveelheid hard in de code te zetten.

Veelvoorkomende fouten en valkuilen

  • Het teken bij shorts vergeten. Terwijl short, COUNTOFPOSITION is negatief, dus een guard zoals COUNTOFPOSITION <= 10 is altijd waar en beperkt nooit iets. Vergelijk ABS(COUNTOFPOSITION) wanneer de totale omvang bedoeld is.
  • Verwachten dat openstaande orders meetellen. De waarde weerspiegelt alleen de uitgevoerde hoeveelheid. Een openstaande limietorder die niet is uitgevoerd laat COUNTOFPOSITION onveranderd, dus exposurelimieten die erop zijn gebaseerd houden geen rekening met orders die bij de broker wachten.
  • Geen accumulatie zonder CumulateOrders. Met de standaard DEFPARAM CumulateOrders = false, stapelen extra orders in dezelfde richting niet, dus COUNTOFPOSITION komt nooit verder dan de eerste entry en pyramidinglogica doet stilzwijgend niets.
  • Het buiten strategieën gebruiken. Het keyword bestaat niet in ProBuilder-indicatoren of ProScreener. Logica die de positie kent moet in de ProBacktest- of ProOrder-code zelf staan.
  • COUNTOFLONGSHARES, het aantal long aangehouden aandelen zonder teken.
  • COUNTOFSHORTSHARES, het aantal short aangehouden aandelen zonder teken.
  • CumulateOrders, DEFPARAM-parameter die het stapelen van instappen in dezelfde richting mogelijk maakt.
  • ONMARKET, waar zolang er een positie open is.
  • LONGONMARKET, waar zolang er een long positie open is.
  • SHORTONMARKET, waar zolang er een short positie open is.
  • TRADEINDEX, bar-index van de uitvoering van een eerdere trade.
  • TRADEPRICE, instapprijs van de huidige of een eerdere trade.