几何移动平均(GeometricMovingAverage)

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

摘要

GeometricMovingAverage 是 RTTA 对近期价格几何平均数的流式实现:先对价格取对数并计算 SMA,再取指数。价格必须为严格正的有限值;无效样本返回 NaN,且不会推进可用的对数均值状态。

更新 API

value = rtta.GeometricMovingAverage(window=14, fillna=True).update(price)

内部对数 SMA 会继承 fillnaprice 为非正值或非有限值时,本次调用返回 NaN

工作原理

正价格 \(x_1,\ldots,x_n\) 的几何平均数为:

\[\Bigl(\prod_{i=1}^{n} x_i\Bigr)^{1/n} = \exp\!\Bigl(\tfrac1n\sum_{i=1}^{n}\log x_i\Bigr).\]

它是乘法型(类似收益率)过程的自然平滑器:幅度相等的百分比涨跌对几何平均数产生对称影响,而算术 SMA 对绝对点数赋予相同权重。RTTA 实现恒等式 \(\operatorname{GMA}=\exp(\operatorname{SMA}(\log price))\)。

递推公式

令 \(x_t\) 为输入价格,\(n\) 为 window(默认 \(14\))。

若 \(x_t\le0\) 或 \(x_t\) 不是有限值,则返回 NaN。否则:

\[\ell_t = \log x_t, \qquad L_t = \operatorname{SMA}_n(\ell_t)\]
\[GMA_t = \exp(L_t)\]

若内部 SMA 返回 NaNfillna=False 时的预热阶段),输出也是 NaN

实现说明

该递推过程在 src/rtta/indicator.cppclass GeometricMovingAverage 中实现。成员 logs_ 是一个以 std::log(price) 为输入的 SMA

参考资料