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
ONMARKETSo 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)
// Open a position only when nothing is currently held
IF NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIFDie 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)
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
ENDIFEin 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)
// 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
ENDIFONMARKET 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
CumulateOrdersaktiviert, 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.
Verwandte Befehle
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.