Bli medlem idag
ProBacktest/probacktest · proorder

ONMARKET

ONMARKET i ProBacktest och ProOrder returnerar sant så länge någon position är öppen, long eller short. Används för att förhindra dubbla entries och skydda positionshanteringen.

Syntax

probuilder
ONMARKET

Så fungerar det

ONMARKET tar inga argument och returnerar sant när strategin håller minst en öppen position, long eller short, och falskt när den är flat. Den är den riktningsoberoende motsvarigheten till LONGONMARKET och SHORTONMARKET, som testar en sida var.

Värdet speglar endast fyllda ordrar. En väntande limit- eller stoporder som inte har exekverats lämnar ONMARKET falsk, och flaggan slår tillbaka till falsk på baren efter att positionen är helt stängd. Med CumulateOrders aktiverat läses staplade entries fortfarande som ett enda sant värde; COUNTOFPOSITION rapporterar den faktiska storleken.

Typiska användningar faller i två grupper. Entrykod omsluts av IF NOT OnMarket THEN ... ENDIF så att en ny affär bara startar från platt läge. Hanteringskod, som trailing-logik eller nollställning av tillstånd, omsluts av IF OnMarket THEN ... ENDIF, eller dess invers används för att återinitiera variabler mellan affärer.

Exempel

Exempel 1, Entryspärr från flat (ProBacktest)

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

Strategin köper ett kontrakt endast när den är flat, så positioner ackumuleras aldrig. Detta är exemplet från den officiella referensen.

Exempel 2, Symmetriska long- och short-entries (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

En enda ONMARKET-spärr täcker båda riktningarna, vilket är enklare än att kombinera separata LONGONMARKET- och SHORTONMARKET-kontroller runt varje entry.

Exempel 3, Återställa variabler för affärstillstånd mellan positioner (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 är den naturliga utlösaren för att återställa tillstånd per affär. Flaggan nollställs medan positionen är flat, så varje ny position börjar med ett rent blad.

Vanliga fel och fallgropar

  • Riktningsblind av design. ONMARKET kan inte skilja long från short. Exit- eller stopkod som bara är meningsfull på en sida måste använda LONGONMARKET eller SHORTONMARKET, annars kan en short-position utlösa hantering för long-sidan.
  • Väntande ordrar räknas inte. Mellan att en limit- eller stop-entry läggs och att den fylls förblir ONMARKET falskt, så ett oskyddat block kan köa flera order som alla fylls senare. Avbryt eller räkna väntande order i entrylogiken.
  • Ingen storleksinformation. Med CumulateOrders aktiverat förblir ONMARKET sant oavsett om positionen håller ett kontrakt eller tjugo. Begränsa pyramidering med COUNTOFPOSITION snarare än med den booleska.
  • Fel omfattning. ONMARKET inuti en ProBuilder-indikator eller ProScreener kompilerar inte. Positionstillstånd finns endast i ProBacktest- och ProOrder-kod.