Word nu lid
ProBacktest/probacktest · proorder

COUNTOFLONGSHARES

COUNTOFLONGSHARES geeft het aantal eenheden dat long wordt aangehouden door een ProBacktest- of ProOrder-strategie, gebruikt om de position size te begrenzen bij het accumuleren van meerdere orders.

Syntaxis

probuilder
COUNTOFLONGSHARES

Hoe het werkt

De functie leest de open positie en geeft een geheel getal terug: de hoeveelheid eenheden die aan de long kant wordt aangehouden op het moment van evaluatie. Het vereist geen parameters en geen haakjes. Wanneer de strategie flat of short is, geeft het 0.

De telling is uitgedrukt in eenheden, niet in trades. Eén enkele order van 3 contracten en drie gecumuleerde orders van 1 contract geven beide 3. Om over afzonderlijke entries te redeneren, combineer je hem met TRADEINDEX en TRADEPRICE, die orders aanspreken via hun index.

De typische context is een strategie met DEFPARAM CumulateOrders = true, waarbij meerdere entry-orders zich kunnen opbouwen tot één positie. Vergelijken COUNTOFLONGSHARES tegen een plafond voor elke extra BUY houdt de totale exposure binnen een geplande limiet. Het equivalent aan de shortzijde is COUNTOFSHORTSHARES, en COUNTOFPOSITION geeft de grootte met teken van de positie die open staat.

Voorbeelden

Voorbeeld 1, Pyramiding begrensd op drie eenheden (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

De strategie opent bij een MACD-kruising en voegt daarna één contract per keer toe zolang het lopende aantal op drie of minder blijft, de laatste instap minstens vijf bars oud is en de prijs 10 punten daarvoorbij is bewogen.

Voorbeeld 2, Hard plafond op de exposure vóór elke toevoeging (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

Elke pullback in een uptrend voegt één eenheid toe, maar de conditie op COUNTOFLONGSHARES garandeert dat de gestapelde positie nooit meer dan vijf eenheden wordt.

Voorbeeld 3, Afbouwen zodra de positie groot is (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

Het aantal stuurt beide richtingen: het laat nieuwe instappen alleen toe onder vier eenheden en activeert een gedeeltelijke uitstap zodra de positie volledig is opgebouwd en het momentum draait.

Veelvoorkomende fouten en valkuilen

  • Eenheden, geen trades. De returnwaarde telt aandelen, contracten of lots, niet het aantal instaporders. Een strategie die 2 contracten per signaal koopt, bereikt een limiet van 6 na drie signalen, niet na zes.
  • Zinloos zonder gecumuleerde orders. Met de standaard CumulateOrders = false, houdt een strategie maximaal één instap tegelijk, dus de functie retourneert altijd alleen de kwantiteit van die ene order of 0. Pyramidinglogica heeft DEFPARAM CumulateOrders = true uit te maken.
  • Nul wanneer short of flat. De functie negeert short exposure volledig en geeft 0 terug. Testen COUNTOFLONGSHARES = 0 betekent niet dat de strategie flat is; combineer met ONMARKET of COUNTOFSHORTSHARES voor het volledige beeld.
  • Geëvalueerd op bartijd. Het aantal weerspiegelt de uitgevoerde orders op de huidige bar. Een order die deze bar is verzonden maar nog niet is uitgevoerd wordt niet meegerekend, dus opeenvolgende toevoegingen in één bar kunnen een eerder in de code gecontroleerde grens overschrijden.