Iscriviti ora
ProBacktest/probacktest · proorder

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

probuilder
LongOnMarket

Come 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)

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

Senza 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)

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

Ogni 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)

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

Le 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 OnMarket invece.
  • 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 CumulateOrders richiede 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.
  • 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.