迁移至 MQL5 Algo Forge(第 3 部分):在您自己的项目中使用外部仓库·综合运用
把自定义 ATR 挂进策略类里的实操路径
在 MT5 里做策略集成,第一步往往是给策略类加一个指标句柄字段。我们在 SimpleCandlesStrategy.mqh 的 protected 区放了一个 m_iATRHandle,专门存 SmartATR 指标的句柄,后续取数都靠它。 构造函数里直接调 iCustom() 把指标加载进来。注意路径写法:以 "Shared Projects/SmartATR/SmartATR.ex5" 开头,扩展名写不写都行,但写上能少踩坑。参数里 m_periodATR 是初始周期,后面跟着自适应开关、最小 7 / 最大 28 周期、成交量加权关、新闻加权关、2.0 倍波动率报警阈值、弹窗报警关。 Shared Projects 有个容易懵的点:编译产物不在仓库目录。终端数据根下的 MQL5/Shared Projects 只放源码,.ex5 会跑到 MQL5/Indicators/Shared Projects/SmartATR/ 去。所以从 SmartATR.mq5 编出来的文件实际在 MQL5/Indicators/Shared Projects/SmartATR/SmartATR.ex5,iCustom 引用的路径得相对 MQL5/Indicators 来写。 编完 SimpleCandles.mq5 丢进策略测试器,日志若显示指标成功初始化,就说明挂接通了。外汇和贵金属波动大、杠杆高,集成完先跑无下单的验证单,别急着上实盘。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Trading strategy using unidirectional candlesticks | class=class="str">"cmt">//+------------------------------------------------------------------+ class CSimpleCandlesStrategy : class="kw">public CVirtualStrategy { class="kw">protected: class=class="str">"cmt">//... class="type">int m_iATRHandle; class=class="str">"cmt">// SmartATR indicator handle class=class="str">"cmt">//... }; class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Constructor | class=class="str">"cmt">//+------------------------------------------------------------------+ CSimpleCandlesStrategy::CSimpleCandlesStrategy(class="type">class="kw">string p_params) { class=class="str">"cmt">// Read the parameters from the initialization class="type">class="kw">string class=class="str">"cmt">// ... if(IsValid()) { class=class="str">"cmt">// Load the SmartATR indicator m_iATRHandle = iCustom( m_symbol, m_timeframe, "Shared Projects/SmartATR/SmartATR.ex5", class=class="str">"cmt">// Indicator parameters m_periodATR, class=class="str">"cmt">// Initial ATR period(used for first calculation, adaptively changes) false, class=class="str">"cmt">// Enable adaptive period(dynamic lookback) class="num">7, class=class="str">"cmt">// Minimum ATR period(adaptive mode) class="num">28, class=class="str">"cmt">// Maximum ATR period(adaptive mode) false, class=class="str">"cmt">// Weight True Range by volume false, class=class="str">"cmt">// Weight True Range by economic news events(MT5 Calendar) class="num">2.0, class=class="str">"cmt">// Multiplier: alert if ATR exceeds this factor of average false class=class="str">"cmt">// Enable pop-up & sound alerts on high volatility
「空小节无内容可析」
当前传入的技术小节仅包含一段不完整的 MQL5 代码片段收尾括号与注释,缺乏可验证的技术描述与上下文逻辑。 因原文未提供完整函数体或指标计算说明,无法提炼价格行为结论,亦不能编造回测数据或参数效果。 若需落地验证,请补全该节原文中缺失的数组赋值、循环条件与指标缓冲区定义后再交本引擎处理。
◍ 记住这一条就够了
把第三方仓库派生成自己的副本再改,是绕开 MetaEditor 不能直接拉外部库这条限制的最实用路径。SmartATR 接进 Simple Candles 并跑在实时策略里,已经证明这套流程在现有 MT5 环境下就能落地,不用等官方更新。 剩下那些界面上的别扭——比如分支命名受限、没有原生第三方访问——只是操作成本,不是拦路石。下次开项目前先 fork 再写,比在单一自包含仓库里硬凑要省事得多。