首页 / 交易学院 / 小布知识库 / MQL5 向导:不写代码也能生成 EA 交易程序
MQL5 向导:不写代码也能生成 EA 交易程序
🧩

MQL5 向导:不写代码也能生成 EA 交易程序

MQL5 编程 难度 · 入门 2013 10 分钟阅读
MQL5 向导标准类库EA 生成

一、MQL5 向导是什么、能生成什么

MQL5 向导是 MetaEditor 内置的代码生成器(Ctrl+N → Expert Advisor (generate))。它把标准库里预定义好的“信号模块 / 追踪模块 / 资金管理模块”拼装成一个完整 EA 框架,全程勾选即可,无需手写代码。标准库自带:约 20 个信号类(CSignalMA、CSignalMACD、CSignalRSI…)、4 个追踪类(CTrailingNone/FixedPips/MA/PSAR)、5 个资金类(CMoneyFixedLot/FixedMargin/FixedRisk/None/SizeOptimized)。

二、向导的模块架构

生成的 EA 以 CExpert 为主对象,内部持有 CExpertSignal*(信号)、CExpertTrailing*(追踪)、CExpertMoney*(资金)三个基类指针,外加 CSymbolInfo/CAccountInfo/CPositionInfo 等。OnInit 里把具体模块挂上去:

CExpert ExtExpert;
CExpertSignal* signal = new CExpertSignal;
ExtExpert.InitSignal(signal);
CSignalMA *ma = new CSignalMA;
signal.AddFilter(ma);            // 加均线信号作过滤器
CTrailingFixedPips *tr = new CTrailingFixedPips;
ExtExpert.InitTrailing(tr);      // 固定点数追踪止损
CMoneyFixedLot *mm = new CMoneyFixedLot;
ExtExpert.InitMoney(mm);         // 固定手数资金管理
ExtExpert.ValidationSettings(); ExtExpert.InitIndicators();

三、零代码生成 EA 的步骤

启动向导后:填 Name/Author;信号步选 CSignalMA 并 Add(参数可点图标在“输入变量/固定值”间切换);追踪步选 CTrailingFixedPips 设 StopLevel=30、ProfitLevel=50;资金步选 CMoneyFixedLot 设 Lots=0.1。点 Finish 即生成 TestExpert.mq5,可直接编译并在策略测试器回测/优化。

四、自定义模块的开发接口

向导只能组合符合标准库接口的模块。若要自己写信号,需继承 CExpertSignal(或相关基类),实现必要的虚函数(如 CheckOpenLong/CheckOpenShort 返回信号强度、CheckMoney 决定手数),并严格遵循向导要求的文件结构,放在 MQL5\Include\Expert\ 下对应子目录,向导才能识别并组合。参数在向导里以灰色图标固定则直接写死,蓝色图标则成为 input 变量可优化。

五、局限与实战建议

向导无法在 GUI 里设计复杂条件(多指标逻辑运算、非标准平仓规则、跨品种对冲),这类仍需手写或订购定制模块。建议:先用向导快速原型化、用策略测试器优化参数;单独开发/订购一个模块的成本低于整个 EA,且模块可在多个机器人间复用。

✦ 给不想编程的人
不想写代码时,优先用向导生成基础 EA(比如 MA 信号 + 固定点数追踪 + 固定手数),再用策略测试器优化参数。等你需要更精细的风控或特殊信号时,再基于 Expert.mqh 源码研读 CExpert 的方法做修改,比从零写省力得多。

六、向导的三步流程

MQL5 向导把「写 EA」变成填表:第一步选信号源(内置信号库或你自己的信号模块),第二步选资金管理(固定手数或百分比),第三步选追踪止损与止盈。三步点完,向导生成一份可编译运行的完整 EA 代码。

对不会编程的人,这是零门槛上手自动化的入口;对会写的人,它是「可运行的脚手架」,省去搭框架的时间,直接在生成代码上改逻辑。

七、生成的代码架构

向导生成的 EA 继承自 CExpertAdvisor,信号、资金管理、追踪止损各是一个可替换模块,主循环在 OnTick 里依次调用。读懂这个结构,你就明白「改哪一层影响什么」。

class CExpertAdvisor : public CExpert
{
   // 信号、资金、追踪三大模块作为成员
   void OnTick()
   {
      if(m_signal.CheckOpen()) m_trade.Open(...);
   }
};
✦ 脚手架不是黑盒
向导代码是人能读的。先读懂它再改,比从零写快得多;别把它当不可碰的黑盒。

八、向导的边界与何时该手写

向导适合标准信号加标准风控的组合,但一旦你要非标准逻辑(如多品种对冲、自定义订单流、复杂状态机),它生成的结构就不够用了,必须手写或大幅改造。

判断标准:能用向导表达的策略就用向导起头;表达不了就手写。硬用向导改出四不像,不如直接写类继承,反而更清晰。

九、小结

✦ 小结
MQL5 向导用「信号加资金加追踪」三步生成可运行 EA,本质是给你一份继承 CExpertAdvisor 的脚手架。会编程的拿它当起点改逻辑,不会的零门槛上手。超出标准组合的逻辑就手写,别把向导改得四不像。

常见问题

能编译运行,但默认组合(如单 MA 信号)通常只是基础策略。建议先在新品种/周期上回测优化参数,确认胜率和回撤可接受再考虑实盘,别直接拿默认参数上。
向导只识别符合标准库接口规范的模块:必须继承 CExpertSignal(或对应基类),放在 MQL5\Include\Expert\Signal 等正确子目录,且实现向导要求的虚函数。结构不对、路径不对,向导都扫不到。
简单策略、快速验证想法 → 向导。复杂逻辑(多指标组合、特殊平仓、跨品种对冲、神经网络信号)→ 手写或订购定制模块。向导生成的 CExpert 框架本身质量很高,即使手写也常基于它扩展。