Jetzt beitreten
ProBacktest/probacktest · proorder

ONMARKET

ONMARKET in ProBacktest und ProOrder gibt wahr zurück, solange eine Position offen ist, long oder short. Wird verwendet, um doppelte Einstiege zu verhindern und das Positionsmanagement abzusichern.

Syntax

probuilder
ONMARKET

So funktioniert es

ONMARKET nimmt keine Argumente und gibt wahr zurück, wenn die Strategie mindestens eine offene Position hält, long oder short, und falsch, wenn sie positionslos ist. Es ist das richtungsunabhängige Gegenstück zu LONGONMARKET und SHORTONMARKET, die jeweils eine Seite prüfen.

Der Wert spiegelt nur ausgeführte Orders wider. Eine schwebende Limit- oder Stop-Order, die nicht ausgeführt wurde, lässt ONMARKET false, und das Flag kippt auf dem Bar nach der vollständigen Schließung der Position zurück auf false. Mit CumulateOrders aktiviert, wird ein Stapel von Einstiegen weiterhin als einzelner wahrer Wert gelesen; COUNTOFPOSITION meldet die tatsächliche Größe.

Typische Anwendungen fallen in zwei Gruppen. Einstiegscode wird eingeschlossen in IF NOT OnMarket THEN ... ENDIF sodass ein neuer Trade nur ohne offene Position startet. Management-Code wie Trailing-Logik oder Status-Resets wird eingebettet in IF OnMarket THEN ... ENDIF, oder deren Umkehrung wird genutzt, um Variablen zwischen Trades neu zu initialisieren.

Beispiele

Beispiel 1, Einstiegsschutz aus der positionslosen Lage (ProBacktest)

probuilder
// Open a position only when nothing is currently held
IF NOT ONMARKET THEN
    BUY 1 CONTRACT AT MARKET
ENDIF

Die Strategie kauft nur dann einen Kontrakt, wenn keine Position offen ist, sodass sich Positionen nie aufsummieren. Dies ist das Beispiel aus der offiziellen Referenz.

Beispiel 2, Symmetrische long- und short-Einstiege (ProOrder)

probuilder
DEFPARAM CumulateOrders = false

fastMA = Average[20](close)
slowMA = Average[50](close)

// Take either direction, but only from flat
IF NOT onmarket THEN
  IF fastMA CROSSES OVER slowMA THEN
    BUY 1 CONTRACT AT MARKET
  ELSIF fastMA CROSSES UNDER slowMA THEN
    SELLSHORT 1 CONTRACT AT MARKET
  ENDIF
ENDIF

Ein einziger ONMARKET-Schutz deckt beide Richtungen ab, was einfacher ist, als getrennte LONGONMARKET- und SHORTONMARKET-Prüfungen um jeden Einstieg zu paaren.

Beispiel 3, Trade-Zustandsvariablen zwischen Positionen zurücksetzen (ProOrder)

probuilder
// Clear the breakeven flag whenever the strategy is flat
IF NOT onmarket THEN
  beArmed = 0
ENDIF

// Arm breakeven once the long shows 10 points of profit
IF longonmarket AND close - tradeprice >= 10 * pointsize THEN
  beArmed = 1
ENDIF

IF beArmed = 1 THEN
  SET STOP BREAKEVEN
ENDIF

ONMARKET ist der natürliche Auslöser zum Zurücksetzen des Zustands pro Trade. Das Flag wird gelöscht, solange keine Position offen ist, sodass jede neue Position mit einem leeren Blatt beginnt.

Häufige Fehler und Stolperfallen

  • Bewusst richtungsblind. ONMARKET kann long nicht von short unterscheiden. Ausstiegs- oder Stop-Code, der nur auf einer Seite sinnvoll ist, muss LONGONMARKET oder SHORTONMARKET verwenden, sonst kann eine short-Position ein Management der long-Seite auslösen.
  • Ausstehende Orders zählen nicht. Zwischen der Platzierung eines Limit- oder Stop-Einstiegs und seiner Ausführung bleibt ONMARKET falsch, daher kann ein ungeschützter Block mehrere Orders einreihen, die alle später ausgeführt werden. Stornieren oder zählen Sie offene Orders in der Einstiegslogik.
  • Keine Größenangabe. Mit CumulateOrders aktiviert, bleibt ONMARKET wahr, ob die Position einen Kontrakt oder zwanzig hält. Begrenzen Sie Pyramiding mit COUNTOFPOSITION statt mit dem Boolean.
  • Falscher Gültigkeitsbereich. ONMARKET innerhalb eines ProBuilder-Indikators oder ProScreeners kompiliert nicht. Der Positionszustand existiert nur in ProBacktest- und ProOrder-Code.
  • LONGONMARKET, wahr, solange eine Long-Position offen ist.
  • SHORTONMARKET, wahr, solange eine Short-Position offen ist.
  • MARKET, führt Orders zum aktuellen Marktkurs aus.
  • BUY, eröffnet eine Long-Position.
  • SELLSHORT, eröffnet eine Short-Position.
  • COUNTOFPOSITION, die Größe der offenen Position.
  • POSITIONPERF, die Performance der offenen Position.
  • TRADEPRICE, der Ausführungskurs eines vergangenen Trades.