文章 "EA 交易中采用OnTrade() 函数处理交易事件"

 

新文章 EA 交易中采用OnTrade() 函数处理交易事件已发布:

MQL5提供了海量的创新,其中就包括使用各种类型的事件(计时器事件、交易事件、自定义事件等)。有了处理事件的能力,您就能够创建全新类型的自动与半自动交易程序。我们会在本文中一起学习交易事件,并针对OnTrade()函数编写一些处理交易事件的代码。

利用 MQL 编写“EA 交易”的任何交易者,或早或晚都会面临报告其“EA 交易”如何起作用的必要性。也可能需要实现“EA 交易”行动相关的短信或电子邮件通知。不管哪种情况,我们都得“捕捉”市场中发生特定事件或某个“EA 交易”执行的行动,并通知用户。

我会用本文为您讲解可以如何实现交易事件的处理,并提供我的实现。

我们拟于本文中处理下述事件:

  • 持仓
    1. Open(开仓)
    2. Add(增持)
    3. Modify (修改持仓)(更改“止损”与“获利”)
    4. Reverse(反向开仓)
    5. Close entire position(完全平仓)
    6. Close part of position(部分平仓)
  • 挂单
    1. Place(下挂单)
    2. Modify(修改挂单)

图 1. 警报

作者:KlimMalgin

 

编译时,从 "数字 "到 "字符串 "的隐式转换出现错误 TradeControl.mq5 349 99
在这一行中

_alerts += "在交易对 "+PositionList[i]. symbol+"上,止损从 "+PrevPositionList[i].sl +" 改为 "+PositionList[i].sl +"\n";

 
sergey1294:

编译时,从 "数字 "到 "字符串 "的隐式转换出现错误 TradeControl.mq5 349 99
在这一行中

_alerts += "在交易对 "+PositionList[i].symbol+"上,止损从 "+PrevPositionList[i].sl +" 改为 "+PositionList[i].sl +"\n";

这不是一个错误,而是一个警告,因为这一行包含将数字 转换为字符串 的隐式转换。在这种情况下,编译器会对转换发出警告,程序员必须决定这种转换是否是错误。

要消除这种警告,必须进行显式转换:

_alerts += "在蒸汽机上"+PositionList[i].symbol+"将止损从"+ (string)PrevPositionList[i].sl +"上+ (string)PositionList[i].sl +"\n";
 
KlimMalgin:

这不是一个错误,而是一个警告,说明这一行包含了将数字转换为字符串 的隐式转换。在这种情况下,编译器会对转换发出警告,程序员必须决定这种转换是否是错误。

要消除这种警告,应进行显式转换:

谢谢,我们会试试的。
 

不知何故,它无法正常工作,头寸在获利时平仓,但没有任何相关信息。以下是日志

DS 0 TradeControl (EURUSD,M5) 22:36:06 收到交易事件
EJ 0 TradeControl (EURUSD,M5) 22:36:06 错误 # 4751
PN 0 TradeControl (EURUSD,M5) 22:36:06 收到 876874 订单处理
DH 0 TradeControl (EURUSD,M5) 22:36:08 收到交易事件
IS 0 TradeControl (EURUSD,M5) 22:36:08 错误 #4751 未找到 876874 订单!
HK 0 TradeControl (EURUSD,M5) 22:36:08 Error # 4751 state:4
RQ 0 TradeControl (EURUSD,M5) 22:36:08 0 订单已执行,继续交易
OD 0 TradeControl (EURUSD,M5) 22:36:08 876874 订单生成 交易 #947094
RS 0 TradeControl (EURUSD,M5) 22:36:08建仓 买入欧元兑美元
DQ 0 TradeControl (EURUSD,M5) 22:36:08 收到交易事件
DI 0 TradeControl (EURUSD,M5) 22:36:08 收到交易事件
KQ 0 TradeControl (EURUSD,M5) 22: 41:45 收到交易事件
KI 0 TradeControl (EURUSD,M5) 22:41:45 收到交易事件
KQ 0 TradeControl (EURUSD,M5) 22:41:45 收到交易事件

 
本文不包括 止盈和止损平仓。只考虑文章开头指出的事件。
 
KlimMalgin:
本文不包括止盈和止损平仓。只考虑了文章开头指出的事件。

我明白了,可惜没有考虑到这些。 我会等待类似文章的出现,或者您根据这篇文章对您的文章进行补充。有关 MT4 的类似文章,请参见https://www.mql5.com/ru/articles/1399。

  1. 开仓
    • "市场头寸
      • 买入
      • 卖出
    • 挂单
      • 买入限价
      • 卖出限价
      • 买入止损
      • 卖出止损
  2. 触发订单
    • 买入限价
    • 限价卖出
    • 买入止损
    • 卖出止损
  3. 平仓
    • "市场头寸
      • 买入
        • 止损
        • 获利
        • 手动(非止损或获利)
      • 卖出
        • 止损
        • 获利
        • 手动
    • 挂单(删除)
      • 买入限价
        • 到期时间
        • 手动
      • 卖出限价
        • 到期时间
        • 手动
      • 买入止损
        • 到期时间
        • 手动
      • 卖出止损
        • 到期时间
        • 手动
  4. 仓位修改
    • "市场头寸
      • 买入
        • 止损
        • 获利
      • 卖出
        • 止损
        • 获利
    • 挂单
      • 买入限价
        • 开盘价
        • 止损
        • 获利
        • 到期时间
      • 卖出限价
        • 开盘价
        • 止损
        • 获利
        • 到期时间
      • 买入止损
        • 开盘价
        • 止损
        • 获利
        • 到期时间
      • 卖出止损
        • 开盘价
        • 止损
        • 获利
        • 到期时间
События в МetaТrader 4
События в МetaТrader 4
  • 2006.05.29
  • Andrey Khatimlianskii
  • www.mql5.com
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
 

不处理HistorySelect()==false!这种情况很常见...

 
KlimMalgin:
本文不包括止盈和止损平仓。只考虑文章开头指出的事件。
你应该是徒劳的...我一直在等这篇文章,就是为了看一个止损处理的例子...
 

MQL5 提供事件处理模式、

为什么不提供事件的参数?

希望像OnChartEvent(....),提供事件 ID 和参数!!!!!!!!!!!!!

 
DxdCn:
类似于OnChartEvent(....),提供事件 ID 和参数!!!!!!!!!!!!!!

在文章 "在 MQL5 中创建用于交易的活动控制面板 "中 使用了OnChartEvent