Bli medlem i dag
ProBacktest/probacktest · proorder

COUNTOFLONGSHARES

COUNTOFLONGSHARES returnerer antall enheter holdt long av en ProBacktest- eller ProOrder-strategi, brukt til å sette et tak på position size når flere ordrer akkumuleres.

Syntaks

probuilder
COUNTOFLONGSHARES

Slik fungerer det

Funksjonen leser den åpne posisjonen og returnerer et heltall: antall enheter holdt på long-siden i evalueringsøyeblikket. Den krever ingen parametere og ingen parenteser. Når strategien er uten posisjon eller short, returnerer den 0.

Tellingen uttrykkes i enheter, ikke i handler. Én enkelt ordre på 3 kontrakter og tre kumulerte ordrer på 1 kontrakt returnerer begge 3. For å resonnere om enkeltinnganger, kombiner den med TRADEINDEX og TRADEPRICE, som adresserer ordrer etter indeksen deres.

Den typiske konteksten er en strategi med DEFPARAM CumulateOrders = true, der flere inngangsordrer kan stables til én posisjon. Å sammenligne COUNTOFLONGSHARES mot et tak før hver ytterligere BUY holder total eksponering innenfor en planlagt grense. Tilsvarende på short-siden er COUNTOFSHORTSHARES, og COUNTOFPOSITION rapporterer den fortegnsatte størrelsen på posisjonen som er åpen.

Eksempler

Eksempel 1, Pyramidering med tak på 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

Strategien åpner på et MACD-kryss, og legger deretter til én kontrakt om gangen så lenge det løpende antallet holder seg på tre eller lavere, den siste inngangen er minst fem barer gammel, og prisen har beveget seg 10 punkter forbi den.

Eksempel 2, Hardt eksponeringstak før hvert påfyll (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

Hver pullback i en opptrend legger til én enhet, men betingelsen på COUNTOFLONGSHARES garanterer at den stablede posisjonen aldri overstiger fem enheter.

Eksempel 3, Nedtrapping når posisjonen er 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

Antallet styrer begge retninger: det slipper bare gjennom nye innganger under fire enheter og utløser en delvis utgang når posisjonen er fullt oppbygd og momentum snur.

Vanlige feil og fallgruver

  • Enheter, ikke handler. Returverdien teller aksjer, kontrakter eller lots, ikke antall inngangsordrer. En strategi som kjøper 2 kontrakter per signal når en grense på 6 etter tre signaler, ikke etter seks.
  • Meningsløst uten kumulerte ordrer. Med standard CumulateOrders = false, holder en strategi maksimalt én inngang om gangen, så funksjonen returnerer aldri annet enn den ene ordrens kvantum eller 0. Pyramideringslogikk krever DEFPARAM CumulateOrders = true å ha betydning.
  • Null når short eller uten posisjon. Funksjonen ignorerer short-eksponering fullstendig og returnerer 0. Å teste COUNTOFLONGSHARES = 0 betyr ikke at strategien er flat; kombiner med ONMARKET eller COUNTOFSHORTSHARES for hele bildet.
  • Evalueres på bartidspunktet. Antallet gjenspeiler utførte ordrer per gjeldende bar. En ordre sendt denne baren, men ennå ikke utført, regnes ikke med, så påfyll rett etter hverandre i samme bar kan overskride et tak som er sjekket tidligere i koden.