Ehlers 重心振荡器(EhlersCenterOfGravity)

增量式、因果技术分析文档

摘要

EhlersCenterOfGravity 是 RTTA 对 John Ehlers 重心(CG)振荡器的流式实现。它在滚动价格窗口内测量价格路径的“平衡点”,再重新居中,使振荡器围绕零轴波动。前一个 CG 以 lag 返回,可用于触发式交叉信号。

更新 API

result = rtta.EhlersCenterOfGravity(window=10, fillna=True).update(price)
参数 默认值 含义
window 10 滚动回看期(最小为 2)
fillna True 若为 False,窗口填满前返回 NaN

update(...) 返回:

advance(price) 更新状态;last() 返回缓存的结果。

工作原理

把最近 \(n\) 个价格视作沿 K 线时间轴排列、质量相等的质点。Ehlers 为最新 K 线赋予权重 \(1\),为最旧 K 线赋予权重 \(n\)。因此,当市场下跌进入窗口时,一阶矩偏向较早价格;上涨进入窗口时,则偏向较新价格。用价格之和(而不是权重之和)作除数可得到原始 CG 坐标;再减去 \((n+1)/2\),便将零位居中到窗口的几何中点,使振荡器近似具有零均值。

由于 CG 在转折点处领先于普通平滑振荡器,Ehlers 常将 CG 与其滞后一根 K 线的值绘制在一起;RTTA 通过 lag 字段提供这个滞后值。

递推公式

令 \(n\) 为缓冲区中当前价格数量(\(n\le W\),其中 \(W\) 为构造函数窗口)。以 \(i=0\) 表示最新样本,以 \(i=n-1\) 表示最旧样本。权重 \(w_i=i+1\)(最新样本权重为 1,最旧样本权重为 \(n\)):

\[N_t = \sum_{i=0}^{n-1} w_i\, x_{t-i},\qquad D_t = \sum_{i=0}^{n-1} x_{t-i}\]
\[CG_t = \begin{cases} 0 & \text{若 } D_t = 0 \\ -\dfrac{N_t}{D_t} + \dfrac{n+1}{2} & \text{其他情况} \end{cases}\]
\[lag_t = CG_{t-1}\]

(首次更新之前,第一根 K 线的 lag 等于构造函数的初始值 0.0。)

fillna=False 且滚动缓冲区尚未填满时,两个字段均为 NaN。当 fillna=True 时,部分窗口按相同的权重约定使用现有的 \(n\) 个样本。

实现说明

参考资料