LONGONMARKET
LONGONMARKET i ProBacktest och ProOrder returnerar true så länge en long-position är öppen. Används för att skydda entry, exit och stophantering i strategikod.
Syntax
LongOnMarketSå fungerar det
LONGONMARKET tar inga argument och returnerar true när strategin för tillfället har en long-position, oavsett dess storlek. Den returnerar false när strategin är utan position och även när den är short; motsvarigheten på short-sidan är SHORTONMARKET, och ONMARKET täcker båda riktningarna samtidigt.
Värdet speglar endast fyllda ordrar. En väntande limit- eller stoppentry som inte har utförts lämnar LONGONMARKET falskt till dess att fyllningen sker. Med CumulateOrders aktiverat läses flera staplade long-entries fortfarande som ett enda true-värde; använd COUNTOFPOSITION för att granska position size.
De två standardmönstren är IF NOT LongOnMarket THEN ... ENDIF för att förhindra dubbla long-entries, och IF LongOnMarket THEN ... ENDIF för att exit- eller stopphanteringskod bara ska köras medan en long-affär är aktiv.
Exempel
Exempel 1, Entryskydd mot duplicerade long-positioner (ProBacktest)
// Open a long only when no long position is already held
IF NOT LongOnMarket THEN
BUY 1 LOT AT MARKET TomorrowOpen
ENDIFUtan skyddet skulle strategin lägga en ny köporder på varje bar. Det här är exemplet från den officiella referensen.
Exempel 2, System med glidande medelvärde med entry- och exitskydd (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
ENDIFVarje block är villkorat av positionstillståndet, så entry utlöses bara från ingen position och exit bara när man är long.
Exempel 3, Stophantering begränsad till öppna long-positioner (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
ENDIFPositionshanteringsinstruktioner som SET STOP BREAKEVEN kräver en öppen position, så LONGONMARKET-skyddet förhindrar körtidsfel när man står utanför marknaden.
Vanliga fel och fallgropar
- Att anta att false betyder ingen position. LONGONMARKET är false både när strategin är utan position och när den är short. Kod som bara ska köras när ingen position av något slag är öppen måste testa
NOT OnMarketistället. - Väntande ordrar räknas inte. Mellan att en limit- eller stopentry läggs och att den fylls förblir LONGONMARKET false, så ett oskyddat entryblock kan köa ytterligare order. LongTriggered hjälper till att upptäcka baren där en long entry utfördes.
- Ingen storleksinformation. Flaggan säger ingenting om hur många kontrakt som innehas. Pyramidlogik som staplar entries under
CumulateOrdersbehöver COUNTOFPOSITION för att begränsa exponeringen. - Fel omfattning. Att klistra in strategikodsnuttar i en indikator tar med LONGONMARKET, och indikatorn går då inte att kompilera. Positionstillstånd finns bara i ProBacktest och ProOrder.
Relaterade instruktioner
ONMARKET, sant så länge någon position är öppen, long eller short.SHORTONMARKET, sant så länge en short-position är öppen.MARKET, exekverar ordrar till aktuellt marknadspris.BUY, öppnar en long-position.SELL, stänger en long-position.LongTriggered, signalerar att en long entry-order utfördes.COUNTOFPOSITION, storleken på den öppna positionen.TRADEPRICE, exekveringspriset för en tidigare affär.