📘

用 MQL5 给 EA 自动出文档

◍ 用 MQL5 给 EA 自动出文档

在 MT5 里写 EA 或指标,最烦的不是写逻辑,而是事后补注释和接口说明。MQL5 的文档自动生成机制能直接把源码里的结构化注释抽成可读文档,省掉手工维护的麻烦。 这套机制依赖源码中的特定注释块,编译器在构建时识别并输出。社区里一篇 2014-05-19 发布的示例帖,截至统计时已积累 3589 次浏览、19 条讨论,说明自动文档在实盘开发者中确有刚需。 对交易者而言,价值不在「好看」,而在复盘时能快速翻出某个函数的参数约束和返回值含义,不用再对着 mq5 源码逐行猜。开 MT5 随便建个脚本,写上标准注释块编译一次,就能验证这套输出是否够用。

用 Doxygen 给 MQL5 类库补文档

写过 Java 的人大多用过 JavaDocs:把半结构化注释塞进代码,再抽成可跳转的帮助文件。C++ 侧也有类似工具,微软 SandCastle 和 Doxygen 是主流两款。 MQL5 本质是 C++ 的一个定制子集,类库稍大就容易长到难以徒手维护。我拿 Doxygen 直接喂 MQL5 源码做了一轮试验,生成导航式帮助文档的过程很顺。 实测结果:从 MQL5 抽出的 Doxygen 文档对厘清复杂类库结构有明显帮助,尤其当你准备在 MT5 里堆自己的指标或 EA 框架时,先跑一遍文档生成比硬读头文件更省时间。外汇与贵金属杠杆交易高风险,任何工具都只降低认知成本、不消除亏损概率。

「用 Doxygen 给 MQL5 工程自动出文档」

Doxygen 是开源的自动文档生成器,基于 GPL 协议免费使用,源码公开。它最基础的用法就是扫描整个项目里的 C++ 或 MQL5 代码,把类层次、成员函数结构整理成可导航的 HTML 帮助文件,对 MT5 里那种动辄上百个 .mqh/.mq5 的面向对象代码集尤其省事。 实际配置几乎零门槛:下载 Windows 版(写原文时最新为 1.6.1)后,除了把文件类型加上 *.mqh 和 *.mq5、勾选生成 HTML 帮助,基本不用改别的。向导四步点完,再到 expert 设置里补上 mq 扩展名就能跑,配置文件会被它自己存读。 要让文档有料,得在代码里写结构化注释。以 CiMACD::Create() 为例,MetaQuotes 原生双斜杠注释里的 INPUT:/OUTPUT: 只需改成三条斜杠 /// 加 \param / \return,Doxygen 就能抽出参数和返回值。下面这段就是改前改后的对照片段。 MT5 分发的 MQL5 文件夹里超过 100 个相关文件,最适合拿 Doxygen 整成类树和成员列表。有个坑:复制完删掉 MQL5/Files/MQL5/Include/Strings/string.mqh,不然它会卡住解析。附带的 MetaquotesCommentsToDoxygen.mq5 脚本能批量转注释,跑完生成的帮助质量相当能打。 外汇与贵金属 EA 开发属高风险活动,自动化文档仅降低维护成本,不预示任何策略收益。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Create indicator "Moving Averages Convergence-Divergence".        |
class=class="str">"cmt">//| INPUT:  symbol           -chart symbol,                          |
class=class="str">"cmt">//|         period           -chart period,                         |
class=class="str">"cmt">//|         fast_ema_period -period fast EMA,                       |
class=class="str">"cmt">//|         slow_ema_period -period slow EMA,                       |
class=class="str">"cmt">//|         signal_period   -period signal MA,                      |
class=class="str">"cmt">//|         applied          -what used.                            |
class=class="str">"cmt">//| OUTPUT: true-if successful, false otherwise.                    |
class=class="str">"cmt">//| REMARK: no.                                                      |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CiMACD::Create(class="type">class="kw">string symbol,
ENUM_TIMEFRAMES period,
class="type">int fast_ema_period,
class="type">int slow_ema_period,
class="type">int signal_period,
class="type">int applied)
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">/// Create indicator "Moving Averages Convergence-Divergence".
class=class="str">"cmt">/// \param  symbol           -chart symbol,
class=class="str">"cmt">/// \param  period           -chart period,
class=class="str">"cmt">/// \param  fast_ema_period -period fast EMA,

