文章 "MQL5 Cookbook: 处理 TradeTransaction 事件" - 页 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),也没有设置 id(交易票据、订单票据、请求 ID)中的一个,以便在不循环所有交易的情况下找到它们。 这是在第 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.类型:",枚举字符串(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 终端写得非常漂亮:"止盈触发 #2 卖出 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 在 1.00171 买入 0.01 EURUSD]"。 为什么没有 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 智能交易系统,并在我的终端上运行了它,目前我有一个未结头寸。我看了打印输出,随即出现了一些问题,我想自己找到答案。好吧,如果我做不到,就只能麻烦您了。)) 再见,弗拉基米尔。 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,类型 = 0,其中 0相当于 枚举 ENUM_DEAL_TYPE 的 DEAL_TYPE_BUY。也就是说,在 MqlTradeTransaction 跨 结构中 ,有些字段已填充,有些则未填充。未填充的字段通常为空。 更多详情:请参阅有关挂单的文档。 这种类型 的交易将填充交易字段: TRADE_TRANSACTION_DEAL_* 在 MqlTradeTransaction 结构中,与交易处理相关的交易(TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE 和 TRADE_TRANSACTION_DEAL_DELETE)会填充以下字段: deal - 交易票据; order - 交易订单的票据; symbol - 交易中金融工具的名称; type - 交易类型; deal_type - 交易类型; price - 交易价格; price_sl - 止损价格(如果交易订单中指定了止损价格,则填写该价格); price_tp - Take Profit(获利价格)(如果订单中指定了该价格,则填写该价格,并以此为基础进行交易); volume - 以手为单位的交易量。 position - 因执行交易而开仓、改仓或平仓的仓单。 position_by - 反向仓位的单据。它只用于通过反向(out by)平仓的交易。 只有 3 种交易属于 "交易 "类型:TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE、TRADE_ TRANSACTION_DEAL_DELETE。 Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торговой транзакции www.mql5.com Структура торговой транзакции - Структуры данных - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 MQL5 Cookbook: 处理 TradeTransaction 交易事务. 请求和响应结构、描述和记录 为莫斯科交易所开发一个交易机器人从哪里开始呢? MrBrooklin 2023.10.27 16:56 #17 Denis Kirichenko #:没有交易。下挂单不涉及任何交易。交易单 = 0,类型 = 0,其中 0相当于 枚举 ENUM_DEAL_TYPE 的 DEAL_TYPE_BUY 。 也就是说,在 MqlTradeTransaction 跨 结构中 ,有些字段已填充,有些则未填充。未填充的字段通常清零。更多详情:请参阅有关挂单的文档。 啊哈,就是这样!!!!天啊,我的头都要炸了!)) 谢谢 谢谢,弗拉基米尔 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
以下是触发止盈平仓的日志记录。如何在 OnTradeTransaction( constMqlTradeTransaction& trans, const MqlTradeRequest& request, const MqlTradeResult& result) 中检测到这一点?
既没有设置 const MqlTradeResult& result 的返回代码(result.retcode)(0 是无选项,TRADE_RETCODE_DONE = 10009),也没有设置 id(交易票据、订单票据、请求 ID)中的一个,以便在不循环所有交易的情况下找到它们。
这是在第 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
终端写得非常漂亮:"止盈触发 #2 卖出 0.01 EURUSD 1.00319 sl: 1.00816 tp: 1.00171 [#3 在 1.00171 买入 0.01 EURUSD]"。
为什么没有 TRADE_TRANSACTION_TRIGGERED_PT 和 TRADE_TRANSACTION_TRIGGERED_SL 这样的标志?
请求的返回代码总是不设置吗?
丹尼斯,谢谢你的文章!我饶有兴趣地阅读了这篇文章,但我还没有完全理解我所读到的内容。我还下载了您的 TradeProcessor 智能交易系统,并在我的终端上运行了它,目前我有一个未结头寸。我看了打印输出,随即出现了一些问题,我想自己找到答案。好吧,如果我做不到,就只能麻烦您了。))
再见,弗拉基米尔。
再见,弗拉基米尔。
谢谢您的意见。 不客气,布鲁克林先生!))
谢谢您的意见。 不客气,布鲁克林先生!))
丹尼斯,对不起,没有您的帮助,我的脑子会 "爆炸 "的。这是您的 EA(顺便说一句,非常棒的 EA!!!)的一次通行结果:
我不明白的是
ENUM_DEAL_TYPE
标识符
描述
DEAL_TYPE_BUY
买入
问题 - 当修改挂单 SELL_STOP 时,如何将交易类型确定为BUY?????))
谢谢,弗拉基米尔。
没有交易。下挂单和处理挂单不涉及任何交易。交易单 = 0,类型 = 0,其中 0相当于 枚举 ENUM_DEAL_TYPE 的 DEAL_TYPE_BUY。也就是说,在 MqlTradeTransaction 跨 结构中 ,有些字段已填充,有些则未填充。未填充的字段通常为空。
更多详情:请参阅有关挂单的文档。
这种类型 的交易将填充交易字段:
TRADE_TRANSACTION_DEAL_*
在 MqlTradeTransaction 结构中,与交易处理相关的交易(TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE 和 TRADE_TRANSACTION_DEAL_DELETE)会填充以下字段:
只有 3 种交易属于 "交易 "类型:TRADE_TRANSACTION_DEAL_ADD、TRADE_TRANSACTION_DEAL_UPDATE、TRADE_ TRANSACTION_DEAL_DELETE。
没有交易。下挂单不涉及任何交易。交易单 = 0,类型 = 0,其中 0相当于 枚举 ENUM_DEAL_TYPE 的 DEAL_TYPE_BUY 。 也就是说,在 MqlTradeTransaction 跨 结构中 ,有些字段已填充,有些则未填充。未填充的字段通常清零。
更多详情:请参阅有关挂单的文档。
啊哈,就是这样!!!!天啊,我的头都要炸了!))
谢谢
谢谢,弗拉基米尔