摘要
CDLDoji 是 RTTA 对十字线(Doji) K 线形态的流式检测器。十字线的实体
相对于整根 K 线全幅非常小,表示买卖双方力量平衡,即市场处于犹豫状态。
输出遵循 TA-Lib 约定:看涨匹配为 +100,看跌匹配为 -100,
形态未触发时为 0。
更新 API
value = rtta.CDLDoji(fillna=True).update(open, high, low, close)
# 看涨匹配为 +100;有方向的看跌匹配为 -100;未匹配为 0
batch = rtta.CDLDoji(fillna=True).batch(open, high, low, close)
update(...) 每次接收一根 OHLC K 线。advance(...) 使用相同输入但不返回
Python 值。在新实例上调用标量 batch(open, high, low, close),结果与依次
调用 update 一致。当 fillna=False 时,在至少取得 1 根 K 线前返回 NaN;
当 fillna=True(默认)时,未匹配的 K 线返回 0。
工作原理
K 线形态是根据柱体几何结构产生的短周期因果标签。它们本身并不预测收益,而是 标记犹豫、拒绝、吞没压力、多 K 线反转等结构,可与趋势、波动率或成交量背景 结合使用。
经典十字线出现在一段延伸行情之后时,可视为暂停或反转的候选信号;RTTA 只 检验几何结构。
引擎在每根 K 线上计算:
其中 body 为实体长度,range 为整根 K 线的全幅,upper 和 lower
分别为上影线和下影线。当 \(C_t\ge O_t\) 时为阳线,当 \(C_t<O_t\) 时为
阴线。K 线保存在一个短环形缓冲区中;年龄 \(0\) 表示最新 K 线,年龄
\(1\) 表示前一根,以此类推。
下文使用以下共享谓词:
\(\overline B\) 是环形缓冲区内最近最多五根 K 线的平均实体长度; \(\overline R\) 是同一窗口的平均全幅。
对于锤子线家族的形态,轻量级先行趋势判断会比较前收盘价与此前两个收盘价 的 SMA:
递推公式
将 \((O_t,H_t,L_t,C_t)\) 压入环形缓冲区。至少已有 1 根 K 线时即可 进行检测。
令 \(b\) 为最新 K 线。若 \(\mathrm{doji}(b)\) 成立,则输出 \(+100\), 否则输出 \(0\)。(本实现中的十字线不带方向。)
谓词不成立时输出 \(0\)。C++ 路径每次更新的复杂度为 \(O(1)\):使用固定大小 环形缓冲区,除少数几根 K 线外不重新扫描完整窗口。
实现说明
递推过程实现在 src/rtta/indicator.cpp 的 class CDLDoji 中,并建立在共享的
CdlHistory 和 cdl:: 几何辅助函数之上。阈值采用适合流式计算的几何规则,
并非对 TA-Lib 每一张平均实体回看表逐行移植。
