Come controllare se un ordine è stato chiuso per stop loss

 

Sto scrivendo un EA, modificando il mio EA scritto per MT4. Apro un ordine utilizzando OrderSend.

Semplicemente se ho bisogno di capire (perhasps da History), se l'ordine inviato (a proposito.... devo controllare Order, Deals o Position?), è stato chiuso perché ha raggiunto lo StopLoss.
Ho controllato sui forum, ma non ho trovato quello che mi serve....

Uso HistoryOrderGetDouble con il parametroENUM_ORDER_PROPERTY_DOUBLE,

PREZZO_ORDINE_CORRENTE

dà solo il prezzo corrente del simbolo dell'ordine

che non può essere confrontato conORDER_SL. Suppongo che ORDER_PRICE_CURRENT sia solo il prezzo corrente del simbolo e non il prezzo di chiusura dell'ordine.

Grazie a tutti per il vostro supporto.

EDIT :

Questo argomento è ora in gran parte obsoleto a causa delle nuove possibilità offerte da MT5 dalla build 1640.

Vedere gli ultimi post dell'argomento per alcuni esempi.

 

Vedi questo argomento, probabilmente un po' confuso ma puoi trovare l'idea.

Il sistema di trading di MT5 è molto diverso da quello di MT4, quindi devi cambiare il tuo modo di pensare.

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction. - - Category: technical indicators
 
frankge973:

Sto scrivendo un EA, modificando il mio EA scritto per MT4. Apro un ordine usando OrderSend.

Semplicemente se ho bisogno di capire (perhasps da History), se l'ordine inviato (a proposito.... devo controllare Order, Deals o Position?), è stato chiuso perché ha raggiunto lo StopLoss.
Ho controllato sui forum, ma non ho trovato quello che mi serve....

Uso HistoryOrderGetDouble con il parametroENUM_ORDER_PROPERTY_DOUBLE,

PREZZO_ORDINE_CORRENTE

dà solo il prezzo corrente del simbolo dell'ordine

che non può essere confrontato conORDER_SL. Suppongo che ORDER_PRICE_CURRENT sia solo il prezzo corrente del simbolo e non il prezzo di chiusura dell'ordine.

Grazie a tutti per il vostro supporto.

È questo?

//-------------------------------- ES CIERRE POR SL ----------------------------------------------
bool esCierreSL(int ind, int modoInd= SELECT_BY_TICKET, int modoHist= MODE_TRADES)
{
    bool resp= OrderSelect(ind, modoInd, modoHist)? (StringFind(OrderComment(), "[sl]", 0)>-1): false;
    return(resp);
}
 
Jose Miguel Soriano:

È questo?

La domanda riguarda mql5, il tuo codice è mql4.

Ilcommento dell'ordine non è un modo affidabile di codificare.

 
Alain Verleyen:

La domanda riguarda mql5, il tuo codice è mql4.

Ilcommento dell'ordine non è un modo affidabile di codificare.

Scusa per il necro, ma questo è abbastanza interessante secondo me.

Sto facendo la transizione da mql4 a mql5, e trovo che i cambiamenti dei sistemi di trading e dello storico siano piuttosto impegnativi.

Per sapere se un trade sullo history book è stato chiuso per stop-loss, take-profit o altro:

  • in MT4 si poteva confrontare OrderStopLoss(), OrderTakeProfit() e OrderClosePrice(), o semplicemente controllare OrderComment().
  • in MT5 l'unico modo possibile mi sembra quello di controllare il commento di una transazione: HistoryDealGetString(tk, DEAL_COMMENT)
Sia MT4 che MT5 quando un ordine si chiude per stop-loss o take-profit scrivono [SL price] o [TP price] nel commento (in modi diversi.. ma comunque).

Ho letto l'articolo: https://www.mql5.com/en/forum/11996

È interessante, ma se ho capito bene, è mirato a identificare i cambiamenti di trade basati sulla gestione degli eventi, al volo.

