ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用 Python 计算抛物线 SAR(Parabolic SAR)指标?

如何用 Python 计算抛物线 SAR(Parabolic SAR)指标? 一句话回答抛物线 SARStop And Reverse是 Wilder 发明的趋势跟踪 移动止损指标价格在 SAR 之上为多头、跌破 SAR 翻空点位随趋势加速上移/下移。用 AlphaFeed 取回前复权日线的high/low/close后几十行 Python 就能实现原版 SAR含加速因子 AF不需要 TA-Lib。为什么会有这个问题 / 传统做法的痛点很多人想用 SAR 做「无脑移动止损」但直接调 TA-Lib 装不上、或不懂参数含义乱设。SAR 的两个坑一是必须用前复权价否则除权日的价格断层会触发假翻转二是加速因子 AF 的步长/上限直接决定灵敏度设错要么频繁翻转要么迟钝。把公式讲清、用干净数据实现就能稳定复现同花顺/通达信的 SAR。分步骤解决每步配可运行代码第 1 步取前复权日线fromalphafeedimportAlphaFeed afAlphaFeed()# 读取 ALPHAFEED_API_KEYdfaf.klines.get(600519.SH,period1d,count250,adjustforward,to_dataframeTrue)dfdf.sort_values(trade_date).reset_index(dropTrue)SAR 依赖每日最高/最低价务必用adjustforward前复权避免除权跳空造成的假信号。第 2 步实现 Wilder 原版 SARimportpandasaspddefparabolic_sar(high,low,af_step0.02,af_max0.20):highhigh.to_numpy();lowlow.to_numpy()nlen(high)sar[0.0]*n trend_upTrue# 初始假设多头afaf_step ephigh[0]# 极值点sar[0]low[0]foriinrange(1,n):prevsar[i-1]sar[i]prevaf*(ep-prev)iftrend_up:# 多头SAR 不得高于前两日最低价sar[i]min(sar[i],low[i-1],low[max(i-2,0)])ifhigh[i]ep:ephigh[i];afmin(afaf_step,af_max)iflow[i]sar[i]:# 跌破 SAR → 翻空trend_upFalse;sar[i]ep;eplow[i];afaf_stepelse:# 空头SAR 不得低于前两日最高价sar[i]max(sar[i],high[i-1],high[max(i-2,0)])iflow[i]ep:eplow[i];afmin(afaf_step,af_max)ifhigh[i]sar[i]:# 升破 SAR → 翻多trend_upTrue;sar[i]ep;ephigh[i];afaf_stepreturnpd.Series(sar,indexrange(n))df[SAR]parabolic_sar(df[high],df[low])df[pos](df[close]df[SAR]).map({True:多,False:空})print(df[[trade_date,close,SAR,pos]].tail(8).to_string(indexFalse))第 3 步识别翻转点买卖信号df[flip]df[pos].ne(df[pos].shift())signalsdf[df[flip]df.index.to_series().gt(0)]print(signals[[trade_date,close,SAR,pos]].tail(5).to_string(indexFalse))# pos 由空变多 SAR 买点由多变空 SAR 卖点/止损点参数与含义参数含义常用值说明af_step加速因子步长0.02每创新高/新低增加的加速度af_max加速因子上限0.20越大越贴近价格、越易翻转SAR停损转向点位—多头在价下方、空头在价上方EP极值点—当前趋势内的最高/最低价第 4 步把 SAR 当移动止损lastdf.iloc[-1]iflast[pos]多:print(f持多移动止损位 {last[SAR]:.2f}跌破即止损/翻空)else:print(f持空/观望SAR 压力位 {last[SAR]:.2f}升破即翻多)关键坑与注意事项必须用前复权价SAR 对高低点敏感未复权价在除权日会假翻转。AF 上限决定灵敏度af_max调大 → 止损更贴近、翻转更频繁震荡市易被反复打脸。SAR 适合趋势市、不适合震荡市横盘阶段会频繁翻转产生大量假信号需配合 ADX 等趋势强度过滤。首根 SAR 是初始化近似序列开头的方向假设会影响前几根样本要足够长建议 ≥60 根让其收敛。与不同软件的细微差异各家对「前两日极值约束」「初始 EP」处理略有出入数值可能相差极小趋势判断一致即可。常见问题FAQQSAR 的默认参数 0.02 / 0.20 能改吗A能。步长/上限越大越灵敏短线可试 0.02/0.20波动大的品种可调小上限减少假翻转。建议先用默认值。QSAR 和移动平均止损哪个好ASAR 会随趋势加速收紧止损、锁定利润更快均线止损更平滑、假信号少但反应慢。可结合使用。Q为什么震荡时 SAR 老是亏ASAR 是趋势工具震荡市天然不适用。可用 ADX20 过滤掉无趋势阶段再用 SAR。Q需要付费吗A单只历史日线有免费额度批量算多只 SARklines.batch配合universes需 Starter 及以上。详见定价页。小结抛物线 SAR 的本质是「随趋势加速移动的停损转向点」。实现不难关键在两点用前复权价保证高低点真实理解 AF 步长/上限对灵敏度的影响。用 AlphaFeed 取回前复权日线几十行 Python 就能复现原版 SAR用于趋势判断与移动止损。参考AlphaFeed Python SDK 文档https://docs.alphafeed.org/zh-Hans/sdk/python-quickstartAlphaFeed 官网https://alphafeed.org/
返回列表