我那个EMA交叉EA,写了两百多行,逻辑乱七八糟的,想加个均线过滤都得翻半天代码。后来实在受不了了,开始学MQL5的类库开发,折腾了快一个月,总算有点眉目了。今天想跟大伙聊聊我试过的几种方案,纯属个人经验,大佬们轻喷哈。
先说我最开始用的那种,就是全塞在一个文件里,一个EA一个脚本一个指标全堆一起。好处是写起来快,不用想结构,改起来也方便,毕竟都在眼皮底下。但坏处是真要命,代码一多,找个变量得翻半天,而且想复用某段逻辑?对不起,复制粘贴吧,改一处漏一处,经常搞出莫名其妙的bug。我那个EMA交叉EA就是这么废掉的,后来想加个布林带过滤,改了上下午,结果把开仓逻辑搞崩了,直接实盘亏了一波,血泪教训啊。
后来听群友说,得用include文件,把常用的函数拆出去。这个思路我觉得挺好,就把均线计算、仓位管理这些单独写成了.mqh文件。用#include引进来,代码确实清爽多了。踩过的坑是,include文件里的函数不能直接调用EA的输入参数,得通过参数传进去,一开始没搞懂,老报错“变量未定义”,查了半天才发现是作用域问题。还有,每个include文件最好只放一个功能模块,别学我,图省事把好几个功能塞一个文件里,结果还是乱。
再后来,我开始琢磨真正的类库,就是那种用class关键字定义的。这才是正路啊,把指标、订单、风险管理都封装成类,用起来那叫一个舒服。比如我写了个CMyTrend类,里面封装了均线计算和趋势判断,外部调用就几行代码,清爽得很。而且继承和多态这两个东西,真的能省好多事,我写了个基础订单类,然后衍生出市价单、挂单、止损单这几个子类,逻辑清晰多了。不过这个坑也最多,构造函数和析构函数的执行时机一定要搞清楚,不然对象没初始化就调用方法,直接程序崩溃。还有,类里面的成员变量记得用m_前缀,不然跟全局变量撞名了,查错能查到怀疑人生。
最后我还试了用MQL5自带的
现在我的习惯是,小工具用include文件,大EA用class封装,如果逻辑特别复杂,就考虑CExpertAdvisor框架。反正我目前是这么干的,感觉比之前瞎写强太多了。对了,还有个特别重要的坑,编译的时候一定要开“允许DLL导入”和“允许算法交易”,不然你怎么测都没反应,我还以为是代码写错了呢,查了半天才发现是权限问题,真的无语。
写类库这事吧,一开始确实觉得麻烦,但坚持下来,好处真的多。代码好维护了,思路也清晰了,而且很多功能都能复用,再开新EA的时候,直接拿以前的类来用,省了老多时间。我现在就在整理自己的类库,打算把常用的都收集起来,以后写EA就快多了。不知道大家平时写EA都是怎么组织代码的?有没有什么更好的方案或者好用的库推荐?求指点,谢谢大家!
先说我最开始用的那种,就是全塞在一个文件里,一个EA一个脚本一个指标全堆一起。好处是写起来快,不用想结构,改起来也方便,毕竟都在眼皮底下。但坏处是真要命,代码一多,找个变量得翻半天,而且想复用某段逻辑?对不起,复制粘贴吧,改一处漏一处,经常搞出莫名其妙的bug。我那个EMA交叉EA就是这么废掉的,后来想加个布林带过滤,改了上下午,结果把开仓逻辑搞崩了,直接实盘亏了一波,血泪教训啊。
后来听群友说,得用include文件,把常用的函数拆出去。这个思路我觉得挺好,就把均线计算、仓位管理这些单独写成了.mqh文件。用#include引进来,代码确实清爽多了。踩过的坑是,include文件里的函数不能直接调用EA的输入参数,得通过参数传进去,一开始没搞懂,老报错“变量未定义”,查了半天才发现是作用域问题。还有,每个include文件最好只放一个功能模块,别学我,图省事把好几个功能塞一个文件里,结果还是乱。
再后来,我开始琢磨真正的类库,就是那种用class关键字定义的。这才是正路啊,把指标、订单、风险管理都封装成类,用起来那叫一个舒服。比如我写了个CMyTrend类,里面封装了均线计算和趋势判断,外部调用就几行代码,清爽得很。而且继承和多态这两个东西,真的能省好多事,我写了个基础订单类,然后衍生出市价单、挂单、止损单这几个子类,逻辑清晰多了。不过这个坑也最多,构造函数和析构函数的执行时机一定要搞清楚,不然对象没初始化就调用方法,直接程序崩溃。还有,类里面的成员变量记得用m_前缀,不然跟全局变量撞名了,查错能查到怀疑人生。
最后我还试了用MQL5自带的
- CExpertAdvisor框架,这玩意是官方推荐的,功能是真的全,信号、仓位、资金管理都帮你分好了。
- 但学习成本也高,光看文档就看了一整天,而且它的回调机制跟咱们平时写EA的思路不太一样,得适应一阵子。
现在我的习惯是,小工具用include文件,大EA用class封装,如果逻辑特别复杂,就考虑CExpertAdvisor框架。反正我目前是这么干的,感觉比之前瞎写强太多了。对了,还有个特别重要的坑,编译的时候一定要开“允许DLL导入”和“允许算法交易”,不然你怎么测都没反应,我还以为是代码写错了呢,查了半天才发现是权限问题,真的无语。
写类库这事吧,一开始确实觉得麻烦,但坚持下来,好处真的多。代码好维护了,思路也清晰了,而且很多功能都能复用,再开新EA的时候,直接拿以前的类来用,省了老多时间。我现在就在整理自己的类库,打算把常用的都收集起来,以后写EA就快多了。不知道大家平时写EA都是怎么组织代码的?有没有什么更好的方案或者好用的库推荐?求指点,谢谢大家!
