开发轴心均值振荡器:一款新颖的累积移动平均线指标(基础篇)
📘

开发轴心均值振荡器:一款新颖的累积移动平均线指标(基础篇)

第 1/2 篇

用累积均值做振荡器的出发点

市面上的振荡器大多基于固定窗口的均线或价格区间,但累积移动平均(CMA)会把从图表起点到当前的所有样本一视同仁地平均,对近期波动的响应更钝、却更能暴露价格相对长期中枢的偏离。把这种偏离做成振荡器,等于给盘手一个看「价格是否在历史均值附近打转」的另类镜头。 这篇指标把 CMA 作为轴心,再派生出轴心均值(PM)与轴心均值振荡器(PMO)两条线。原始文章发布于 2019 年 11 月 26 日,在 MT5 社区拿到约 5600 次查看,说明这类冷门均值思路在实盘群体里并非无人问津。 外汇与贵金属杠杆高、滑点无常,任何均值类工具都只是概率参考,不能当作方向保证。开 MT5 自建一个 CMA 缓冲区,先跑 EURUSD 日线看看偏离带宽度,比直接信信号更靠谱。

「振荡器家族的超前与滞后陷阱」

振荡器是围绕中心线在预设区间内上下摆动的指标子类,常用于生成交易事件,比如中心线穿越或阈值突破。MACD、RSI、CCI 都在此列,但机制不同:有的抓价格变化率(动量)预判反转,有的靠均值找主趋势。 按瞬时价差公式算的振荡器多表现为超前,如 RSI、CCI;基于均值的则滞后。MACD 取两条均线之差,同时带点超前和滞后,画成直方图后,中心交叉和发散一眼可辨。 行情切换时,超前类容易刷假信号,滞后类常因快速发散把风险回报比带歪。经验上,同时盯多个振荡器拿独立确认更稳,单一信号在外盘高杠杆贵金属/外汇里很容易翻车。 本文要引的“轴心均值振荡器”直接从累积移动平均(CMA)派生,想给振荡器图谱补点新东西,后面会拆它的算法和挂 MT5 的写法。

◍ 把均线推到无限样本看 CMA

普通移动平均(MA)按 FIFO 丢弃窗口外最旧数据,本质上是固定长度缓冲区的有限统计。若把缓冲区扩到无限大,对截至当前所有样本做平均,就得到累积移动平均(CMA)。它不再丢历史,只靠递推就能算,不用真去开无限内存。 实际写 MT5 指标时,CMA 只需维护两个变量:累计和、计数 N。每来一根新柱,sum += price,N++,CMA = sum / N。横盘阶段价格会围绕这条线来回,因为它有一半是可预测的递推分量。 下面这段是 CMA 的递推写法,注意 N 从 1 开始,首值直接等于首价。CMA 后续会作为 PMO 的底层构件,所以先把它跑通。

MQL5 / C++
class="type">class="kw">double cma_sum = class="num">0.0;
class="type">int cma_count = class="num">0;
class=class="str">"cmt">// 每根新柱调用
class="type">class="kw">double UpdateCMA(class="type">class="kw">double price) {
   cma_sum += price;
   cma_count++;
   class="kw">return cma_sum / cma_count;
}

把 PM 和 PMO 拆成可计算的两条线

PM 是对价格与 CMA 距离的常规化读数,公式上等于「最后期限值 ÷ CMA」得到的指数。它本质是一把尺:PM=1.0035 意味着现价仅高出 CMA 0.35%,PM=1 则代表二者完全重合,没有扩散。 对每个数据点都能重复算 PM,所以任意时间序列都能转成 PM 信号流。PMO 则定义为两条 PM 信号均线的差——也就是「扩散之差」。在 MT5 里你可以用收盘价 PM 均线减开盘价 PM 均线,得到一条和 MACD 形态类似但底层不同的曲线。 和 MACD 比,PMO 不碰原始价格、只跑在 PM 之上,且本文只用简单均线而非指数均线。外汇与贵金属波动剧烈,PMO 仅提供概率倾向,实盘前请在策略测试器用历史数据验证其滞后特征。

常见问题

常规振荡器在趋势起步时容易滞后、在震荡里又容易假超前;用累积均值把样本推到全程,可让价格相对长期重心偏离更直观,减少被短期噪声带偏。
它基于无限样本CMA而非固定窗口,重心更新极慢,单边中偏离会持续而不过早回归,过滤掉很多短窗指标的自转假信号。
可以,小布能按你打开的品种页实时算出PM与PMO两条线并标出历史分位,省去自己手算累积均值。
PM=价格减累积均值,PMO=PM再除以累积均值并缩放;分开存数组,每根K线先更CMA再算PM,最后算PMO即可。
会偏慢,适合看日线级以上重心偏离;做小周期建议拿PMO当过滤而非触发,别单独凭它开仓。