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
ONMARKETSå 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)
// Open a position only when nothing is currently held
IF NOT ONMARKET THEN
BUY 1 CONTRACT AT MARKET
ENDIFStrategin 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)
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
ENDIFEn 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)
// 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 ä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
CumulateOrdersaktiverat 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.
Relaterade instruktioner
LONGONMARKET, sant så länge en long-position är öppen.SHORTONMARKET, sant så länge en short-position är öppen.MARKET, exekverar ordrar till aktuellt marknadspris.BUY, öppnar en long-position.SELLSHORT, öppnar en short-position.COUNTOFPOSITION, storleken på den öppna positionen.POSITIONPERF, utvecklingen för den öppna positionen.TRADEPRICE, exekveringspriset för en tidigare affär.