用 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 开发属高风险活动,自动化文档仅降低维护成本,不预示任何策略收益。
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。
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 后链路才通。配置里这一行就是映射关键。
EXTENSION_MAPPING = mq5=C++ mqh=C++
EXTENSION_MAPPING = mq5=C++ mqh=C++