引言

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

模块化交易系统

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

  • 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,不胜感激!

联系博主

如何编写一个模块化交易系统EA相关推荐

  1. 软件测试测试用例编写_不要先编写所有软件测试-只需编写一个

    软件测试测试用例编写 Test Driven Development (TDD) is sometimes described as "writing tests first". ...

  2. 如何用FFmpeg编写一个简单播放器详细步骤介绍

    如何用FFmpeg编写一个简单播放器详细步骤介绍(转载) FFMPEG是一个很好的库,可以用来创建视频应用或者生成特定的工具.FFMPEG几乎为你把所有的繁重工作都做了,比如解码.编码.复用和解复用. ...

  3. c语言用while实现输出加法口诀表,「加法口诀」C语言编写一个加法口诀表 - 金橙教程网...

    加法口诀 C语言编写一个加法口诀表 #include void main(){ int i,j; for(i=1;i<10;i++){ for(j=1;j<=i;j++){ printf( ...

  4. 7.9编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。

    //C程序设计第四版(谭浩强) //章节:第七章 用函数实现模块化程序设计 //题号:7.9 //题目:编写一个函数,由实参传来一个字符串,统计此字符串中字母.数字.空格和其他字符的个数, //在主函 ...

  5. 习题 1.5 请参照本章例题,编写一个C程序,输出以下信息:*****Very good!*****

    习题1.5 请参照本章例题,编写一个C程序,输出以下信息: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Very good! ...

  6. WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类

    在<WMI技术介绍和应用--VC开发WMI应用的基本步骤>文中,我们介绍了VC使用WMI技术的基本框架.本节我将讲解封装和实现一个用于半同步查询WMI的类.(转载请指明出于breaksof ...

  7. 编写一个最简单的.php,学习猿地- 说明 如果我们要编写一个简单的PHP脚本,需要学习哪些...

    说明 如果我们要编写一个简单的 PHP 脚本,需要学习哪些基础知识呢? PHP 基础 PHP 脚本可放置于文档中的任何位置. 标准 的 PHP 脚本以 <?php 开头,以 ?> 结尾: ...

  8. python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器

    原标题:Python3使用TCP编写一个简易的文件下载器 利用Python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造 ...

  9. c语言中如何设计和编写一个应用系统?

    C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如" ...

最新文章

  1. webGL的一些咨询--web3D
  2. 【对讲机的那点事】关于对讲机锂电池你了解多少?
  3. 大脑如何判断该睡觉了?可能是这80种蛋白说了算
  4. XenServer 6.5实战系列之三:Prepare for XenServer 6.5
  5. php应用编程,极客编程必备的五大PHP开发应用_PHP
  6. quot;luasql.mysqlquot;_解决mysqlquot;Access denied for user 'root'@'IP地址'quot;问题 - - ITeye博客...
  7. 技术架构演进|0到千万DAU,微淘如何走过?
  8. hbase hbck的参数使用
  9. HTML5学习笔记(二十六):JavaScript的错误处理
  10. HanLP1.5.2 -python使用介绍
  11. 局域网访问mysql失败_局域网中mysql连接失败
  12. 【案例】路由器怎么自动获取IPv6地址?
  13. 【C语言】猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想……
  14. BZOJ_1778_[Usaco2010 Hol]Dotp 驱逐猪猡_概率DP+高斯消元
  15. windows聚焦壁纸不更新_Win10系统下聚焦锁屏壁纸无法自动更换怎么解决
  16. Spark Submit任务提交流程
  17. 数值积分之龙贝格积分
  18. java:不支持发行版本5
  19. 【工具】fis3 - 语法教程(2)之定位资源
  20. Linux sed 正则匹配 修改 /etc/hosts 对应域名解析的ip

热门文章

  1. camera 土耳其语言下点击预览图无法显示
  2. 2022安全员-B证考试模拟100题及模拟考试
  3. 资深程序员冒死揭开软件潜规则:无法维护的代码
  4. VS2017下编译SOEM(Simle Open EtherCAT Master)
  5. 11.CSS3新增了哪些新特性?
  6. AVR16单片机--外部中断实验
  7. C和指针(Chapter 1 Chapter 2)
  8. 2014江苏省职称计算机考试大纲,江苏省高级职称计算机考试大纲及考试题库(含答案)...
  9. 张小龙打败张小龙:不提情怀,不谈焦虑
  10. 气动薄膜单座调节阀种类划分