挤压动量(SqueezeMomentum)

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

摘要

SqueezeMomentum 是 RTTA 对 TTM 风格挤压指标的流式实现:当布林带位于肯特纳通道之内(波动率压缩)时给出二元标志,并计算价格相对于混合中线的线性回归动量。

更新 API

result = rtta.SqueezeMomentum(window=20, bb_mult=2.0, kc_mult=1.5, fillna=True).update(close, high, low)
参数 默认值 含义
window 20 BB、ATR/KC、Donchian 和线性回归的回看期
bb_mult 2.0 布林带标准差乘数
kc_mult 1.5 肯特纳通道 ATR 乘数
fillna True 若为 False,取得 window 个样本前返回 NaN

update(...) 返回:

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

工作原理

挤压开启是指布林带(均值 ± \(k\cdot\sigma\))完全位于肯特纳通道(均值 ± \(m\cdot ATR\))之内。这是经典 TTM Squeeze 的压缩状态:已实现波动率(BB)相对于平均真实波幅宽度(KC)较低。当挤压“释放”(on 从 1 变为 0)时,积蓄的能量常以方向性价格移动释放。

动量衡量收盘价相对于一个基准的位置:该基准取 Donchian 中点与收盘价 SMA 的平均值,再进行滚动线性回归(与 LazyBear / TTM 风格柱状图相同)。正动量偏向向上释放,负动量偏向向下释放。

递推公式

令 \(n\) 为窗口长度,\(k=\texttt{bb\_mult}\),\(m=\texttt{kc\_mult}\)。

收盘价的滚动均值与总体标准差:

\[\mu_t = \operatorname{mean}_n(c),\qquad \sigma_t = \operatorname{stddev}_n(c)\]
\[BB^{hi}_t = \mu_t + k\sigma_t,\qquad BB^{lo}_t = \mu_t - k\sigma_t\]

使用长度为 \(n\) 的 ATR:

\[KC^{hi}_t = \mu_t + m\cdot ATR_t,\qquad KC^{lo}_t = \mu_t - m\cdot ATR_t\]

挤压标志:

\[on_t = \begin{cases} 1 & BB^{lo}_t > KC^{lo}_t \;\land\; BB^{hi}_t < KC^{hi}_t \\ 0 & \text{其他情况} \end{cases}\]

Donchian 中点与混合基准:

\[HH_t = \max_{0\le i<n} h_{t-i},\qquad LL_t = \min_{0\le i<n} l_{t-i}\]
\[basis_t = \frac{1}{2}\left(\frac{HH_t+LL_t}{2} + \mu_t\right)\]
\[\delta_t = c_t - basis_t\]
\[momentum_t = \operatorname{LinReg}_n(\delta)_t\]

(通过 LinearRegressionCore 取得当前 K 线处的回归拟合值。)

fillna=False 且取得的样本少于 \(n\) 个时,两个字段均为 NaN。

实现说明

参考资料