Ecco le voci di log di una posizione chiusa da un Take Profit attivato. Come si può rilevare questo in OnTradeTransaction( const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result)?
Non è impostato né il codice di ritorno di const MqlTradeResult& result (result.retcode) (0 non è un'opzione, TRADE_RETCODE_DONE = 10009) né uno degli id (Deal ticket, Order ticket, Request ID) per trovarli senza passare ogni volta attraverso tutte le transazioni.
Questa è la stampa alla riga #376 che stampa i flag rilevanti(?):
Parte della confusione è dovuta al fatto che ENUM_ORDER_TYPE 0 = ORDER_TYPE_BUY. Quindi un EA non può distinguere se il valore del campo è impostato con ORDER_TYPE_BUY o se è nullificato e quindi non impostato - fantastico!!!
Denis, grazie per l'articolo! L'ho letto con interesse, ma non ho ancora realizzato appieno ciò che ho letto. Ho anche scaricato il tuo Expert Advisor TradeProcessor e l'ho eseguito sul mio terminale, dove attualmente ho una posizione aperta. Ho guardato i tabulati e mi sono subito apparse alcune domande alle quali voglio trovare risposta da solo. Se non sono in grado di farlo, dovrò disturbare voi. ))
MrBrooklin posizione aperta. Ho guardato i tabulati e mi sono subito apparse alcune domande alle quali voglio trovare risposta da solo. Se non sono in grado di farlo, dovrò disturbare voi. ))
Saluti, Vladimir.
Grazie per la sua opinione. Non c'è di che, MrBrooklin! ))
E non c'è alcuna transazione. L'inserimento di un ordine pendente e la sua elaborazione non comportano alcuna transazione. Trade ticket = 0, type = 0, dove 0 equivale a DEAL_TYPE_BUY per l'enumerazione ENUM_DEAL_TYPE. Cioè, nella struttura transMqlTradeTransaction, alcuni campi sono popolati e altri no. I campi non riempiti vengono solitamente annullati.
Il campo deal sarà popolato per una transazione di questo tipo:
TRADE_TRANSACTION_DEAL_*
I seguenti campi sono popolati nella struttura MqlTradeTransaction per le transazioni commerciali relative all'elaborazione delle transazioni (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE e TRADE_TRANSACTION_DEAL_DELETE):
deal - biglietto della transazione;
ordine - ticket dell'ordine in base al quale è stata effettuata la transazione;
simbolo - nome dello strumento finanziario oggetto della transazione;
type - tipo di transazione commerciale;
deal_type - tipo di transazione;
prezzo - prezzo al quale è stata effettuata l'operazione;
price_sl - prezzo Stop Loss (viene inserito se è specificato nell'ordine in base al quale è stata effettuata l'operazione);
price_tp - prezzo di Take Profit (viene inserito, se specificato nell'ordine, sulla base del quale è stata effettuata l'operazione);
volume - volume dell'operazione in lotti.
position - ticket di una posizione aperta, modificata o chiusa in seguito all'esecuzione di un'operazione.
position_by - ticket di una posizione contraria. Viene compilato solo per le operazioni di chiusura di una posizione in contropartita (out by).
Solo 3 tipi di transazioni appartengono ai tipi "deal": TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE, TRADE_TRANSACTION_DEAL_DELETE.
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
E non c'è alcuna transazione. L'inserimento di un ordine pendente non comporta alcuna transazione. Trade ticket = 0, type = 0, dove 0 equivale a DEAL_TYPE_BUY per l'enumerazione ENUM_DEAL_TYPE. Cioè, nella struttura transMqlTradeTransaction, alcuni campi sono popolati e altri no. I campi non riempiti sono solitamente azzerati.
Ecco le voci di log di una posizione chiusa da un Take Profit attivato. Come si può rilevare questo in OnTradeTransaction( const MqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result)?
Non è impostato né il codice di ritorno di const MqlTradeResult& result (result.retcode) (0 non è un'opzione, TRADE_RETCODE_DONE = 10009) né uno degli id (Deal ticket, Order ticket, Request ID) per trovarli senza passare ogni volta attraverso tutte le transazioni.
Questa è la stampa alla riga #376 che stampa i flag rilevanti(?):
E questo è ciò che posso leggere nel diario:
10:04:40 take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40 deal #3 buy 0.01 EURUSD at 1.00171 done (based on order #3)
10:04:40 deal performed [#3 buy 0.01 EURUSD at 1.00171]
10:04:40 order performed buy 0.01 at 1.00171 [#3 buy 0.01 EURUSD at 1.00171]
10:04:40 373 New trade operation dTime1970.01.01 09:03:41
10:04:40 376 0 prc:trans.price=1.00171 tckt: 2 Tr.Type: TRADE_TRANSACTION_DEAL_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_STARTED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40 489 MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #3 DEAL_TYPE_BUY EURUSD 0.01 lot
10:04:40 376 1 prc:trans.price=1.00171 tckt: 2 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40 383 1 prc:trans.price=1.00171 tckt: 2 res.Ord:0 Tr.Type: TRADE_TRANSACTION_ORDER_DELETE Tr.OrdFill: ORDER_STATE_FILLED Tr.OrdType: ORDER_TYPE_BUY Tr.tckt:3 2 0 Res::0 0 0 0 0
10:04:40 408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
10:04:40 376 2 prc:trans.price=1.00171 tckt: 2 Tr.Type: TRADE_TRANSACTION_HISTORY_ADD Tr.OrdType: ORDER_TYPE_BUY Tr.OrdFill: ORDER_STATE_FILLED Tr.tckt:3 2 0 retCode:0 0 0 0 0
10:04:40 408 PosExists #3 2 mag:0 ORDER_STATE_FILLED ORDER_TYPE_BUY
2022.09.26 14:08:33.755 disconnected
Il terminale scrive così bene "take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]".
Allora perché diavolo non c'è un flag come TRADE_TRANSACTION_TRIGGERED_PT e TRADE_TRANSACTION_TRIGGERED_SL?
E il codice di ritorno della richiesta non è sempre impostato?
Denis, grazie per l'articolo! L'ho letto con interesse, ma non ho ancora realizzato appieno ciò che ho letto. Ho anche scaricato il tuo Expert Advisor TradeProcessor e l'ho eseguito sul mio terminale, dove attualmente ho una posizione aperta. Ho guardato i tabulati e mi sono subito apparse alcune domande alle quali voglio trovare risposta da solo. Se non sono in grado di farlo, dovrò disturbare voi. ))
Saluti, Vladimir.
Saluti, Vladimir.
Grazie per la sua opinione. Non c'è di che, MrBrooklin! ))
Grazie per la sua opinione. Non c'è di che, MrBrooklin! ))
Denis, scusa, ma senza il tuo aiuto la mia mente "esplode". Ecco il risultato di uno dei passaggi del tuo EA (tra l'altro, un EA molto bello!!!):
Quello che non capisco:
ENUM_DEAL_TYPE
Identificatore
Descrizione
DEAL_TYPE_BUY
Comprare
Domanda: in che modo quando si modifica un ordine pendente SELL_STOP il tipo di transazione viene determinato in BUY?????))
Saluti, Vladimir.
E non c'è alcuna transazione. L'inserimento di un ordine pendente e la sua elaborazione non comportano alcuna transazione. Trade ticket = 0, type = 0, dove 0 equivale a DEAL_TYPE_BUY per l'enumerazione ENUM_DEAL_TYPE. Cioè, nella struttura transMqlTradeTransaction , alcuni campi sono popolati e altri no. I campi non riempiti vengono solitamente annullati.
Maggiori dettagli: nella Documentazione sugli ordini pendenti.
Il campo deal sarà popolato per una transazione di questo tipo:
TRADE_TRANSACTION_DEAL_*
I seguenti campi sono popolati nella struttura MqlTradeTransaction per le transazioni commerciali relative all'elaborazione delle transazioni (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE e TRADE_TRANSACTION_DEAL_DELETE):
Solo 3 tipi di transazioni appartengono ai tipi "deal": TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE, TRADE_TRANSACTION_DEAL_DELETE.
E non c'è alcuna transazione. L'inserimento di un ordine pendente non comporta alcuna transazione. Trade ticket = 0, type = 0, dove 0 equivale a DEAL_TYPE_BUY per l'enumerazione ENUM_DEAL_TYPE. Cioè, nella struttura transMqlTradeTransaction , alcuni campi sono popolati e altri no. I campi non riempiti sono solitamente azzerati.
Maggiori dettagli: nella Documentazione sugli ordini pendenti.
Ahhhh, ecco!!! Cavolo, mi ha rotto le scatole! ))
Grazie!!!
Saluti, Vladimir.