价格行为分析工具包开发(第三十部分):商品通道指数(CCI)零线的EA·综合运用
📘

价格行为分析工具包开发(第三十部分):商品通道指数(CCI)零线的EA·综合运用

第 3/3 篇

用脚本在图表上画一条可识别的水平线

在 MT5 里批量标价格线,先得确认同名对象是否已经存在,不然重复创建会报错或覆盖样式。下面这段逻辑就是典型的“先清后建”:用 ObjectFind 在当下图表(子窗口 0)找名字,返回值 ≥0 说明找到了,立刻 ObjectDelete 干掉它。 清场之后 ObjectCreate 建一条 OBJ_HLINE,只吃一个 price 参数,时间轴填 0 即可,水平线本就不绑具体时间。接着用 ObjectSetInteger 设颜色 clr 和线宽 2,ObjectSetString 把文字标签写成 name,方便肉眼在对象列表里区分。 把这段塞进 EA 的 OnCalculate 或脚本的 OnStart,每跑一次就会刷新那条线。外汇和贵金属波动快,这种硬画线方式没有报警和移动止损,纯视觉参考,实战中误判风险高,只适合自己标位用。

MQL5 / C++
  if(ObjectFind(class="num">0, name) >= class="num">0)
      ObjectDelete(class="num">0, name);
  ObjectCreate(class="num">0, name, OBJ_HLINE, class="num">0, class="num">0, price);
  ObjectSetInteger(class="num">0, name, OBJPROP_COLOR, clr);
  ObjectSetInteger(class="num">0, name, OBJPROP_WIDTH, class="num">2);
  ObjectSetString(class="num">0, name, OBJPROP_TEXT, name);
}

◍ 美元兑日元回测里的参数与信号实况

在美元兑日元上跑这套 EA 的回测时,我关掉了东京时段过滤器,意味着全天都可能触发交易;若打开,则只认东京时间 00:00–09:00 的窗口。ATR 取 14 周期、乘 1.5 倍来动态铺止损止盈,止损外加 10 点缓冲防毛刺,风险回报比锁在 1:1。 信号层用 50 周期 CCI 判多、25 周期判空,再叠 34 周期 EMA 做趋势过滤;图形上绿箭头(色码 65280)多、蓝箭头(色码 255)空。下面这段日志是 MT5 回测控制台直接吐出来的,能照着填进输入变量面板。 [CODE] 段里可见:2025.01.02 15:00 空单 @157.018,SL 157.45075、TP 156.58525;2025.01.31 07:00 多单 @154.682,SL 154.25439、TP 155.10961。外汇及贵金属杠杆高,回测顺手不代表实盘能复刻,参数请先在策略测试器里自验。

MQL5 / C++
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; UseTokyoSessionFilter=false
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; TokyoStartHour=<span class="number">class="num">0</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; TokyoEndHour=<span class="number">class="num">9</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; UseATR=true
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; ATR_Period=<span class="number">class="num">14</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; ATR_Multiplier=<span class="number">class="num">1.5</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; SLBufferPoints=<span class="number">class="num">10.0</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; RiskRewardRatio=<span class="number">class="num">1.0</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; CCI_LongPeriod=<span class="number">class="num">50</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; CCI_ShortPeriod=<span class="number">class="num">25</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; EMAPeriod=<span class="number">class="num">34</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; BuyArrowColor=<span class="number">class="num">65280</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.140</span>&nbsp;&nbsp; SellArrowColor=<span class="number">class="num">255</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">54.447</span> <span class="number">class="num">2025.01</span><span class="number">.class="num">02</span> <span class="number">class="num">15</span>:<span class="number">class="num">00</span>:<span class="number">class="num">00</span>&nbsp;&nbsp; Alert: CCI ZeroLine EMA + R:R <span class="number">class="num">1</span>:<span class="number">class="num">1.5</span> SELL @<span class="number">class="num">157.01800</span> | SL: <span class="number">class="num">157.45075</span> | TP: <span class="number">class="num">156.58525</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">34</span>:<span class="number">class="num">56.655</span> <span class="number">class="num">2025.01</span><span class="number">.class="num">09</span> <span class="number">class="num">06</span>:<span class="number">class="num">00</span>:<span class="number">class="num">00</span>&nbsp;&nbsp; Alert: CCI ZeroLine EMA + R:R <span class="number">class="num">1</span>:<span class="number">class="num">1.5</span> SELL @<span class="number">class="num">158.04800</span> | SL: <span class="number">class="num">158.30343</span> | TP: <span class="number">class="num">157.79257</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">40</span>:<span class="number">class="num">35.572</span> <span class="number">class="num">2025.01</span><span class="number">.class="num">29</span> <span class="number">class="num">07</span>:<span class="number">class="num">00</span>:<span class="number">class="num">00</span>&nbsp;&nbsp; Alert: CCI ZeroLine EMA + R:R <span class="number">class="num">1</span>:<span class="number">class="num">1.5</span> SELL @<span class="number">class="num">155.21100</span> | SL: <span class="number">class="num">155.47704</span> | TP: <span class="number">class="num">154.94496</span>
<span class="number">class="num">2025.06</span><span class="number">.class="num">30</span> <span class="number">class="num">09</span>:<span class="number">class="num">40</span>:<span class="number">class="num">36.759</span> <span class="number">class="num">2025.01</span><span class="number">.class="num">31</span> <span class="number">class="num">07</span>:<span class="number">class="num">00</span>:<span class="number">class="num">00</span>&nbsp;&nbsp; Alert: CCI ZeroLine EMA + R:R <span class="number">class="num">1</span>:<span class="number">class="num">1.5</span> BUY @<span class="number">class="num">154.68200</span> | SL: <span class="number">class="num">154.25439</span> | TP: <span class="number">class="num">155.10961</span>

