ZigZagSwingDetector

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

摘要

ZigZagSwingDetector 根据收盘价识别摆动,过滤小于百分比阈值的变动,并输出已确认拐点。

更新 API

result = rtta.ZigZagSwingDetector().update(close)

update(...) 每次接收一个 close;只推进状态时可调用 advance(...)

工作原理

检测器维护当前摆动方向、活动极值和最后确认的拐点。只有价格从活动极值反向移动达到设定百分比后,才确认新拐点,从而过滤较小波动。

递推公式

\[\tau=\frac{percent\_change}{100}\]
\[direction_t=\begin{cases}1,&direction_{t-1}=0\text{ 且 }close_t\ge start(1+\tau)\\-1,&direction_{t-1}=0\text{ 且 }close_t\le start(1-\tau)\\-1,&direction_{t-1}=1\text{ 且 }close_t\le extreme_{t-1}(1-\tau)\\1,&direction_{t-1}=-1\text{ 且 }close_t\ge extreme_{t-1}(1+\tau)\\direction_{t-1},&\text{否则}\end{cases}\]
\[extreme_t=\begin{cases}\max(extreme_{t-1},close_t),&direction_t=1\\\min(extreme_{t-1},close_t),&direction_t=-1\\close_t\text{(若其离 }start\text{ 更远)},&direction_t=0\end{cases}\]

方向翻转时,此前极值成为已确认拐点,当前收盘价则作为新一轮极值搜索的起点。

update(...) 返回含 valuedirectionpivotpivot_index 字段的结果结构体。

实现说明

递推公式在 src/rtta/indicator.cppclass ZigZagSwingDetector 中实现。

参考资料