Bli medlem i dag
ProBacktest/probacktest · proorder

MINORDER

MINORDER er en DEFPARAM-innstilling i ProBacktest og ProOrder som angir den minste ordrestørrelsen som utføres. Ordrer under terskelen ignoreres helt.

Syntaks

probuilder
DEFPARAM MINORDER = value

Parametere

NavnTypeStandardBeskrivelse
valuenumeriskingenMinste antall enheter, kontrakter eller lots som kan utføres i en enkeltordre.

Slik fungerer det

DEFPARAM setningene konfigurerer utførelsesmiljøet og må stå øverst i strategien, før enhver kjørbar instruksjon. MINORDER setter et gulv for ordrestørrelsen: enhver ordre med kvantitet under den konfigurerte verdien forkastes i stedet for å bli utført.

Innstillingen finnes av realismehensyn. Mange instrumenter krever en minste handelbar størrelse, én lot på en Forex-konto, én kontrakt på en future, en minsteinnsats på en CFD. En størrelsesformel som deler kapital på pris kan gi brøkdeler eller svært små kvanta som ingen megler ville godtatt. MINORDER filtrerer ut disse ordrene slik at simuleringen bare inneholder handler som kunne eksistert i praksis.

I motsetning til MAXORDER, som kutter for store ordrer ned til grensen, MINORDER runder ikke en for liten ordre opp. Ordren sendes rett og slett ikke. En strategi der den beregnede størrelsen holder seg under terskelen går derfor aldri inn i markedet, og det er i seg selv en nyttig diagnose: det avslører at kapitalen eller størrelsesformelen ikke er tilstrekkelig for instrumentet.

Eksempler

Eksempel 1, Håndheve et minimum på én enhet (ProBacktest)

probuilder
// 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
ENDIF

Standardoppsettet fra referansen. Hver ordre på minst én kontrakt går gjennom, alt mindre vil bli forkastet.

Eksempel 2, Kontantbasert størrelsesberegning som kan falle under gulvet (ProBacktest)

probuilder
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
ENDIF

Når aksjekursen stiger over 5000, positionsize beregnes til 0 og ordren faller under MINORDER -terskelen, så ingen handel skjer. Filteret hindrer at ordrer med null kvantum når motoren.

Eksempel 3, Minste lot-størrelse på en Forex-strategi (ProOrder)

probuilder
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
ENDIF

Gulvet for minste ordre speiler kontoens minste omsettelige lot, så backtesten kan ikke simulere posisjoner megleren ville avvist.

Vanlige feil og fallgruver

  • Underdimensjonerte ordrer forsvinner i stillhet. Ordre under terskelen hoppes over uten feilmelding eller loggføring. En strategi som aldri handler i en backtest kan simpelthen generere kvanta under MINORDER, ikke at inngangsbetingelsene ikke er oppfylt.
  • Ingen avrunding oppover. MINORDER filtrerer, den løfter ikke små ordrer opp til minimumet. Kode som stoler på at motoren hever en ordre på 0.4 lot til 1 lot, oppfører seg annerledes enn forventet, ordren forkastes.
  • DEFPARAM plassering. Alle DEFPARAM setninger må komme før den første kjørbare linjen. En DEFPARAM MINORDER lenger ned i koden lar seg ikke kompilere.
  • Utganger er også ordrer. En delvis utgang hvis mengde faller under terskelen blir også hoppet over, noe som kan la en posisjon stå åpen lenger enn tiltenkt når man skalerer ut med beregnede mengder.
  • MAXORDER, maksimal størrelse tillatt for en enkelt ordre.
  • DEFPARAM, deklarerer utførelsesparametere på strateginivå.
  • CASH, posisjonsstørrelse basert på et kontantbeløp.
  • BUY, åpner eller øker en long-posisjon.
  • SELL, lukker hele eller deler av en long-posisjon.
  • LOT, ordrekvantum uttrykt i lots.
  • CONTRACT, ordrekvantum uttrykt i kontrakter.
  • SHARES, ordrekvantum uttrykt i aksjer.