◍ CiMACD 的 Create 参数到底吃什么

在 MT5 里用 CiMACD 类做指标封装时,Create 方法是入口。它要求依次传入品种、周期、快线 EMA 周期、慢线 EMA 周期、信号 MA 周期,以及价格应用类型,返回布尔值表示初始化是否成功。 慢线 EMA 周期通常要大于快线,比如快线 12、慢线 26 是经典搭配;信号周期常见取 9。若传错周期或品种字符串无效,Create 会返回 false,后续调用缓冲区读取就会直接报错。 外汇与贵金属杠杆高、波动剧烈,指标初始化失败可能让你漏掉关键信号,实盘前务必在策略测试器里先跑一次确认返回 true。

MQL5 / C++
class="type">bool CiMACD::Create(class="type">class="kw">string symbol,
ENUM_TIMEFRAMES period,
class="type">int fast_ema_period,
class="type">int slow_ema_period,
class="type">int signal_period,
class="type">int applied)

把 Doxygen 产物压成 MT5 同款 chm

Doxygen 跑完只会丢出一堆 html 和图片,核心入口是 index.html,本质是个微型站点,发给别人看极不方便。 微软早年做的 HTML Help Workshop 正好解决这个麻烦:它能把这类 html 文件集编译成单个 .chm,而 MetaTrader 5 自带帮助就是这种格式,意味着你写的 MQL5 文档能和终端帮助无缝同壳。 从微软站下 htmlhelp.exe 装好之后,Doxygen 配置里勾选 HTML Help 输出,会顺带生成 index.hhp。用 HTML Help Workshop 打开这个文件直接编译,就得到 index.chm。 编译完把 index.chm 拷进 MetaTrader 5/Help 目录并改名,图 16、17 展示了落点位置。外汇与贵金属自动化策略文档化过程同样涉及终端文件操作,误改目录有破坏帮助系统的风险,动手前建议备份原 Help 文件夹。 用 Doxygen 加 HTML Help Workshop 这套链路,后续给任何 MQL5 库写说明都只需改注释,重跑即出可分发帮助,比手搓文档省事太多。

「把这条线请下神坛」

这套随 build 229(2009-12-08)分发的 Doxygen 附件,本质只是把 MQL5 注释改写成 C++ 风格让文档工具能跑通。四个文件各司其职:编译好的 chm 丢进 MetaTrader 5/Help 直接翻查;MetaquotesCommentsToDoxygen.mq5 放 Scripts 里预处理注释;MQL5codeList.txt 进 Files 做文件清单;Doxygen 配置留在 MQL5 根目录。 真实踩坑集中在编码与版本:2019 年有用户按文操作生成不了类列表,而 2021 年有人确认把 INPUT_ENCODING 设为 windows-1251 后链路才通。配置里这一行就是映射关键。

MQL5 / C++
EXTENSION_MAPPING              = mq5=C++ mqh=C++
外汇与贵金属自动化文档化虽能降低维护成本,但 MT5 环境迭代快、配置易失效,高风险在于旧方案随时在新 build 哑火。开 MT5 把附件解到对应目录,先跑一遍 mq5 脚本验证你本地编码,比盲信教程更实在。

MQL5 / C++
EXTENSION_MAPPING              = mq5=C++ mqh=C++

常见问题

用 Doxygen 按规范在代码里写 /// 注释,跑一遍就能出 HTML 或 chm,不用手敲文档。
Create 吃的是指标句柄相关的 symbol、period 和快慢信号周期,照类库头文件填即可避免初始化失败。
小布能读取你的工程结构并基于注释生成摘要文档,你只需补关键参数说明,省去手动排版。
用 HTML Help Workshop 把 Doxygen 的 HTML 产物编译成 chm,注意目录和索引文件要配对。
注释不规范时 Doxygen 会漏符号,出的文档缺方法;先把类库接口注释写齐再跑工具。