ONMARKET
ONMARKET in ProBacktest en ProOrder geeft true zolang er een positie open is, long of short. Wordt gebruikt om dubbele instappen te voorkomen en positiebeheer te beschermen.
Syntaxis
ONMARKETHoe het werkt
ONMARKET neemt geen argumenten en geeft true wanneer de strategie ten minste één open positie heeft, long of short, en false wanneer hij flat is. Het is de richtingsonafhankelijke tegenhanger van LONGONMARKET en SHORTONMARKET, die elk één kant testen.
De waarde weerspiegelt alleen uitgevoerde orders. Een openstaande limit- of stoporder die niet is uitgevoerd laat ONMARKET false, en de vlag klapt terug naar false op de bar nadat de positie volledig is gesloten. Met CumulateOrders ingeschakeld, leest een stapel instappen nog steeds als één enkele true-waarde; COUNTOFPOSITION geeft de werkelijke grootte.
Typisch gebruik valt in twee groepen. Instapcode wordt verpakt in IF NOT OnMarket THEN ... ENDIF zodat een nieuwe trade alleen vanuit flat start. Beheercode, zoals trailinglogica of statusresets, wordt verpakt in IF OnMarket THEN ... ENDIF, of de inverse ervan wordt gebruikt om variabelen tussen trades opnieuw te initialiseren.
Voorbeelden
Voorbeeld 1, Instapbewaking vanuit flat (ProBacktest)
// Open a position only when nothing is currently held
IF NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIFDe strategie koopt één contract alleen wanneer hij flat is, zodat posities zich nooit opbouwen. Dit is het voorbeeld uit de officiële referentie.
Voorbeeld 2, Symmetrische long- en short-instappen (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
ENDIFEén ONMARKET-bewaking dekt beide richtingen, wat eenvoudiger is dan rond elke instap aparte LONGONMARKET- en SHORTONMARKET-controles te combineren.
Voorbeeld 3, Variabelen met tradestatus resetten tussen posities (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 is de natuurlijke resettrigger voor status per trade. De vlag wordt gewist zolang je flat bent, dus elke nieuwe positie begint met een schone lei.
Veelvoorkomende fouten en valkuilen
- Richtingsblind van opzet. ONMARKET kan long niet van short onderscheiden. Uitstap- of stopcode die alleen aan één kant zinvol is, moet LONGONMARKET of SHORTONMARKET gebruiken, anders kan een short-positie het beheer van de long-kant activeren.
- Pending orders tellen niet mee. Tussen het plaatsen van een limit- of stop-instap en de fill blijft ONMARKET false, dus een onbeschermd blok kan meerdere orders in de wachtrij zetten die later allemaal worden gevuld. Annuleer of tel openstaande orders in de instaplogica.
- Geen informatie over de grootte. Met
CumulateOrdersingeschakeld blijft ONMARKET true, of de positie één contract of twintig houdt. Begrens pyramiding met COUNTOFPOSITION in plaats van met de boolean. - Verkeerd bereik. ONMARKET binnen een ProBuilder-indicator of ProScreener compileert niet. Positiestatus bestaat alleen in ProBacktest- en ProOrder-code.
Gerelateerde instructies
LONGONMARKET, waar zolang er een long positie open is.SHORTONMARKET, waar zolang er een short positie open is.MARKET, voert orders uit tegen de huidige marktprijs.BUY, opent een long positie.SELLSHORT, opent een short positie.COUNTOFPOSITION, de grootte van de open positie.POSITIONPERF, de performance van de open positie.TRADEPRICE, de uitvoeringsprijs van een eerdere trade.