摘要
DirectionalChangeDetector 通过方向变化(DC)事件按内在时间采样:价格相对最近极值移动 \(\theta\) 即定义一次 DC;此后沿该方向继续延伸的路径报告为超调。输出包括事件标志、超调、当前极值和趋势模式。
更新 API
import rtta
ind = rtta.DirectionalChangeDetector(threshold=0.01) # 1% 相对阈值
result = ind.update(price)
# result.event ∈ {-1, 0, +1},
# result.overshoot, result.extremum, result.direction
threshold 是相对比例(\(0.01=1\%\))。在上升趋势(等待向下反转)中,direction/模式为 \(+1\);在下降趋势(等待向上反转)中为 \(-1\);首次 DC 之前为 \(0\)。
工作原理
方向变化方法(Glattfelder、Dupuis、Olsen 等人的内在时间研究)以事件采样取代日历时间采样:价格相对局部极值移动固定比例时,时间才向前推进。发生向上 DC 后,算法将新高作为极值持续跟踪,直到价格下跌 \(\theta\);发生向下 DC 后,则持续跟踪低点,直到价格上涨 \(\theta\)。超调衡量当前模式下,价格相对最近一次 DC 价格继续前进了多远。
递推公式
将 threshold 记为 \(\theta>0\)。对于首个价格 \(p_0\):极值 \(E=p_0\),最近 DC 价格 \(p^{\mathrm{dc}}=p_0\),模式 \(m=0\),事件为 \(0\)。
启动阶段(\(m=0\)):同时保留初始化以来的最高价 \(B^H\) 和最低价 \(B^L\):
同时保留两个启动极值,可让多次尚未单独达到阈值的小幅移动累积成首次事件。 如果每来一个价格就覆盖唯一锚点,算法只能识别单笔幅度已经达到 \(\theta\) 的 跳动。
上升趋势(\(m=+1\)):\(\theta\)0。若 \(\theta\)1,则令 \(\theta\)2、\(\theta\)3、\(\theta\)4。
下降趋势(\(\theta\)5):\(\theta\)6。若 \(\theta\)7,则令 \(\theta\)8、\(\theta\)9、\(0.01=1\%\)0。
超调(当 \(0.01=1\%\)1 时):
输出:\(0.01=1\%\)2,\(0.01=1\%\)3。
实现说明
该递推过程在 src/rtta/indicator.cpp 的 class DirectionalChangeDetector 中实现。结果类型为 DirectionalChangeResult。