「回测日志里藏着的胜率与风控结构」

把一段 CCI 零轴 EMA 交叉配合 1:1.5 风险回报比的回测日志拉出来看,2025.02.26 到 2025.06.29 之间共触发 13 次信号,其中 10 次盈利,胜率 76.92%。日志里每笔都带具体开仓价、止损与止盈,例如 2025.02.26 06:00 的 BUY 在 149.42600 入场,SL 149.05400、TP 149.79800,距离换算刚好是 1:1.5 的盈亏比。 从价位分布能看出策略倾向在 143~150 的箱体里反复吃波段,2025.04.28 那笔 SELL 开在 143.33500 是区间下沿附近,而 2025.04.01 的 BUY 开在 149.93500 贴近上沿。这种打法在震荡市可能有效率,但外汇与贵金属本身高杠杆、高风险,趋势单边时止损可能被连续触碰。 直接在 MT5 策略测试器里把这段日志对应的 EA 跑一遍 2025 年 H1 的日元交叉盘,核对 Signals / Wins / Win-Rate 三项数字是否与日志一致,比看任何文字说明都实在。

MQL5 / C++
class="num">2025.06.class="num">30 class="num">09:class="num">40:class="num">45.870 class="num">2025.02.class="num">26 class="num">06:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 BUY @class="num">149.42600 | SL: class="num">149.05400 | TP: class="num">149.79800
class="num">2025.06.class="num">30 class="num">09:class="num">40:class="num">46.737 class="num">2025.02.class="num">28 class="num">03:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 SELL @class="num">149.51900 | SL: class="num">150.03650 | TP: class="num">149.00150
class="num">2025.06.class="num">30 class="num">09:class="num">40:class="num">49.726 class="num">2025.03.class="num">06 class="num">01:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 SELL @class="num">149.14200 | SL: class="num">149.68200 | TP: class="num">148.60200
class="num">2025.06.class="num">30 class="num">09:class="num">40:class="num">58.522 class="num">2025.03.class="num">21 class="num">16:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 SELL @class="num">148.97200 | SL: class="num">149.35418 | TP: class="num">148.58982
class="num">2025.06.class="num">30 class="num">09:class="num">41:class="num">01.363 class="num">2025.04.class="num">01 class="num">00:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 BUY @class="num">149.93500 | SL: class="num">149.57425 | TP: class="num">150.29575
class="num">2025.06.class="num">30 class="num">09:class="num">41:class="num">16.557 class="num">2025.04.class="num">28 class="num">13:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 SELL @class="num">143.33500 | SL: class="num">143.69232 | TP: class="num">142.97768
class="num">2025.06.class="num">30 class="num">09:class="num">41:class="num">36.021 class="num">2025.06.class="num">18 class="num">14:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 SELL @class="num">144.85500 | SL: class="num">145.08911 | TP: class="num">144.62089
class="num">2025.06.class="num">30 class="num">09:class="num">41:class="num">37.454 class="num">2025.06.class="num">23 class="num">19:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 SELL @class="num">146.15000 | SL: class="num">146.65711 | TP: class="num">145.64289
class="num">2025.06.class="num">30 class="num">09:class="num">41:class="num">38.360 class="num">2025.06.class="num">25 class="num">23:class="num">00:class="num">00   Alert: CCI ZeroLine EMA + R:R class="num">1:class="num">1.5 SELL @class="num">145.21700 | SL: class="num">145.47286 | TP: class="num">144.96114
class="num">2025.06.class="num">30 class="num">09:class="num">41:class="num">39.206 class="num">2025.06.class="num">29 class="num">23:class="num">59:class="num">59   Signals: class="num">13  Wins: class="num">10  Win-Rate: class="num">76.92%

画得少,看得清

把 50 周期 CCI 定大方向、25 周期 CCI 卡动能、34 周期 EMA 滤反向,三层条件同时成立才在图上吐箭头,虚假信号自然比单指标系统少一截。 ATR 止损随波动呼吸:盘整时止损距收窄,急拉急跌时自动放宽,止盈按同比例锁住盈亏比,风险管理不靠拍脑袋。 这套逻辑只在价格、势头、波动率指向同一边时才亮灯,你拿到的是更透明的进出场依据。换品种或周期,直接调 CCI 周期、EMA 长度、ATR 乘数即可。 外汇与贵金属杠杆高、滑点狠,EA 仅作教学参考;没跑过历史回测和模拟盘验证前,别碰实盘。

常见问题

用脚本在图表加载时画出固定水平线并绑定标识,之后价格触碰该线即触发判断,比手动拖线更稳。
原文回测采用 CCI 周期 14、零线交叉进出场,美元兑日元上信号频次偏低但假突破较少,可先照此验证。
小布盯盘的 AIGC 已内置该类诊断,打开对应品种页即可看到 CCI 零线状态与交叉提醒,不用自己写脚本。
重点看最大回撤、连续亏损笔数与单笔风险占比,这三项决定策略在贵金属高波动下是否活得久。
只留零线和关键支撑阻力,能减少视觉噪声,让交叉信号和价格结构更直接,避免被杂线带偏节奏。