Bli medlem idag
ProBacktest/probacktest · proorder

MAXORDER

MAXORDER är en DEFPARAM-inställning i ProBacktest och ProOrder som sätter ett tak för storleken på varje enskild order. Order över gränsen kapas till maxstorleken.

Syntax

probuilder
DEFPARAM MAXORDER = value

Parametrar

NamnTypStandardBeskrivning
valuenumeriskingenStörsta antal enheter, kontrakt eller lotter som tillåts i en enskild order.

Så fungerar det

DEFPARAM satser konfigurerar exekveringsmiljön för en strategi och måste stå högst upp i koden, före varje exekverbar instruktion. MAXORDER är en av dessa inställningar: den definierar en övre gräns för kvantiteten i en enskild order.

Taket gäller på ordernivå, inte positionsnivå. När ett orderuttryck ger en kvantitet över det konfigurerade värdet utför motorn den största tillåtna storleken istället för att avvisa ordern. En dynamiskt storleksanpassad order på 25 kontrakt under DEFPARAM MAXORDER = 10 fylls som 10 kontrakt.

Det huvudsakliga användningsfallet är realism. Formeldriven position size, till exempel att dividera tillgängligt kapital med priset, kan ge orderstorlekar som ingen mäklare eller marknad skulle absorbera till ett enda pris. Att sätta tak för storleken på en enskild order håller en backtest närmare exekverbara förhållanden och skyddar ett livesystem mot en skenande storleksformel.

Eftersom gränsen gäller per order är en strategi som ackumulerar positioner med DEFPARAM CumulateOrders = true kan ändå bygga upp en total position större än MAXORDER över flera ordrar.

Exempel

Exempel 1, Tak för orderstorlek vid tio enheter (ProBacktest)

probuilder
// no single order may exceed 10 units
DEFPARAM MAXORDER = 10

IF NOT OnMarket AND close crosses over Average[50](close) THEN
  BUY 20 CONTRACTS AT MARKET
ENDIF

Strategin begär 20 kontrakt, men MAXORDER inställningen kapar ordern till 10. Backtestet simulerar därför den begränsade storleken, inte den begärda.

Exempel 2, Skydd för en kapitalbaserad storleksformel (ProOrder)

probuilder
DEFPARAM MAXORDER = 5

// size grows with capital but can never exceed 5 contracts per order
positionsize = MAX(1, ROUND(strategyprofit / 10000))

IF NOT OnMarket AND RSI[14](close) < 30 THEN
  BUY positionsize CONTRACTS AT MARKET
ENDIF

Storleksformeln skalar med ackumulerad vinst. MAXORDER fungerar som ett hårt tak, så ett stort equity-värde kan inte driva en enskild order över 5 kontrakt.

Exempel 3, Ordertak med positionsackumulering (ProBacktest)

probuilder
DEFPARAM CumulateOrders = true
DEFPARAM MAXORDER = 2

// add on each pullback to the 20-bar average, 2 contracts at most per order
IF close crosses over Average[20](close) AND CountOfPosition < 6 THEN
  BUY 2 CONTRACTS AT MARKET
ENDIF

Varje enskild påfyllningsorder respekterar taket på 2 kontrakt, medan den ackumulerade positionen kan nå 6 kontrakt över tre order. Taket begränsar order, inte den totala positionen.

Vanliga fel och fallgropar

  • Kapningen sker tyst. Order över taket minskas, de avvisas inte, och ingen varning ges. En backtest kan i tysthet handla mindre storlekar än vad storleksformeln anger, vilket förvränger vinstförväntningarna om kapningen går obemärkt förbi.
  • Per order, inte per position. Med CumulateOrders aktiverat kan flera begränsade ordrar staplas till en position som är mycket större än MAXORDER. Att begränsa den totala exponeringen kräver en explicit kontroll av CountOfPosition eller motsvarande.
  • DEFPARAM placering. Alla DEFPARAM satserna måste komma före strategins första körbara rad. Ett DEFPARAM MAXORDER placerad efter annan kod går inte att kompilera.
  • Inte en mäklargräns. Inställningen begränsar vad strategin skickar, den modellerar inte börsens eller mäklarens maxgränser. Liveordrar inom MAXORDER kan ändå överstiga mäklarens egna storleksgränser.
  • MINORDER, minsta orderstorlek som utförs under en backtest.
  • DEFPARAM, deklarerar exekveringsparametrar på strateginivå.
  • CumulateOrders, gör att flera ordrar kan ackumuleras till en position.
  • BUY, öppnar eller utökar en long-position.
  • SELLSHORT, öppnar eller utökar en short-position.
  • LOT, orderkvantitet uttryckt i lots.
  • CONTRACT, orderkvantitet uttryckt i kontrakt.
  • SHARES, orderkvantitet uttryckt i aktier.