扩展抛物线止损反转(ParabolicSARExtended)

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

摘要

ParabolicSARExtended 是 TA-Lib SAREXT 风格的抛物线止损反转指标。 它为多头和空头分别设置加速因子(AF),支持固定的起始 SAR,并可在反转时 加入以价格单位表示的偏移量。每次更新都返回当前的正数 SAR 价位。

更新 API

import rtta

ind = rtta.ParabolicSARExtended(
    start=0.0,
    offset_on_reverse=0.0,
    af_init_long=0.02,
    af_long=0.02,
    af_max_long=0.2,
    af_init_short=0.02,
    af_short=0.02,
    af_max_short=0.2,
)
sar = ind.update(high, low)

start != 0,就用该值初始化 SAR;否则用最初几根 K 线的最高价、最低价 确定初值。多头与空头各有独立的 AF 初值、增量和上限。

工作原理

Wilder 的抛物线 SAR 用一个随趋势加速、逐渐逼近极值点的止损位跟踪价格。 扩展版本允许多头和空头采用不同的加速速度。每根 K 线结束时,RTTA 会预先 计算下一根 K 线尚未限位的候选值:

\[q_{t+1}=SAR_t+AF_t(EP_t-SAR_t).\]

该候选值会用当前与前一根 K 线的区间限位。下一次更新时,新的最低价或最高价 先与已经准备好的 \(q_t\) 比较,之后才会为再下一根 K 线计算新的限位值;一旦 穿越就反转。若把穿越检查与限位的先后顺序颠倒,反转条件将无法触发。

递推公式

第 0 根 K 线:保存 \(H_0,L_0\)。若 start 非零就返回该值,否则返回 \(L_0\)。

第 1 根 K 线:令 \(u=H_1-H_0\)、\(d=L_0-L_1\)。仅当 \(d>0\) 且 \(d>u\) 时,初始方向为空头;两者相等时默认多头。若未指定 start, 上升时令 \(q_1=L_0\),下降时令 \(q_1=H_0\)。按相应方向初始化 EP 与 AF, 再按下列递推处理第 1 根 K 线。

方向向上时,若 \(L_t\le q_t\),则反转为空头并输出:

\[SAR_t=\max(EP_{t-1},H_{t-1},H_t)+offset, \quad EP_t=L_t, \quad AF_t=af\_init\_short.\]

随后计算下一根 K 线的空头候选值,并设置下限:

\[q_{t+1}=\max\!\left( SAR_t+AF_t(EP_t-SAR_t),\,H_{t-1},\,H_t \right).\]

若未反转,则输出 \(SAR_t=q_t\)。当 \(H_t\) 创出新高时更新 EP,并把多头 AF 增加到不超过 af_max_long,然后计算:

\[q_{t+1}=\min\!\left( SAR_t+AF_t(EP_t-SAR_t),\,L_{t-1},\,L_t \right).\]

方向向下时,若 \(H_t\ge q_t\),则反转为多头并输出:

\[SAR_t=\min(EP_{t-1},L_{t-1},L_t)-offset, \quad EP_t=H_t, \quad AF_t=af\_init\_long.\]

随后计算下一根 K 线的多头候选值,并设置上限:

\[q_{t+1}=\min\!\left( SAR_t+AF_t(EP_t-SAR_t),\,L_{t-1},\,L_t \right).\]

若未反转,则输出 \(SAR_t=q_t\)。当 \(L_t\) 创出新低时更新 EP,并把空头 AF 增加到不超过 af_max_short,然后计算:

\[q_{t+1}=\max\!\left( SAR_t+AF_t(EP_t-SAR_t),\,H_{t-1},\,H_t \right).\]

实现说明

递推过程在 src/rtta/indicator.cppclass ParabolicSARExtended 中实现。 offset_on_reverse 是加到价格上的绝对偏移量,并非百分比;无论趋势方向如何, 返回的标量 SAR 都保持为正数。

参考资料