摘要
CDL3Inside 是 RTTA 对三内升/三内降 K 线形态的流式检测器。
该形态先出现孕线组合,随后一根确认 K 线的收盘价越过第一根 K 线的开盘价。
输出遵循 TA-Lib 约定:看涨匹配为 +100,看跌匹配为 -100,
形态未触发时为 0。
更新 API
value = rtta.CDL3Inside(fillna=True).update(open, high, low, close)
# 看涨匹配为 +100;有方向的看跌匹配为 -100;未匹配为 0
batch = rtta.CDL3Inside(fillna=True).batch(open, high, low, close)
update(...) 每次接收一根 OHLC K 线。advance(...) 使用相同输入但不返回
Python 值。在新实例上调用标量 batch(open, high, low, close),结果与依次
调用 update 一致。当 fillna=False 时,在至少取得 3 根 K 线前返回 NaN;
当 fillna=True(默认)时,未匹配的 K 线返回 0。
工作原理
K 线形态是根据柱体几何结构产生的短周期因果标签。它们本身并不预测收益,而是 标记犹豫、拒绝、吞没压力、多 K 线反转等结构,可与趋势、波动率或成交量背景 结合使用。
引擎在每根 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)\) 压入环形缓冲区。只有其中至少已有 3 根 K 线 时才进行检测。
- \(+100\):\(a\) 为阴线,\(b\) 为阳线,满足 \(\mathrm{inside}(b,a)\),\(c\) 为阳线,且 \(C_c>O_a\)。
- \(-100\):\(a\) 为阳线,\(b\) 为阴线且位于内部,\(c\) 为阴线,且 \(C_c<O_a\)。
谓词不成立时输出 \(0\)。C++ 路径每次更新的复杂度为 \(O(1)\):使用固定大小 环形缓冲区,除少数几根 K 线外不重新扫描完整窗口。
实现说明
递推过程实现在 src/rtta/indicator.cpp 的 class CDL3Inside 中,并建立在
共享的 CdlHistory 和 cdl:: 几何辅助函数之上。阈值采用适合流式计算的
几何规则,并非对 TA-Lib 每一张平均实体回看表逐行移植。
