如何编写一个模块化交易系统EA

引言

本人之前在用MQL4开发EA交易系统的时候,总是习惯性的将所有的代码逻辑都放在一个.mql4文件里,新写一个EA的时候,也是直接把老的EA直接复制粘贴过来再改。这样做在当时觉得很快很爽,但是当我写了很多EA的时候就发现问题来了。第一,重复的样板代码太多,有时一个EA的某个功能改了,你去修改另一个EA的时候,发现这个功能还得再改一遍,像这种情况,完全可以把一些通用的功能抽取出来,让所有EA都去依赖它就可以了,这样只用修改一处即可。第二,把所有的逻辑都堆到一个文件中,也不符合软件设计中的单一职责原则,随着功能的增加,文件变得越来越冗长,不仅业务逻辑显得混乱,而且定位问题也会比较耗时。基于这些问题,我想要是有个模块化的交易系统就好了,这样在写一个新的EA时,很多常用的功能可以直接依赖一下,只需完成核心的交易策略部分就可以了。起初我是想在网上找找看有没有现成的,但是找了一段时间并没有找到比较满意的,当然在这过程也有些文章给了我一些灵感。既然没有现成的轮子,那就自己造一个吧,下面就是我的这个模块化交易系统的简单介绍,文末附有项目源码链接。

模块化交易系统

这是一个基于MQL4/MQL5的模块化交易系统模板。它包含多个常用模块,如交易系统控制中心,资金管理模块,订单管理模块…等等。模块化设计可以减少系统的耦合度,并且提高代码的可重用性。避免将所有代码放入一个文件中,可以使我们更专注于编写主要业务逻辑。下面是本交易系统的几大主要模块:
project

  • TradeSystemController

    交易系统控制中心,这是整个交易系统的主要逻辑部分。该模块有一个抽象类CTradeSystemController,定义了几个最基本的虚函数,需要你自己去实现它们。主要包含处理原始信号数据,并结合其他数据进行综合分析,最后输出可执行的交易信号。如果你想自定义交易策略,可以重写这里的逻辑。

  • MoneyManager

    资金管理模块,主要负责与资金有关的所有操作,例如检查余额,计算开平仓手数等。

  • OrderManager

    订单管理模块,主要提供与订单有关的几种常规操作,例如开仓,平仓等。

  • SignalEngine

    信号引擎模块,该模块主要包含一个名为ISignalEngine的接口,你需要去实现它,并在实现类里封装原始信号的计算逻辑。值得一提的是,你可以同时实现多个信号引擎,比如一个使用MACD的信号,一个使用马丁策略信号,然后在自定义的TradeSystemController实现类里,综合这两个信号,最终输出一个可执行信号。

  • EnvChecker

    环境检查模块,主要负责在交易之前检查运行环境,防止在诸如图表数据错误的情况下错误操作。只有当运行环境一切正常时才允许交易。

如何使用

  1. 如何编译

    在BuildConfig.mqh文件中,通过注释和非注释来选择你要编译的交易系统类型,然后编译即可。

  2. 自定义信号引擎

    自定义一个或多个类实现ISignalEngine接口,封装一个或多个指标的某种信号的计算逻辑。
    可以参考这个项目里三个已实现的信号引擎实例。

  3. 自定义控制器

    自定义一个类实现CTradeSystemController抽象类,在这个类里,你需要通过一个或多个信号引擎来获取原始信号数据,然后综合处理它们,最后输出可执行的交易信号。然后在控制器工厂类CTSControllerFactory中添加上你的自定义控制器,并在BuildConfig文件中添加上相应的预处理指令。

最近更新

  • Version 2.0

    1. 重构了整个项目架构,使不同系统之间耦合度更低,两行代码就可以编译出不同的交易系统。
    2. 提供了一个新的交易系统,使用了马丁格尔策略。
      在这里插入图片描述

敬请期待

  • ExitManager

    未来还会添加新的功能模块,比如可以设置或移动止损和止盈,暂且统称为退出管理模块。

免责声明

需要注意的是,本交易系统仅供学习或参考之用,不能保证在交易实战中一定能稳定盈利。如果你一定要将其用于真仓交易,那么出现任何后果,我们概不负责。谢谢!

点击查看项目源码
如果觉得有用,请随手一个star,不胜感激!

联系博主

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/woshiwangbiao/article/details/106414608