Jetzt beitreten
ProBacktest/probacktest · proorder

MINORDER

MINORDER ist eine DEFPARAM-Einstellung in ProBacktest und ProOrder, die die kleinste ausgeführte Ordergröße festlegt. Orders unterhalb der Schwelle werden vollständig ignoriert.

Syntax

probuilder
DEFPARAM MINORDER = value

Parameter

NameTypStandardBeschreibung
valuenumerischkeineKleinste Anzahl an Einheiten, Kontrakten oder Lots, die in einer einzelnen Order ausgeführt werden kann.

So funktioniert es

DEFPARAM Anweisungen konfigurieren die Ausführungsumgebung und müssen am Anfang der Strategie stehen, vor jeder ausführbaren Instruktion. MINORDER setzt eine Untergrenze für die Ordergröße: jede Order, deren Menge unter den konfigurierten Wert fällt, wird verworfen statt ausgeführt.

Die Einstellung existiert aus Realismusgründen. Viele Instrumente haben eine Mindesthandelsgröße, ein Lot auf einem Forex-Konto, ein Kontrakt bei einem Future, ein Mindesteinsatz bei einem CFD. Eine Größenformel, die Kapital durch Kurs teilt, kann Bruchteile oder sehr kleine Stückzahlen erzeugen, die kein Broker akzeptieren würde. MINORDER filtert diese Orders heraus, sodass die Simulation nur Trades enthält, die in der Praxis möglich wären.

Anders als MAXORDER, das übergroße Orders auf die Obergrenze begrenzt, MINORDER rundet eine zu kleine Order nicht auf. Die Order wird einfach nicht gesendet. Eine Strategie, deren berechnete Größe unter der Schwelle bleibt, tritt daher nie in den Markt ein, was selbst eine nützliche Diagnose ist: Es zeigt, dass das Kapital oder die Größenformel für das Instrument nicht ausreicht.

Beispiele

Beispiel 1, Ein Minimum von einer Einheit erzwingen (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

Die Basiskonfiguration aus der Referenz. Jede Order von mindestens einem Kontrakt wird durchgelassen, alles Kleinere würde verworfen.

Beispiel 2, Cash-basierte Größenbestimmung, die unter die Untergrenze fallen kann (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

Wenn der Aktienkurs über 5000 steigt, positionsize ergibt 0 und die Order fällt unter MINORDER Schwelle, daher kommt kein Trade zustande. Der Filter verhindert, dass Orders mit Menge null die Engine erreichen.

Beispiel 3, Mindest-Lotgröße bei einer 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

Die Mindestorder-Untergrenze spiegelt das kleinste handelbare Lot des Kontos wider, sodass der Backtest keine Positionen simulieren kann, die der Broker ablehnen würde.

Häufige Fehler und Stolperfallen

  • Zu kleine Orders verschwinden stillschweigend. Orders unterhalb der Schwelle werden ohne Fehler oder Logeintrag übersprungen. Eine Strategie, die im Backtest nie handelt, erzeugt möglicherweise einfach Stückzahlen unter MINORDER, nicht am Scheitern ihrer Einstiegsbedingungen.
  • Kein Aufrunden. MINORDER filtert, es hebt kleine Orders nicht auf das Minimum an. Code, der darauf setzt, dass die Engine eine 0.4-Lot-Order auf 1 Lot anhebt, verhält sich anders als erwartet, die Order wird verworfen.
  • DEFPARAM Platzierung. Alle DEFPARAM Anweisungen müssen vor der ersten ausführbaren Zeile stehen. Eine DEFPARAM MINORDER weiter unten im Code lässt sich nicht kompilieren.
  • Ausstiege sind auch Orders. Ein Teilausstieg, dessen Menge unter der Schwelle liegt, wird ebenfalls übersprungen, was eine Position länger offen lassen kann als beabsichtigt, wenn mit berechneten Mengen stufenweise ausgestiegen wird.
  • MAXORDER, maximal zulässige Größe für eine einzelne Order.
  • DEFPARAM, deklariert Ausführungsparameter auf Strategieebene.
  • CASH, Positionsgröße auf Basis eines Geldbetrags.
  • BUY, eröffnet eine Long-Position oder baut sie aus.
  • SELL, schließt eine Long-Position ganz oder teilweise.
  • LOT, Ordermenge in Lots ausgedrückt.
  • CONTRACT, Ordermenge in Kontrakten ausgedrückt.
  • SHARES, Ordermenge in Aktien ausgedrückt.