LONGONMARKET
LONGONMARKET in ProBacktest und ProOrder gibt wahr zurück, solange eine Long-Position offen ist. Wird verwendet, um Einstiege, Ausstiege und Stop-Verwaltung im Strategiecode abzusichern.
Syntax
LongOnMarketSo funktioniert es
LONGONMARKET nimmt keine Argumente und gibt wahr zurück, wenn die Strategie aktuell eine Long-Position hält, unabhängig von ihrer Größe. Es gibt falsch zurück, wenn die Strategie keine Position hat und ebenso, wenn sie short ist; das Gegenstück auf der Short-Seite ist SHORTONMARKET, und ONMARKET deckt beide Richtungen gleichzeitig ab.
Der Wert spiegelt nur ausgeführte Orders wider. Ein schwebender Limit- oder Stop-Einstieg, der nicht ausgeführt wurde, lässt LONGONMARKET false, bis die Ausführung erfolgt. Mit CumulateOrders aktiviert, mehrere gestapelte Long-Einstiege werden dennoch als ein einzelner true-Wert gelesen; verwenden Sie COUNTOFPOSITION, um die Position Size zu prüfen.
Die zwei Standardmuster sind IF NOT LongOnMarket THEN ... ENDIF um doppelte long Einstiege zu verhindern, und IF LongOnMarket THEN ... ENDIF damit Code für Ausstiege oder Stop-Verwaltung nur läuft, während ein Long-Trade aktiv ist.
Beispiele
Beispiel 1, Einstiegsschutz gegen doppelte Longs (ProBacktest)
// Open a long only when no long position is already held
IF NOT LongOnMarket THEN
BUY 1 LOT AT MARKET TomorrowOpen
ENDIFOhne den Schutz würde die Strategie auf jedem Bar eine neue Kauforder aufgeben. Dies ist das Beispiel aus der offiziellen Referenz.
Beispiel 2, System mit gleitendem Durchschnitt samt Einstiegs- und Ausstiegsschutz (ProOrder)
DEFPARAM CumulateOrders = false
fastMA = Average[20](close)
slowMA = Average[50](close)
// Enter long on a bullish cross, only when flat
IF NOT LongOnMarket AND fastMA CROSSES OVER slowMA THEN
BUY 1 CONTRACT AT MARKET
ENDIF
// Exit the long on a bearish cross
IF LongOnMarket AND fastMA CROSSES UNDER slowMA THEN
SELL AT MARKET
ENDIFJeder Block ist durch den Positionsstatus abgesichert, sodass Einstiege nur ohne offene Position auslösen und Ausstiege nur, solange eine Long-Position besteht.
Beispiel 3, Stop-Verwaltung begrenzt auf offene Longs (ProOrder)
// Promote the stop to breakeven after 15 points of open profit
IF LongOnMarket THEN
IF close - tradeprice >= 15 * pointsize THEN
SET STOP BREAKEVEN
ENDIF
ENDIFBefehle zur Positionsverwaltung wie SET STOP BREAKEVEN erfordern eine offene Position, daher verhindert die LONGONMARKET-Absicherung Laufzeitfehler, solange keine Position offen ist.
Häufige Fehler und Stolperfallen
- Die Annahme, dass falsch keine Position bedeutet. LONGONMARKET ist sowohl false, wenn die Strategie flat ist, als auch wenn sie short ist. Code, der nur laufen soll, wenn keine Position irgendeiner Art offen ist, muss prüfen
NOT OnMarketstattdessen. - Ausstehende Orders zählen nicht. Zwischen der Platzierung eines Limit- oder Stop-Einstiegs und seiner Ausführung bleibt LONGONMARKET falsch, sodass ein ungeschützter Einstiegsblock weitere Orders einreihen kann. LongTriggered hilft, den Bar zu erkennen, auf dem ein Long-Einstieg ausgeführt wurde.
- Keine Größenangabe. Das Flag sagt nichts darüber, wie viele Kontrakte gehalten werden. Pyramiding-Logik, die Einstiege stapelt unter
CumulateOrdersbenötigt COUNTOFPOSITION, um das Exposure zu begrenzen. - Falscher Gültigkeitsbereich. Das Einfügen von Strategie-Codeschnipseln in einen Indikator bringt LONGONMARKET mit, und der Indikator lässt sich dann nicht kompilieren. Der Positionsstatus existiert nur in ProBacktest und ProOrder.
Verwandte Befehle
ONMARKET, wahr, solange eine Position offen ist, long oder short.SHORTONMARKET, wahr, solange eine Short-Position offen ist.MARKET, führt Orders zum aktuellen Marktkurs aus.BUY, eröffnet eine Long-Position.SELL, schließt eine Long-Position.LongTriggered, signalisiert, dass eine Long-Einstiegsorder ausgeführt wurde.COUNTOFPOSITION, die Größe der offenen Position.TRADEPRICE, der Ausführungskurs eines vergangenen Trades.