記事"MQL5 クックブック:トレードトランザクションイベントの処理"についてのディスカッション - ページ 2

 

トリガーされた利益確定によって決済されたポジションのログ・エントリです。これは OnTradeTransaction( constMqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) でどのように検出できますか?

すべての取引を毎回ループすることなく検索するために、const MqlTradeResult&resultのリターン・コード(result.retcode)が設定されていません(0はオプションなし、TRADE_RETCODE_DONE = 10009)。

これは、関連する(?)フラグを表示する376行目のプリントです:

void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
...// line 376:
   Print(__LINE__," ",counter," prc:",_ToStr2Dig(trans.price)," tckt: ",trans.position //," pTrigg:",_ToStr2Dig(trans.price_trigger)
            ," Tr.Type: ",EnumToString(trans.type)//," DL.Type:",EnumToString(trans.deal_type)
            ," Tr.OrdType: ",EnumToString(trans.order_type)," Tr.OrdFill: ",EnumToString(trans.order_state)
            ," Tr.tckt:",trans.order," ",trans.position," ",trans.position_by
            ," retCode:",result.retcode," ",result.deal," ",result.order," ",result.deal," ",result.request_id         );
...
  }

そして、これがジャーナルで読めるものだ:

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

ターミナルは見事に "Take profit triggered #2 sell 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 buy 0.01 EURUSD at 1.00171]" と書いている。

では、なぜTRADE_TRANSACTION_TRIGGERED_PTやTRADE_TRANSACTION_TRIGGERED_SLのようなフラグがないのでしょうか?

また、リクエストのリターンコードは常に設定されていないのでしょうか?

 
混乱の一因は、ENUM_ORDER_TYPE 0 = ORDER_TYPE_BUYという事実にある。そのため、EAはフィールドの値がORDER_TYPE_BUYで設定されているのか、無効化されて設定されていないのかを区別できない!
 

デニス、記事をありがとう!興味深く読ませていただきましたが、まだ十分に理解できていません。また、TradeProcessor Expert Advisorをダウンロードし、現在オープンポジションを持って いる私のターミナルで実行しました。プリントアウトを見たところ、すぐにいくつかの疑問が浮かびました。もし、それができなければ、御社にご迷惑をおかけすることになるでしょう。))

よろしく、ウラジミール。

 
MrBrooklin オープンポジションを持って いる私のターミナルで実行しました。プリントアウトを見たところ、すぐにいくつかの疑問が浮かびました。もし、それができなければ、御社にご迷惑をおかけすることになるでしょう。))

よろしく、ウラジミール。

ご意見ありがとう。 どういたしまして、ブルックリンさん!))

 
Denis Kirichenko #:

ご意見ありがとうございます。 どういたしまして、ブルックリンさん!))

デニス、申し訳ありませんが、あなたの助けがないと、私の心は「爆発」してしまいます。あなたのEA(ちなみに、とてもクールなEAです!!)のパスの結果です:

2023.10.27 17:11:02.514 TradeProcessor (EURUSDrfd,D1)   Проход : #100
2023.10.27 17:11:02.514 TradeProcessor (EURUSDrfd,D1)   Поступил запрос: изменить параметры отложенного ордера
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   ---===Транзакция===---
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет сделки: 0
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип сделки: DEAL_TYPE_BUY
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет ордера: 1030195768
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Состояние ордера: ORDER_STATE_PLACED
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип ордера: ORDER_TYPE_SELL_STOP
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Цена: 1.05853
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Уровень Stop Loss: 1.(скрыл значения стоп-лосса)
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Уровень Take Profit: 1.05803
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Цена срабатывания стоп-лимитного ордера: 0.00000
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Торговый инструмент: EURUSDrfd
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Срок истечения отложенного ордера: 2023.10.27 00:00
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип ордера по времени действия: ORDER_TIME_DAY
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Тикет позиции: 0
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Объём в лотах: 0.04
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   
2023.10.27 17:11:02.733 TradeProcessor (EURUSDrfd,D1)   Проход : #101

理解できないのは

  1. 私のEAは売り注文SELL_STOPを発注しました;
  2. あなたのEAは、取引タイプDEAL_TYPE_BY(黄色で強調表示)と書いています。念のため、MQL5リファレンスガイドを見てみました。それによるとDEAL_TYPE_BYは

ENUM_DEAL_TYPE

識別子

説明

DEAL_TYPE_BUY

購入


質問 - 保留注文 SELL_STOP を変更する際、取引タイプがBUY に決定されるのはなぜですか?))

よろしく、ウラジミール。

 

そして取引はない。未決注文の発注とその処理には、いかなる取引も伴わない。ここで、0 は ENUM_DEAL_TYPE 列挙の DEAL_TYPE_BUY に相当する つまり MqlTradeTransaction の trans 構造体には 、入力されるフィールドと入力されないフィールドがあります。未入力のフィールドは通常 NULL になります。

詳細は、保留中の注文に関するドキュメントを 参照してください。

このタイプの 取引では、取引フィールドが入力されます:

TRADE_TRANSACTION_DEAL_*

取引処理(TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE、TRADE_TRANSACTION_DEAL_DELETE)に関連する取引トランザクションの MqlTradeTransaction 構造には、以下のフィールドが入力されます:

  • deal - 取引のチケット;
  • order - 取引が行われた注文のチケット;
  • シンボル - 取引の金融商品名;
  • type - 取引の種類;
  • deal_type - 取引のタイプ;
  • price - 取引が行われた価格;
  • price_sl - ストップロス価格 (取引が行われた注文で指定された場合、入力されます);
  • price_tp - テイクプロフィット価格 (注文で指定された場合、取引が行われた際に記入される);
  • volume - ロット単位の取引量。
  • position - 取引の結果、オープン、変更、クローズされたポジションのチケット。
  • position_by - カウンターポジションのチケット。カウンターでポジションを決済する取引(out by)にのみ記入される。


TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE、TRADE_TRANSACTION_DEAL_DELETE

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Denis Kirichenko #:

そして取引はない。未決注文の発注は取引を伴わない。ここで、0 は ENUM_DEAL_TYPE 列挙の DEAL_TYPE_BUY に相当する つまり MqlTradeTransaction の trans 構造体には 、入力されるフィールドと入力されないフィールドがあります。未入力のフィールドは通常ゼロになります。

詳細:保留注文に関するドキュメント

ああ、これだ!頭が痛くなったよ!))

ありがとう!

ありがとう!!!