逐笔游程 K 线生成器(RunBarGenerator)

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

摘要

RunBarGenerator 实现 López de Prado 逐笔游程 K 线的固定阈值版本。当前 K 线 内的买方逐笔数与卖方逐笔数分别累计;占优一侧达到 threshold 时结束 K 线。 中间即使出现相反方向的成交,也不会抹去此前一侧已经积累的证据。

更新 API

ind = rtta.RunBarGenerator(threshold=10)
result = ind.update(close)
result = ind.update(close, volume)  # 仍以逐笔数决定结束时机
# result.bar_open, bar_close, bar_high, bar_low, bar_volume,
# result.direction, result.complete, result.bars

单参数重载在 bar_volume 中报告占优一侧的逐笔数。成交量重载仍以占优一侧的 逐笔数判断是否完成,但 bar_volume 改为报告该侧累计的成交量。

工作原理

游程 K 线采样的是持续的订单流失衡,而不是必须首尾相接的同号“连胜”。例如 “买、卖、买、买”包含三笔买方成交和一笔卖方成交;其中的卖出不会让买方计数 归零。自适应版本通常估计预期 K 线长度与买方概率;RTTA 直接暴露其占优侧 统计量并使用固定阈值,便于调用方在外部估计或动态调整阈值。

递推公式

逐笔规则为:

\[b_t=\begin{cases} +1,&c_t>c_{t-1},\\ -1,&c_t<c_{t-1},\\ b_{t-1},&c_t=c_{t-1}. \end{cases}\]

在出现第一个非零方向之前,平盘逐笔仍不归类。对当前 K 线维护:

\[N_t^+=\sum 1_{\{b_i=+1\}},\qquad N_t^-=\sum 1_{\{b_i=-1\}},\qquad \theta_t=\max(N_t^+,N_t^-).\]

\[\theta_t\ge\max(\texttt{threshold},1)\]

时结束 K 线。若 \(N_t^+\ge N_t^-\),direction 为 \(+1\),否则为 \(-1\);completebars 均为 1。OHLC 覆盖分配给该 K 线的所有价格, 包括方向交替的逐笔。完成后,双方计数和 OHLC 为下一根 K 线重置,但上一价格 及最近的非零逐笔方向会跨越边界保留。

使用 update(close, volume) 时,还会以 \(v_t^+=\max(v_t,0)\) 分别累计 \(V^+\)、\(V^-\),仅用于把 \(\max(V^+,V^-)\) 报告为 bar_volume

实现说明

递推过程在 src/rtta/indicator.cppclass RunBarGenerator 中实现。第一个 观测只初始化价格和 OHLC,本身没有逐笔方向。

参考资料