MQL5酷客宝典 - 滑动通道编程·综合运用
📘

MQL5酷客宝典 - 滑动通道编程·综合运用

第 3/3 篇

◍ 中间柱数不足时极值点的取舍逻辑

分形识别里有个硬约束:两个极值之间必须夹够 m_bars_between 根柱,否则这个点大概率只是噪音。代码里先用 bars_between<m_bars_between 判门槛,不够就进入跳过或删除分支。 若前一点被标记为相关(RELEVANT_EXTREMUM_PREV),且系统已初始化(m_is_init 为真),直接 continue 忽略本轮;未初始化时则把当前点标为待删,并把记录时间切到 time1。日志会打出“当前点将会被忽略”加具体时间。 反过来,当最新点是相关点:已初始化则删掉前一点(to_delete_frac=true);未初始化则把待处理时间换成 time2。若 curr_frac_date 落到 time2 上,同样 continue 不入库。 真正执行删除只在 to_delete_frac 为真时触发,调用 this.Delete(curr_fractal_num-1);失败会打印“从集合中删除最新点出错”并返回 -1。外汇与贵金属波动快,这类中间柱阈值设太小,回测里容易把毛刺当结构,实盘高风险,建议开 MT5 把 m_bars_between 从 2 调到 3~5 对比分形密度。

MQL5 / C++
if(bars_between<m_bars_between)
  {
   class="type">bool to_delete_frac=class="kw">false;
   if(m_to_log)
      Print("中间柱数不足,会跳过一个点。");
   if(m_rel_frac==RELEVANT_EXTREMUM_PREV)
     {
       class="type">class="kw">datetime curr_frac_date=time2;
       if(m_is_init)
         {
          class="kw">continue;
         }
       else
         {
          to_delete_frac=true;
          curr_frac_date=time1;
         }
       if(m_to_log)
         {
          PrintFormat("当前点将会被忽略: %s",
               TimeToString(curr_frac_date));
         }
     }
   else
     {
       class="type">class="kw">datetime curr_frac_date=time1;
       if(m_is_init)
         {
          to_delete_frac=true;
         }
       else
         {
          curr_frac_date=time2;
         }
       if(m_to_log)
         PrintFormat("之前点被跳过: %s",
              TimeToString(curr_frac_date));
       if(curr_frac_date==time2)
         class="kw">continue;
     }
   if(to_delete_frac)
     {
       if(!this.Delete(curr_fractal_num-class="num">1))
         {
          Print("从集合中删除最新点出错!");
          class="kw">return -class="num">1;
         }
     }
  }

「用替换分形给通道降噪」

EA 名叫 ChannelsPlotter,纯为验证滑动通道绘制逻辑而生,跑出来的效果见图15:横盘没趋势时分形频繁触发,通道边缘会不停闪。 根源在于普通分形对邻近极值太敏感,柱数差一点就重画。直接从代码库借 X-bars 分形指标替掉原版,极值点间隔被强制拉大,闪烁明显收敛。 实测把分形窗口设成 23 根柱,通道形态如文内图16,干扰比默认分形少一大截。 结论很直接:判定分形时允许的邻近柱数越少,图表上通道毛刺越多;外汇和贵金属波动杂讯大,这类通道只适合辅助判区间,高风险品种别单独拿来猜突破。

文件落位与后续信号方向

等距通道的编程框架借用了 Victor Barishpoltz 的滑动通道思路,本篇只解决了通道绘制与分形锚点替换,交易信号留到后续文章再拆。 工程文件建议丢进项目目录 <data folder>\MQL5\Projects\ChannelsPlotter,分形指标 X-bars_Fractals 的源码必须放在 <data folder>\MQL5\Indicators 并先编译,否则通道取点会直接报错。 随附四个文件里有 channelsplotter.mq5(5.34 KB)和 x-bars_fractals.mq5(11.58 KB),在 MT5 里按上述路径放好就能加载验证通道重绘逻辑。外汇与贵金属波动剧烈,这类通道仅作概率参考,实盘前务必用历史数据自测。

常见问题

中间柱数不足时优先保留离通道端点最近的有效分形,放弃孤立极值,避免通道被单根毛刺带偏。
把连续小幅波动里的次级分形用相邻主分形替代,只留方向性拐点,通道线会更干净、信号更少假突破。
小布可读取品种周期自动落位通道参数文件,并依据最近替换分形方向给出偏多或偏空的预警,不用你手动记路径。
检查文件是否落在对应品种周期目录下,确认命名含周期标识,重新切一次周期通常能强制刷新读取。
大概率是将替换阈值设得过小,放宽相邻分形最小跨度后,反向信号频率会明显下降。