MAXORDER
MAXORDER er en DEFPARAM-innstilling i ProBacktest og ProOrder som setter et tak på størrelsen til enhver enkeltordre. Ordrer over grensen kuttes ned til maksimumsstørrelsen.
Syntaks
DEFPARAM MAXORDER = valueParametere
| Navn | Type | Standard | Beskrivelse |
|---|---|---|---|
value | numerisk | ingen | Maksimalt antall enheter, kontrakter eller lots tillatt i en enkeltordre. |
Slik fungerer det
DEFPARAM setningene konfigurerer kjøremiljøet til en strategi og må stå øverst i koden, før enhver kjørbar instruksjon. MAXORDER er en av disse innstillingene: den definerer en øvre grense for antallet i en enkelt ordre.
Grensen gjelder på ordrenivå, ikke posisjonsnivå. Når en ordresetning gir et antall over den konfigurerte verdien, utfører motoren den største tillatte størrelsen i stedet for å avvise ordren. En dynamisk dimensjonert ordre på 25 kontrakter under DEFPARAM MAXORDER = 10 fylles som 10 kontrakter.
Hovedbruksområdet er realisme. Formeldrevet position sizing, for eksempel å dele tilgjengelig kapital på pris, kan gi ordrestørrelser som ingen megler eller marked ville absorbert til én pris. Å sette tak på størrelsen til enkeltordren holder en backtest nærmere utførbare forhold og beskytter et live-system mot en løpsk størrelsesformel.
Fordi grensen gjelder per ordre, vil en strategi som akkumulerer posisjoner med DEFPARAM CumulateOrders = true kan likevel bygge en total posisjon større enn MAXORDER på tvers av flere ordre.
Eksempler
Eksempel 1, Begrense ordrestørrelsen til ti 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
ENDIFStrategien ber om 20 kontrakter, men MAXORDER innstillingen begrenser ordren til 10. Backtesten simulerer derfor den begrensede størrelsen, ikke den forespurte.
Eksempel 2, Sikre en kapitalbasert størrelsesformel (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
ENDIFStørrelsesformelen skalerer med akkumulert gevinst. MAXORDER fungerer som et absolutt tak, så en stor equity-verdi kan ikke presse en enkelt ordre forbi 5 kontrakter.
Eksempel 3, Ordretak med posisjonsakkumulering (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
ENDIFHver enkelt påbyggingsordre respekterer taket på 2 kontrakter, mens den akkumulerte posisjonen kan nå 6 kontrakter over tre ordrer. Taket begrenser ordrer, ikke den totale posisjonen.
Vanlige feil og fallgruver
- Avkuttingen er stille. Ordrer over taket reduseres, de avvises ikke, og det gis ingen advarsel. En backtest kan stille og rolig trade mindre størrelser enn størrelsesformelen tilsier, noe som forvrenger gevinstforventningene hvis avkuttingen går ubemerket hen.
- Per ordre, ikke per posisjon. Med
CumulateOrdersaktivert, kan flere begrensede ordrer stables til en posisjon langt større ennMAXORDER. Å begrense total eksponering krever en eksplisitt sjekk påCountOfPositioneller tilsvarende. DEFPARAMplassering. AlleDEFPARAMsetninger må komme før den første kjørbare linjen i strategien. EnDEFPARAM MAXORDERplassert etter annen kode kompilerer ikke.- Ikke en meglergrense. Innstillingen begrenser hva strategien sender, den modellerer ikke maksgrenser hos børs eller megler. Live ordrer innenfor
MAXORDERkan likevel overstige meglerens egne størrelsesgrenser.
Relaterte instruksjoner
MINORDER, minste ordrestørrelse som utføres under en backtest.DEFPARAM, deklarerer utførelsesparametere på strateginivå.CumulateOrders, tillater at flere ordrer akkumuleres til én posisjon.BUY, åpner eller øker en long-posisjon.SELLSHORT, åpner eller øker en short-posisjon.LOT, ordrekvantum uttrykt i lots.CONTRACT, ordrekvantum uttrykt i kontrakter.SHARES, ordrekvantum uttrykt i aksjer.