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
DEFPARAM MAXORDER = valueParametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
value | numerisk | ingen | Stö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)
// 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
ENDIFStrategin 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)
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
ENDIFStorleksformeln 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)
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
ENDIFVarje 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
CumulateOrdersaktiverat kan flera begränsade ordrar staplas till en position som är mycket större änMAXORDER. Att begränsa den totala exponeringen kräver en explicit kontroll avCountOfPositioneller motsvarande. DEFPARAMplacering. AllaDEFPARAMsatserna måste komma före strategins första körbara rad. EttDEFPARAM MAXORDERplacerad 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
MAXORDERkan ändå överstiga mäklarens egna storleksgränser.
Relaterade instruktioner
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.