CDLGravestoneDoji

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

摘要

CDLGravestoneDoji 是 RTTA 对墓碑十字线(Gravestone Doji) K 线形态 的流式检测器。该形态为带长上影线、几乎没有下影线的十字线,表示卖方拒绝了高价。

输出遵循 TA-Lib 约定:看涨匹配为 +100,看跌匹配为 -100, 形态未触发时为 0

更新 API

value = rtta.CDLGravestoneDoji(fillna=True).update(open, high, low, close)
# 看涨匹配为 +100;有方向的看跌匹配为 -100;未匹配为 0
batch = rtta.CDLGravestoneDoji(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 仅根据几何结构输出 \(-100\)。

引擎在每根 K 线上计算:

\[\begin{aligned} \mathrm{body}_t &= |C_t - O_t| \\ \mathrm{range}_t &= H_t - L_t \\ \mathrm{upper}_t &= H_t - \max(O_t, C_t) \\ \mathrm{lower}_t &= \min(O_t, C_t) - L_t \\ \mathrm{top}_t &= \max(O_t, C_t),\quad \mathrm{bot}_t = \min(O_t, C_t) \\ \mathrm{mid}_t &= \tfrac12(O_t + C_t) \end{aligned}\]

其中 body 为实体长度,range 为整根 K 线的全幅,upperlower 分别为上影线和下影线。当 \(C_t\ge O_t\) 时为阳线,当 \(C_t<O_t\) 时为 阴线。K 线保存在一个短环形缓冲区中;年龄 \(0\) 表示最新 K 线,年龄 \(1\) 表示前一根,以此类推。

下文使用以下共享谓词:

\[\begin{aligned} \mathrm{doji}(b) &\iff \mathrm{body} \le 0.1\cdot \mathrm{range} \quad(\text{或 range}=0) \\ \mathrm{longBody}(b,\overline B,f) &\iff \mathrm{body} \ge f\cdot \overline B \\ \mathrm{shortBody}(b,\overline B,f) &\iff \mathrm{body} \le f\cdot \overline B \\ \mathrm{longLower}(b,m) &\iff \mathrm{lower} \ge m\cdot \mathrm{body} \\ \mathrm{longUpper}(b,m) &\iff \mathrm{upper} \ge m\cdot \mathrm{body} \\ \mathrm{smallUpper}(b,f) &\iff \mathrm{upper} \le f\cdot \mathrm{range} \\ \mathrm{smallLower}(b,f) &\iff \mathrm{lower} \le f\cdot \mathrm{range} \\ \mathrm{engulf}(c,p) &\iff \mathrm{top}_c \ge \mathrm{top}_p \land \mathrm{bot}_c \le \mathrm{bot}_p \land \mathrm{body}_c > \mathrm{body}_p \\ \mathrm{inside}(c,p) &\iff \mathrm{top}_c \le \mathrm{top}_p \land \mathrm{bot}_c \ge \mathrm{bot}_p \end{aligned}\]

\(\overline B\) 是环形缓冲区内最近最多五根 K 线的平均实体长度; \(\overline R\) 是同一窗口的平均全幅。

对于锤子线家族的形态,轻量级先行趋势判断会比较前收盘价与此前两个收盘价 的 SMA:

\[\tau = \begin{cases} +1 & C_{-1} > 1.0001\cdot \mathrm{SMA}(C_{-1},C_{-2}) \\ -1 & C_{-1} < 0.9999\cdot \mathrm{SMA}(C_{-1},C_{-2}) \\ 0 & \text{其他情况} \end{cases}\]

递推公式

将 \((O_t,H_t,L_t,C_t)\) 压入环形缓冲区。至少已有 1 根 K 线时即可 进行检测。

满足下式时输出 \(-100\):

\[\mathrm{doji}(b) \land \mathrm{longUpper}(b,2) \land \mathrm{smallLower}(b,0.1).\]

谓词不成立时输出 \(0\)。C++ 路径每次更新的复杂度为 \(O(1)\):使用固定大小 环形缓冲区,除少数几根 K 线外不重新扫描完整窗口。

实现说明

递推过程实现在 src/rtta/indicator.cppclass CDLGravestoneDoji 中,并建立在共享的 CdlHistorycdl:: 几何辅助函数之上。阈值采用适合 流式计算的几何规则,并非对 TA-Lib 每一张平均实体回看表逐行移植。

参考资料