記事"MQL5 クックブック:トレードトランザクションイベントの処理"についてのディスカッション - ページ 2 12 新しいコメント Carl Schreiber 2022.09.26 14:18 #11 トリガーされた利益確定によって決済されたポジションのログ・エントリです。これは 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のようなフラグがないのでしょうか? また、リクエストのリターンコードは常に設定されていないのでしょうか? Discussion of article "MQL5 MetaEditor build 1490 MetaEditor build 1490 Carl Schreiber 2022.09.26 15:13 #12 混乱の一因は、ENUM_ORDER_TYPE 0 = ORDER_TYPE_BUYという事実にある。そのため、EAはフィールドの値がORDER_TYPE_BUYで設定されているのか、無効化されて設定されていないのかを区別できない! MrBrooklin 2023.10.27 10:58 #13 デニス、記事をありがとう!興味深く読ませていただきましたが、まだ十分に理解できていません。また、TradeProcessor Expert Advisorをダウンロードし、現在オープンポジションを持って いる私のターミナルで実行しました。プリントアウトを見たところ、すぐにいくつかの疑問が浮かびました。もし、それができなければ、御社にご迷惑をおかけすることになるでしょう。)) よろしく、ウラジミール。 Denis Kirichenko 2023.10.27 11:13 #14 MrBrooklin オープンポジションを持って いる私のターミナルで実行しました。プリントアウトを見たところ、すぐにいくつかの疑問が浮かびました。もし、それができなければ、御社にご迷惑をおかけすることになるでしょう。))よろしく、ウラジミール。 ご意見ありがとう。 どういたしまして、ブルックリンさん!)) MrBrooklin 2023.10.27 16:31 #15 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 理解できないのは 私のEAは売り注文SELL_STOPを発注しました; あなたのEAは、取引タイプDEAL_TYPE_BY(黄色で強調表示)と書いています。念のため、MQL5リファレンスガイドを見てみました。それによるとDEAL_TYPE_BYは ENUM_DEAL_TYPE 識別子 説明 DEAL_TYPE_BUY 購入 質問 - 保留注文 SELL_STOP を変更する際、取引タイプがBUY に決定されるのはなぜですか?)) よろしく、ウラジミール。 Denis Kirichenko 2023.10.27 16:53 #16 そして取引はない。未決注文の発注とその処理には、いかなる取引も伴わない。ここで、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: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции www.mql5.com Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 MrBrooklin 2023.10.27 16:56 #17 Denis Kirichenko #:そして取引はない。未決注文の発注は取引を伴わない。ここで、0 は ENUM_DEAL_TYPE 列挙の DEAL_TYPE_BUY に相当する。 つまり 、MqlTradeTransaction の trans 構造体には 、入力されるフィールドと入力されないフィールドがあります。未入力のフィールドは通常ゼロになります。詳細:保留注文に関するドキュメント。 ああ、これだ!頭が痛くなったよ!)) ありがとう! ありがとう!!! 12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
トリガーされた利益確定によって決済されたポジションのログ・エントリです。これは OnTradeTransaction( constMqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) でどのように検出できますか?
すべての取引を毎回ループすることなく検索するために、const MqlTradeResult&resultのリターン・コード(result.retcode)が設定されていません(0はオプションなし、TRADE_RETCODE_DONE = 10009)。
これは、関連する(?)フラグを表示する376行目のプリントです:
そして、これがジャーナルで読めるものだ:
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のようなフラグがないのでしょうか?
また、リクエストのリターンコードは常に設定されていないのでしょうか?
デニス、記事をありがとう!興味深く読ませていただきましたが、まだ十分に理解できていません。また、TradeProcessor Expert Advisorをダウンロードし、現在オープンポジションを持って いる私のターミナルで実行しました。プリントアウトを見たところ、すぐにいくつかの疑問が浮かびました。もし、それができなければ、御社にご迷惑をおかけすることになるでしょう。))
よろしく、ウラジミール。
よろしく、ウラジミール。
ご意見ありがとう。 どういたしまして、ブルックリンさん!))
ご意見ありがとうございます。 どういたしまして、ブルックリンさん!))
デニス、申し訳ありませんが、あなたの助けがないと、私の心は「爆発」してしまいます。あなたのEA(ちなみに、とてもクールなEAです!!)のパスの結果です:
理解できないのは
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 構造には、以下のフィールドが入力されます:
TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE、TRADE_TRANSACTION_DEAL_DELETE。
そして取引はない。未決注文の発注は取引を伴わない。ここで、0 は ENUM_DEAL_TYPE 列挙の DEAL_TYPE_BUY に相当する。 つまり 、MqlTradeTransaction の trans 構造体には 、入力されるフィールドと入力されないフィールドがあります。未入力のフィールドは通常ゼロになります。
詳細:保留注文に関するドキュメント。
ああ、これだ!頭が痛くなったよ!))
ありがとう!
ありがとう!!!