Quando chiudi una posizione tramite Stop Loss, il volume della tua operazione viene raddoppiato; al contrario, se chiudi tramite Take Profit, viene utilizzato il volume minimo. Per capire se un'operazione è stata eseguita dopo l'attivazione dello Stop Loss o del Take Profit, si utilizza la funzione OnTradeTransaction.
È stata introdotta una fantastica enumerazione ENUM_DEAL_REASON nella build 1625:
| ENUM_DEAL_REASON | Descrizione della ragione |
|---|---|
| ... | ... |
| DEAL_REASON_SL | L'operazione è stata eseguita a seguito dell'attivazione dello Stop Loss |
| DEAL_REASON_TP | L'operazione è stata eseguita a seguito dell'attivazione del Take Profit |
| ... | ... |
Puoi verificarlo in OnTradeTransaction.
In altre parole, è un modo molto semplice e affidabile per determinare se un'operazione è stata il risultato di un Take Profit o di uno Stop Loss.
Attualmente (build 1626), questo Expert Advisor può essere verificato solo in un test live, lanciandolo su un grafico o in modalità debug con dati reali (premendo F5 nell'editor MetaEditor). Ho utilizzato il seguente trucco:
In OnTradeTransaction, abbiamo determinato se è stato attivato il Take Profit o lo Stop Loss:
if(deal_symbol==m_symbol.Name() && deal_magic==m_magic) if(deal_entry==DEAL_ENTRY_OUT) { if(deal_reason==DEAL_REASON_SL) ExtLot*=2.0; else if(deal_reason==DEAL_REASON_TP) ExtLot=m_symbol.LotsMin(); }
Commento 0