点数图(PointAndFigure)

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

摘要

PointAndFigure 是流式点数图(P&F,也称 OX 图)状态:价格按 box_size 大小量化到格值,只有当价格向当前方向的反方向移动 reversal_boxes 格时,列才会反转。输出为当前格值价格、方向、本次逐笔绘制的格数以及反转标志。

更新 API

import rtta

ind = rtta.PointAndFigure(box_size=1.0, reversal_boxes=3)
result = ind.update(price)
# result.box_price, result.direction(+1 X / -1 O / 0 未设定),
# result.boxes(本次逐笔移动的有符号格数), result.reversal

初始格值为 \(\lfloor p_0/b\rfloor\cdot b\),其中 \(b=\)box_size

工作原理

点数图舍弃时间和格内噪声。上涨列(X,\(+1\))在价格触及上一格时继续向上延伸;下跌列(O,\(-1\))则向下延伸。只有价格从当前格值反向移动至少 \(R\) 格,列方向才会翻转,格值也会跳到向下取整量化后的目标。本类公开实时格值和每次逐笔的格数增量,而不是完整的列矩阵。

递推公式

令 \(b>0\) 为格值大小,\(R=\max(\mathrm{reversal\_boxes},1)\)。当前格值价格为 \(B\),方向为 \(d\)。

若 \(d\ge0\)(未设方向或上涨):

\[\text{当 } p_t \ge B + b \text{ 时重复:}\quad B \leftarrow B + b,\ \Delta \leftarrow \Delta + 1 \quad\text{(若 \(d=0\),令 \(d\leftarrow+1\))}.\]

若没有上涨(\(\Delta=0\))且 \(p_t\le B-Rb\):

\[B^\star = \lfloor p_t / b\rfloor b,\quad \Delta = -\max\bigl(1, (B - B^\star)/b\bigr),\quad B \leftarrow B^\star,\ d \leftarrow -1,\ \mathrm{reversal}\leftarrow 1.\]

若 \(d<0\)(下跌):

\[\text{当 } p_t \le B - b \text{ 时重复:}\quad B \leftarrow B - b,\ \Delta \leftarrow \Delta - 1.\]

若没有下跌且 \(p_t\ge B+Rb\):

\[B^\star = \lfloor p_t / b\rfloor b,\quad \Delta = \max\bigl(1, (B^\star - B)/b\bigr),\quad B \leftarrow B^\star,\ d \leftarrow +1,\ \mathrm{reversal}\leftarrow 1.\]

输出:\(\mathrm{box\_price}=B\)、\(\mathrm{boxes}=\Delta\)、\(\mathrm{direction}=d\)。

实现说明

该递推过程在 src/rtta/indicator.cppclass PointAndFigure 中实现。结果类型为 PointAndFigureResult

参考资料