MINORDER
MINORDER är en DEFPARAM-inställning i ProBacktest och ProOrder som anger den minsta orderstorlek som utförs. Order under tröskelvärdet ignoreras helt.
Syntax
DEFPARAM MINORDER = valueParametrar
| Namn | Typ | Standard | Beskrivning |
|---|---|---|---|
value | numerisk | ingen | Minsta antal enheter, kontrakt eller lotter som kan utföras i en enskild order. |
Så fungerar det
DEFPARAM satserna konfigurerar exekveringsmiljön och måste stå högst upp i strategin, före någon exekverbar instruktion. MINORDER sätter ett golv för orderstorleken: varje order vars kvantitet faller under det konfigurerade värdet förkastas istället för att exekveras.
Inställningen finns för realismens skull. Många instrument har en minsta handelsbar storlek, en lot på ett forexkonto, ett kontrakt på en future, en minsta insats på en CFD. En storleksformel som dividerar kapital med pris kan ge bråkdelar eller mycket små kvantiteter som ingen mäklare skulle acceptera. MINORDER filtrerar bort de orderna så att simuleringen bara innehåller affärer som skulle kunna existera i praktiken.
Till skillnad från MAXORDER, som kapar för stora ordrar ner till maxgränsen, MINORDER avrundar inte en för liten order uppåt. Ordern skickas helt enkelt inte. En strategi vars beräknade storlek stannar under tröskeln går därför aldrig in i marknaden, vilket i sig är en användbar diagnos: det visar att kapitalet eller storleksformeln är otillräcklig för instrumentet.
Exempel
Exempel 1, Framtvinga ett minimum på en enhet (ProBacktest)
// orders below 1 unit are not executed
DEFPARAM MINORDER = 1
IF NOT OnMarket AND close crosses over Average[50](close) THEN
BUY 1 CONTRACT AT MARKET
ENDIFGrundkonfigurationen från referensen. Varje order på minst ett kontrakt går igenom, allt mindre skulle förkastas.
Exempel 2, Kontantbaserad storlekssättning som kan hamna under golvet (ProBacktest)
DEFPARAM MINORDER = 1
// invest a fixed cash slice per trade
capitalPerTrade = 5000
positionsize = FLOOR(capitalPerTrade / close)
IF NOT OnMarket AND RSI[14](close) < 30 THEN
BUY positionsize SHARES AT MARKET
ENDIFNär aktiekursen stiger över 5000, positionsize beräknas till 0 och ordern hamnar under MINORDER tröskeln, så ingen affär sker. Filtret hindrar order med nollkvantitet från att nå motorn.
Exempel 3, Minsta lotstorlek i en Forex-strategi (ProOrder)
DEFPARAM MINORDER = 1
long = ExponentialAverage[20](close) crosses over ExponentialAverage[50](close)
IF NOT OnMarket AND long THEN
BUY 1 LOT AT MARKET
SET STOP PLOSS 40
ENDIF
IF LongOnMarket AND close < ExponentialAverage[50](close) THEN
SELL AT MARKET
ENDIFGolvet för minsta order speglar kontots minsta handelsbara lot, så backtesten kan inte simulera positioner som mäklaren skulle neka.
Vanliga fel och fallgropar
- Underdimensionerade order försvinner tyst. Ordrar under tröskeln hoppas över utan fel eller loggpost. En strategi som aldrig handlar i ett backtest kan helt enkelt generera kvantiteter under
MINORDER, inte att entryvillkoren inte uppfylls. - Ingen upprundning.
MINORDERfiltrerar, den lyfter inte små ordrar till minimum. Kod som förlitar sig på att motorn ska höja en order på 0.4 lot till 1 lot beter sig annorlunda än förväntat, ordern förkastas. DEFPARAMplacering. AllaDEFPARAMsatser måste föregå den första körbara raden. EnDEFPARAM MINORDERlängre ner i koden går inte att kompilera.- Exits är också order. En delexit vars kvantitet faller under tröskelvärdet hoppas också över, vilket kan lämna en position öppen längre än avsett när man skalar ut med beräknade kvantiteter.
Relaterade instruktioner
MAXORDER, den största storlek som tillåts för en enskild order.DEFPARAM, deklarerar exekveringsparametrar på strateginivå.CASH, position size baserad på ett kontantbelopp.BUY, öppnar eller utökar en long-position.SELL, stänger hela eller delar av en long-position.LOT, orderkvantitet uttryckt i lots.CONTRACT, orderkvantitet uttryckt i kontrakt.SHARES, orderkvantitet uttryckt i aktier.