Word nu lid
ProBacktest/probacktest · proorder

LONGONMARKET

LONGONMARKET in ProBacktest en ProOrder geeft true zolang er een long positie open is. Wordt gebruikt om instappen, uitstappen en stopbeheer in strategiecode te beveiligen.

Syntaxis

probuilder
LongOnMarket

Hoe het werkt

LONGONMARKET neemt geen argumenten en geeft true wanneer de strategie op dat moment een long positie heeft, ongeacht de grootte. Ze geeft false wanneer de strategie flat is en ook wanneer ze short is; de tegenhanger aan de shortzijde is SHORTONMARKET, en ONMARKET dekt beide richtingen tegelijk.

De waarde weerspiegelt alleen uitgevoerde orders. Een openstaande limiet- of stopinstap die niet is uitgevoerd laat LONGONMARKET false tot de fill plaatsvindt. Met CumulateOrders ingeschakeld, lezen meerdere gestapelde long instappen nog steeds als één enkele true-waarde; gebruik COUNTOFPOSITION om de position size te bekijken.

De twee standaardpatronen zijn IF NOT LongOnMarket THEN ... ENDIF om dubbele long-instappen te voorkomen, en IF LongOnMarket THEN ... ENDIF om exit- of stopbeheercode alleen te laten lopen zolang een long trade openstaat.

Voorbeelden

Voorbeeld 1, Instapbeveiliging tegen dubbele longs (ProBacktest)

probuilder
// Open a long only when no long position is already held
IF NOT LongOnMarket THEN
    BUY 1 LOT AT MARKET TomorrowOpen
ENDIF

Zonder de beveiliging zou de strategie op elke bar een nieuwe kooporder plaatsen. Dit is het voorbeeld uit de officiële referentie.

Voorbeeld 2, Systeem met voortschrijdend gemiddelde en in- en uitstapbeveiligingen (ProOrder)

probuilder
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
ENDIF

Elk blok is afhankelijk gemaakt van de positiestatus, dus instappen gebeurt alleen vanuit flat en uitstappen alleen zolang je long bent.

Voorbeeld 3, Stopbeheer beperkt tot open longs (ProOrder)

probuilder
// Promote the stop to breakeven after 15 points of open profit
IF LongOnMarket THEN
  IF close - tradeprice >= 15 * pointsize THEN
    SET STOP BREAKEVEN
  ENDIF
ENDIF

Positiebeheerinstructies zoals SET STOP BREAKEVEN vereisen een open positie, dus de LONGONMARKET-guard voorkomt runtimefouten wanneer je vlak staat.

Veelvoorkomende fouten en valkuilen

  • Aannemen dat false flat betekent. LONGONMARKET is false zowel wanneer de strategie vlak staat als wanneer ze short staat. Code die alleen mag lopen wanneer er geen enkele positie open is moet testen op NOT OnMarket in plaats daarvan.
  • Pending orders tellen niet mee. Tussen het plaatsen van een limit- of stopinstap en de uitvoering ervan blijft LONGONMARKET false, dus een onbeschermd instapblok kan extra orders in de wachtrij zetten. LongTriggered helpt de bar te detecteren waarop een long instap is uitgevoerd.
  • Geen informatie over de grootte. De vlag zegt niets over hoeveel contracten worden aangehouden. Pyramiding-logica die instappen stapelt onder CumulateOrders heeft COUNTOFPOSITION nodig om de exposure te begrenzen.
  • Verkeerd bereik. Het plakken van strategiefragmenten in een indicator neemt LONGONMARKET mee, en de indicator compileert dan niet. Positiestatus bestaat alleen in ProBacktest en ProOrder.
  • ONMARKET, waar zolang er een positie open is, long of short.
  • SHORTONMARKET, waar zolang er een short positie open is.
  • MARKET, voert orders uit tegen de huidige marktprijs.
  • BUY, opent een long positie.
  • SELL, sluit een long positie.
  • LongTriggered, signaleert dat een long instaporder is uitgevoerd.
  • COUNTOFPOSITION, de grootte van de open positie.
  • TRADEPRICE, de uitvoeringsprijs van een eerdere trade.