LONGONMARKET
LONGONMARKET in ProBacktest e ProOrder restituisce vero mentre una posizione long è aperta. Usato per proteggere ingressi, uscite e gestione dello stop nel codice della strategia.
Sintassi
LongOnMarketCome funziona
LONGONMARKET non accetta argomenti e restituisce vero quando la strategia detiene attualmente una posizione long, indipendentemente dalla sua dimensione. Restituisce falso quando la strategia è flat e anche quando è short; la controparte sul lato short è SHORTONMARKET, e ONMARKET copre entrambe le direzioni contemporaneamente.
Il valore riflette solo gli ordini eseguiti. Un ingresso limit o stop in attesa che non è stato eseguito lascia LONGONMARKET falso finché non avviene l'esecuzione. Con CumulateOrders abilitato, diversi ingressi long accumulati vengono letti comunque come un singolo valore vero; usa COUNTOFPOSITION per esaminare la position size.
I due pattern standard sono IF NOT LongOnMarket THEN ... ENDIF per evitare ingressi long duplicati, e IF LongOnMarket THEN ... ENDIF per far eseguire il codice di uscita o di gestione dello stop solo mentre un'operazione long è aperta.
Esempi
Esempio 1, Protezione d'ingresso contro long duplicati (ProBacktest)
// Open a long only when no long position is already held
IF NOT LongOnMarket THEN
BUY 1 LOT AT MARKET TomorrowOpen
ENDIFSenza la protezione, la strategia invierebbe un nuovo ordine di acquisto su ogni bar. Questo è l'esempio tratto dal riferimento ufficiale.
Esempio 2, Sistema a media mobile con protezioni di ingresso e uscita (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
ENDIFOgni blocco è condizionato allo stato della posizione, quindi gli ingressi scattano solo da flat e le uscite solo mentre si è long.
Esempio 3, Gestione dello stop limitata ai long aperti (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
ENDIFLe istruzioni di gestione della posizione come SET STOP BREAKEVEN richiedono una posizione aperta, quindi la protezione LONGONMARKET previene errori di runtime quando si è fuori mercato.
Errori e insidie comuni
- Presumere che falso significhi flat. LONGONMARKET è false sia quando la strategia è flat sia quando è short. Il codice che deve girare solo quando nessuna posizione di alcun tipo è aperta deve testare
NOT OnMarketinvece. - Gli ordini pendenti non contano. Tra l'inserimento di un ingresso limit o stop e la sua esecuzione, LONGONMARKET rimane falso, quindi un blocco di ingresso non protetto può accodare ordini aggiuntivi. LongTriggered aiuta a rilevare la bar in cui un ingresso long è stato eseguito.
- Nessuna informazione sulla dimensione. Il flag non dice nulla su quanti contratti sono detenuti. La logica di piramidazione che accumula ingressi con
CumulateOrdersrichiede COUNTOFPOSITION per limitare l'esposizione. - Ambito errato. Incollare frammenti di codice di strategia in un indicatore porta con sé LONGONMARKET, e l'indicatore non riesce più a compilare. Lo stato di posizione esiste solo in ProBacktest e ProOrder.
Istruzioni correlate
ONMARKET, vero mentre una qualsiasi posizione è aperta, long o short.SHORTONMARKET, vero mentre una posizione short è aperta.MARKET, esegue gli ordini al prezzo di mercato corrente.BUY, apre una posizione long.SELL, chiude una posizione long.LongTriggered, segnala che un ordine di ingresso long è stato eseguito.COUNTOFPOSITION, la dimensione della posizione aperta.TRADEPRICE, il prezzo di esecuzione di un'operazione passata.