Quindi ci deve essere un programma in ascolto (come un expert advisor in esecuzione su un grafico) altrimenti non viene rilevato nulla.

A mio parere, la rilevazione dei motivi di chiusura di un'operazione deve essere fatta sul book storico perché è (o dovrebbe essere) il modo più sicuro per sapere cosa è successo, dato che è scritto da qualche parte e non catturato dall'aria.

La mia analisi è sbagliata? Cosa ne pensi?

Detect stop trigger in OnTradeTransaction backtest
Detect stop trigger in OnTradeTransaction backtest
  • www.mql5.com
Unfortunately, i get only DEAL_ENTRY_IN provided by MqlTradeTransaction passed to OnTradeTransaction.
 
Marco: Sia MT4 che MT5 quando un ordine si chiude per stop-loss o take-profit scrivono [SL price] o [TP price] nel commento (in modi diversi.. ma comunque).
No, non lo fanno. Questo è il tuo broker.
Non è una buona idea, i broker possono cambiare i commenti, compresa la completa sostituzione.
 
whroeder1:
No, non lo fanno. Quello è il vostro broker.

Ok, entrambi i broker MT4 e MT5 mettono quella stringa sul commento... almeno i pochi che ho testato.

E sono d'accordo, questa non è una buona idea, poiché il commento può essere soggetto a modifiche per mano del broker.

Ma non riesco a vedere come questo potrebbe essere fatto in modo diverso, dal momento che non riesco a trovare altre tracce nel trade history book.

C'è un modo migliore per raggiungere questo obiettivo?

 

Ho contattato il service desk 2 anni fa (a proposito di MT4).

...It is not clear to me whether all brokers incorporate the letters sp or tp in the order comment when a trade hits the StopLoss or TakeProfit. Is this at the brokers' discretion or is it automatically done with every broker?

e mi hanno risposto

Viene fatto automaticamente con ogni broker. E anche il broker può cambiare questo valore da solo.

Quindi è fatto dal sistema, non dal broker. Non è comunque utile se il broker può poi cambiarlo.

Intendiamoci, non ho notato nessuna occasione in cui il broker abbia cambiato il commento dell'ordine.

Di solito, nel mio codice, è più importante sapere se un trade si è chiuso con profitto o perdita. Quando si usa un trailing stop un trade può colpire lo SL, ma essere ancora in profitto.

 
Keith Watford:

Ho contattato il service desk 2 anni fa (a proposito di MT4).

e mi hanno risposto

quindi è fatto dal sistema, non dal broker. Ancora non è utile se il broker può poi cambiarlo però.

Intendiamoci, non ho notato nessuna occasione in cui il broker ha cambiato il commento dell'ordine.

Di solito, nel mio codice, è più importante sapere se un trade si è chiuso con profitto o perdita. Quando si usa un trailing stop un trade può colpire lo SL, ma essere ancora in profitto.

Grazie Keith, è quello che speravo, visto che non ho trovato un workaround migliore.

 
honest_knave:
Credo che entrambi i poster stiano convertendo MQL4 in MQL5

Comunque, basta confrontare il prezzo di chiusura con il prezzo dello stoploss.

Nota: In un conto reale (specialmente ECN), probabilmente il prezzo di trigger ha un divario tra il prezzo stoploss preimpostato, quindi usare "<=" o ">=".

 
Xiangdong Guo:

Comunque, basta confrontare il prezzo di chiusura con il prezzo dello stoploss.

Nota: In un conto reale (specialmente ECN), probabilmente il prezzo di trigger ha un gap tra il prezzo stoploss preimpostato, quindi usate "<=" o ">=".

Non è possibile confrontare il prezzo di chiusura con il prezzo di stop loss. Slippage significa che potrebbe chiudere più in alto o più in basso dello stop loss.

Quindi "<=" o ">=" non è utile.