Bli medlem idag
ProBacktest/probacktest · proorder

CumulateOrders

CumulateOrders är en DEFPARAM-parameter som styr om en ProOrder-strategi kan lägga flera entries i samma riktning på varandra. Syntax och exempel.

Syntax

probuilder
DEFPARAM CumulateOrders = true
probuilder
DEFPARAM CumulateOrders = false

Parametrar

NamnTypStandardBeskrivning
CumulateOrdersboolesktrueNär true, adderas entryordrar i riktning mot en öppen position till den. När false, ignoreras sådana ordrar till dess att positionen stängts.

Så fungerar det

CumulateOrders är inte en körbar instruktion utan en parameter på strateginivå som deklareras med DEFPARAM. Som alla DEFPARAM raderna måste den stå högst upp i koden, före all tradinglogik, och den utvärderas en gång när strategin startar.

Med CumulateOrders = false, håller strategin som mest en positionsdel per riktning. Om en BUY villkoret löser ut medan en long redan är öppen, förkastas den extra ordern. Det håller position size fast och är det vanliga valet för strategier där varje signal motsvarar en komplett affär.

Med CumulateOrders = true, varje gång ett entryvillkor uppfylls skickas ytterligare en order i samma riktning, så positionen växer. Det möjliggör pyramidering och inköp i flera steg, men det betyder också att ett villkor som förblir sant bar efter bar fortsätter köpa till dess att marginal- eller plattformsgränser går emellan. Kumulativa strategier kombinerar därför nästan alltid parametern med ett storleksvillkor byggt på COUNTOFPOSITION, COUNTOFLONGSHARES eller COUNTOFSHORTSHARES.

Parametern påverkar inte exits. SELL, EXITSHORT och stop- eller målinstruktioner beter sig likadant i båda lägena.

Exempel

Exempel 1, Begränsa strategin till ett entry per riktning (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.

Deklarationen bevarad från den officiella referensen. Placerad i början av programmet hindrar den strategin från att öka en befintlig position.

Exempel 2, Pyramidering med ett uttalat storlekstak (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

Att aktivera CumulateOrders låter varje korsning lägga till ett kontrakt, medan COUNTOFPOSITION skyddet begränsar den totala exponeringen till fyra kontrakt.

Exempel 3, Snitta in i en short vid uppgångar (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

Varje överköpt rörelse lägger till en lot till shorten. Eftersom entryt använder crosses over, utlöses ordern en gång per RSI-utsvängning i stället för på varje bar nivån håller.

Vanliga fel och fallgropar

  • DEFPARAM placed too late. Alla DEFPARAM deklarationer, inklusive CumulateOrders, måste komma före varje annan instruktion. En deklaration efter handelslogiken ger ett kompileringsfel.
  • Tyst misslyckad pyramidering. När påfyllnadsentries aldrig utförs trots att villkoren uppfylls är den vanliga orsaken att parametern lämnats på false eller utelämnad i kod kopierad från en strategi med en enda entry. Orderna förkastas utan någon varning.
  • Skenande ackumulering. Med CumulateOrders = true, ett villkor skrivet som ett tillstånd (rsiVal > 70) i stället för en händelse (rsiVal crosses over 70) skickar en order på varje bar den förblir sann. Kombinera händelsebaserade villkor med en COUNTOFPOSITION gräns.
  • Att förvänta sig att den slår samman motsatta order. Parametern styr bara staplande i samma riktning. En order mot en öppen position minskar eller vänder den fortfarande enligt normal orderhantering, oavsett den här inställningen.
  • DEFPARAM, deklarerar strategiparametrar högst upp i koden.
  • COUNTOFPOSITION, storlek med tecken på den öppna positionen, används för att begränsa pyramidering.
  • COUNTOFLONGSHARES, antal aktier som innehas long, utan tecken.
  • COUNTOFSHORTSHARES, antal aktier som innehas short, utan tecken.
  • BUY, öppnar eller utökar en long-position.
  • SELLSHORT, öppnar eller utökar en short-position.
  • ONMARKET, sant så länge någon position är öppen.
  • FLATAFTER, DEFPARAM-parameter som tvingar strategin att vara flat efter en angiven tidpunkt.
  • FLATBEFORE, DEFPARAM-parameter som håller strategin flat före en angiven tidpunkt.