Word nu lid
ProBacktest/probacktest · proorder

MINORDER

MINORDER is een DEFPARAM-instelling in ProBacktest en ProOrder die de kleinste uitgevoerde ordergrootte vastlegt. Orders onder de drempel worden volledig genegeerd.

Syntaxis

probuilder
DEFPARAM MINORDER = value

Parameters

NaamTypeStandaardBeschrijving
valuenumeriekgeenKleinste aantal eenheden, contracten of lots dat in één order kan worden uitgevoerd.

Hoe het werkt

DEFPARAM statements configureren de uitvoeringsomgeving en moeten bovenaan de strategie staan, vóór elke uitvoerbare instructie. MINORDER legt een bodem onder de ordergrootte: elke order waarvan de hoeveelheid onder de ingestelde waarde valt, wordt verworpen in plaats van uitgevoerd.

De instelling bestaat voor het realisme. Veel instrumenten leggen een minimale handelbare omvang op, één lot op een forexaccount, één contract op een future, een minimale inleg op een CFD. Een sizingformule die kapitaal door de koers deelt, kan fractionele of heel kleine aantallen opleveren die geen enkele broker zou accepteren. MINORDER filtert die orders eruit zodat de simulatie alleen trades bevat die in de praktijk kunnen bestaan.

In tegenstelling tot MAXORDER, die te grote orders terugbrengt tot het maximum, MINORDER rondt een te klein order niet naar boven af. Het order wordt simpelweg niet verzonden. Een strategie waarvan de berekende omvang onder de drempel blijft, stapt daarom nooit de markt in, en dat is zelf een nuttige diagnose: het laat zien dat het kapitaal of de sizingformule niet toereikend is voor het instrument.

Voorbeelden

Voorbeeld 1, Een minimum van één eenheid afdwingen (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

De basisconfiguratie uit de referentie. Elke order van minimaal één contract komt erdoor, alles wat kleiner is zou worden weggegooid.

Voorbeeld 2, Cashgebaseerde sizing die onder de ondergrens kan vallen (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

Wanneer de aandelenkoers boven 5000 stijgt, positionsize komt uit op 0 en de order valt onder de MINORDER drempel, dus er vindt geen trade plaats. Het filter voorkomt dat orders met hoeveelheid nul de engine bereiken.

Voorbeeld 3, Minimale lotgrootte bij een Forex-strategie (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

De ondergrens voor orders spiegelt het kleinste verhandelbare lot van de account, zodat de backtest geen posities kan simuleren die de broker zou weigeren.

Veelvoorkomende fouten en valkuilen

  • Te kleine orders verdwijnen stil. Orders onder de drempel worden overgeslagen zonder foutmelding of logregel. Een strategie die in een backtest nooit handelt, genereert mogelijk simpelweg hoeveelheden onder MINORDER, niet aan niet-gehaalde instapvoorwaarden.
  • Geen afronding naar boven. MINORDER filtert, het tilt kleine orders niet op naar het minimum. Code die erop vertrouwt dat de engine een order van 0.4 lot optrekt naar 1 lot gedraagt zich anders dan verwacht: de order wordt verworpen.
  • DEFPARAM plaatsing. Alle DEFPARAM statements moeten voor de eerste uitvoerbare regel staan. Een DEFPARAM MINORDER verderop in de code compileert niet.
  • Uitstappen zijn ook orders. Een gedeeltelijke uitstap waarvan het aantal onder de drempel valt, wordt ook overgeslagen, waardoor een positie langer open kan blijven dan bedoeld bij het afbouwen met berekende aantallen.
  • MAXORDER, maximale grootte die voor één order is toegestaan.
  • DEFPARAM, declareert uitvoeringsparameters op strategieniveau.
  • CASH, position sizing op basis van een geldbedrag.
  • BUY, opent een long positie of breidt deze uit.
  • SELL, sluit een deel of de hele long positie.
  • LOT, orderhoeveelheid uitgedrukt in lots.
  • CONTRACT, orderhoeveelheid uitgedrukt in contracten.
  • SHARES, orderhoeveelheid uitgedrukt in aandelen.