摘要
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 线尚未限位的候选值:
该候选值会用当前与前一根 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\),则反转为空头并输出:
随后计算下一根 K 线的空头候选值,并设置下限:
若未反转,则输出 \(SAR_t=q_t\)。当 \(H_t\) 创出新高时更新 EP,并把多头
AF 增加到不超过 af_max_long,然后计算:
方向向下时,若 \(H_t\ge q_t\),则反转为多头并输出:
随后计算下一根 K 线的多头候选值,并设置上限:
若未反转,则输出 \(SAR_t=q_t\)。当 \(L_t\) 创出新低时更新 EP,并把空头
AF 增加到不超过 af_max_short,然后计算:
实现说明
递推过程在 src/rtta/indicator.cpp 的 class ParabolicSARExtended 中实现。
offset_on_reverse 是加到价格上的绝对偏移量,并非百分比;无论趋势方向如何,
返回的标量 SAR 都保持为正数。
