Word nu lid
ProBacktest/probacktest · proorder

CumulateOrders

CumulateOrders is een DEFPARAM-parameter die bepaalt of een ProOrder-strategie meerdere instappen in dezelfde richting kan stapelen. Syntaxis en voorbeelden.

Syntaxis

probuilder
DEFPARAM CumulateOrders = true
probuilder
DEFPARAM CumulateOrders = false

Parameters

NaamTypeStandaardBeschrijving
CumulateOrdersbooleantrueWanneer true, entry-orders in de richting van een open positie voegen eraan toe. Wanneer false, worden dergelijke orders genegeerd totdat de positie is gesloten.

Hoe het werkt

CumulateOrders is geen uitvoerbare instructie maar een parameter op strategieniveau, gedeclareerd met DEFPARAM. Zoals alle DEFPARAM regels, moet het bovenaan de code staan, vóór alle trading logica, en het wordt eenmalig geëvalueerd wanneer de strategie start.

Met CumulateOrders = false, houdt de strategie maximaal één positiedeel per richting aan. Als een BUY conditie afgaat terwijl er al een long open is, wordt de extra order verworpen. Dit houdt de position size vast en is de gebruikelijke keuze voor strategieën waarin elk signaal één volledige trade vertegenwoordigt.

Met CumulateOrders = true, wordt er elke keer dat aan een instapvoorwaarde is voldaan nog een order in dezelfde richting verzonden, waardoor de positie groeit. Dit maakt pyramiding en averaging-in mogelijk, maar het betekent ook dat een voorwaarde die bar na bar waar blijft, blijft kopen totdat margin- of platformlimieten ingrijpen. Cumulatieve strategieën combineren de parameter daarom bijna altijd met een limiet op de position size gebouwd op COUNTOFPOSITION, COUNTOFLONGSHARES of COUNTOFSHORTSHARES.

De parameter heeft geen invloed op uitstappen. SELL, EXITSHORT en stop- of targetinstructies gedragen zich in beide modi hetzelfde.

Voorbeelden

Voorbeeld 1, De strategie beperken tot één instap per richting (ProOrder)

probuilder
DEFPARAM CumulateOrders = false
// One position slice at a time. While a long is open,
// further BUY orders in the same direction are ignored.

De declaratie zoals bewaard uit de officiële referentie. Bovenaan het programma geplaatst voorkomt die dat de strategie een bestaande positie uitbreidt.

Voorbeeld 2, Pyramiding met een expliciete bovengrens voor de grootte (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true

fastMA = Average[20](close)
slowMA = Average[50](close)

// Add one contract on each new bullish crossover,
// but never hold more than 4 contracts in total
IF fastMA crosses over slowMA AND abs(COUNTOFPOSITION) < 4 THEN
  BUY 1 CONTRACT AT MARKET
ENDIF

// Flatten everything on a bearish crossover
IF LongOnMarket AND fastMA crosses under slowMA THEN
  SELL AT MARKET
ENDIF

Inschakelen CumulateOrders laat elke crossover een contract toevoegen, terwijl de COUNTOFPOSITION guard beperkt de totale exposure tot vier contracten.

Voorbeeld 3, Gefaseerd een short opbouwen bij rally's (ProOrder)

probuilder
DEFPARAM CumulateOrders = true

rsiVal = RSI[14](close)

// Open or add to the short each time RSI pushes above 70,
// capped at three lots
IF rsiVal crosses over 70 AND COUNTOFSHORTSHARES < 3 THEN
  SELLSHORT 1 LOT AT MARKET
ENDIF

SET STOP %TRAILING 1

Elke overbought-push voegt een lot toe aan de short. Omdat de entry gebruikmaakt van crosses over, vuurt de order één keer per RSI-uitslag in plaats van op elke bar dat het niveau aanhoudt.

Veelvoorkomende fouten en valkuilen

  • DEFPARAM placed too late. Alle DEFPARAM declaraties, waaronder CumulateOrders, moet vóór elke andere instructie komen. Een declaratie na de handelslogica veroorzaakt een compileerfout.
  • Stille mislukking van pyramiding. Wanneer bijkoopinstappen nooit worden uitgevoerd terwijl de voorwaarden wel kloppen, is de gebruikelijke oorzaak dat de parameter blijft staan op false of weggelaten in code die is gekopieerd van een strategie met één instap. De orders worden zonder waarschuwing genegeerd.
  • Ongecontroleerde accumulatie. Met CumulateOrders = true, een voorwaarde geschreven als toestand (rsiVal > 70) in plaats van een event (rsiVal crosses over 70) stuurt een order op elke bar dat het waar blijft. Combineer event-achtige condities met een COUNTOFPOSITION limiet.
  • Verwachten dat het tegengestelde orders samenvoegt. De parameter regelt alleen het stapelen in dezelfde richting. Een order tegen een open positie in verkleint of draait die nog steeds om volgens de normale orderverwerking, ongeacht deze instelling.
  • DEFPARAM, declareert strategieparameters aan het begin van de code.
  • COUNTOFPOSITION, grootte met teken van de open positie, gebruikt om pyramiding te begrenzen.
  • COUNTOFLONGSHARES, het aantal long aangehouden aandelen zonder teken.
  • COUNTOFSHORTSHARES, het aantal short aangehouden aandelen zonder teken.
  • BUY, opent een long positie of breidt deze uit.
  • SELLSHORT, opent een short positie of breidt deze uit.
  • ONMARKET, waar zolang er een positie open is.
  • FLATAFTER, DEFPARAM-parameter die de strategie na een vastgesteld tijdstip flat dwingt.
  • FLATBEFORE, DEFPARAM-parameter die de strategie vóór een vastgesteld tijdstip flat houdt.