AccumulativeSwingIndex

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

摘要

AccumulativeSwingIndex 是 RTTA 对 Wilder 摆动指数进行流式累加的实现。 每根 K 线贡献一个 SI 增量,指标返回持续累积的总和,用来跟踪全部历史中的净方向性 摆动压力。

更新 API

value = rtta.AccumulativeSwingIndex(limit=0.5).update(open, high, low, close)

第一根 K 线用于初始化前一根 OHLC,并返回 0.0。此后每根 K 线都会将当前的 Swing Index 增量加入累计值。

工作原理

Welles Wilder 的 Swing Index 衡量一根 K 线的开盘与收盘结构中,有多少相对于 前一根 K 线构成了真正的摆动,并用一个限制值(预期的最大价格变化)进行缩放。 Accumulative Swing Index(ASI)就是这些增量的不定期累加,类似于 AD 或 OBV 累加每根 K 线的贡献。ASI 持续上升表示净看涨摆动结构,持续下降则表示净看跌 摆动结构。

RTTA 使用一个内部 SwingIndex 成员和一个标量累加器组合实现 ASI。

递推公式

令 \(O_t,H_t,L_t,C_t\) 分别为开盘价、最高价、最低价和收盘价;令 \(\ell\) 为 limit(默认 \(0.5\))。第一根 K 线只初始化前一根 OHLC,并令 \(ASI_0=0\)。

定义相对于前一根 K 线的绝对跳空幅度:

\[\begin{aligned} A_t &= |H_t - C_{t-1}|, & B_t &= |L_t - C_{t-1}|, \\ C'_t &= |H_t - L_{t-1}|, & D_t &= |C_{t-1} - O_{t-1}| \end{aligned}\]

根据 \(A_t,B_t,C'_t\) 中的最大者选择分母因子 \(R_t\):

\[R_t = \begin{cases} A_t - \tfrac12 B_t + \tfrac14 D_t, & A_t \ge B_t \;\text{且}\; A_t \ge C'_t \\ B_t - \tfrac12 A_t + \tfrac14 D_t, & B_t \ge A_t \;\text{且}\; B_t \ge C'_t \\ C'_t + \tfrac14 D_t, & \text{其他情况} \end{cases}\]
\[K_t = \max(A_t, B_t)\]
\[N_t = (C_t - C_{t-1}) + \tfrac12(C_t - O_t) + \tfrac14(C_{t-1} - O_{t-1})\]
\[SI_t = \frac{50\, N_t\, K_t}{\ell\, R_t} \quad\text{(安全除法;分母为零时结果为 \(0\))}\]
\[ASI_t = ASI_{t-1} + SI_t\]

返回值为 \(ASI_t\)。

实现说明

递推过程实现在 src/rtta/indicator.cppclass AccumulativeSwingIndex 中。该类持有一个 SwingIndex 成员,并累加 它的标量输出。另请参阅 SwingIndex

参考资料