相对波动率指数(RelativeVolatilityIndex)

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

摘要

RelativeVolatilityIndex 是 RTTA 对 Donald Dorsey 相对波动率指数(RVI)的流式实现。它以 RSI 风格的方式平滑收盘价上行和下行标准差,并输出 RVI 的 EMA 信号线。

更新 API

result = rtta.RelativeVolatilityIndex(
    std_window=10, smooth_window=14, fillna=True
).update(close)
# result.rvi, result.signal

fillna=False 时,在取得 std_window + smooth_window 个样本之前,两个字段均为 NaN

工作原理

Dorsey 的 RVI 外形类似 RSI,但把价格变化替换为收盘价滚动标准差:收盘上涨时归入上行侧,收盘下跌时归入下行侧。因此,它衡量波动率的方向,而不是价格的方向:RVI 较高,表示波动更多发生在上涨过程中;较低则表示更多发生在下跌过程中。RTTA 还用相同长度的 EMA 平滑 RVI,作为信号线。

递推公式

令 \(c_t\) 为收盘价,\(n_s\) 为 std_window(默认 \(10\)),\(n_e\) 为 smooth_window(默认 \(14\))。

\[\sigma_t = \operatorname{StdDev}_{n_s}(c_t)\]

把波动率分配到上行/下行两侧(第一根 K 线贡献为零):

\[(u_t, d_t) = \begin{cases} (\sigma_t,\, 0), & c_t > c_{t-1} \\ (0,\, \sigma_t), & c_t < c_{t-1} \\ (0.5\,\sigma_t,\, 0.5\,\sigma_t), & c_t = c_{t-1} \end{cases}\]
\[U_t = \operatorname{EMA}_{n_e}(u_t), \qquad D_t = \operatorname{EMA}_{n_e}(d_t)\]
\[RVI_t = 100 \cdot \frac{U_t}{U_t + D_t} \quad\text{(安全除法)}\]
\[\operatorname{signal}_t = \operatorname{EMA}_{n_e}(RVI_t)\]

内部 StdDev 和 EMA 使用 fillna=True。外层预热计数为 \(n_s+n_e\)。

实现说明

该递推过程在 src/rtta/indicator.cppclass RelativeVolatilityIndex 中实现,成员包括 std_up_down_signal_。结果字段为 rvisignal。另请参阅对 RVI 作回归的 Inertia

参考资料