ARTICLE DETAIL

资讯详情

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

如何用 Python 回测 RSI 超卖反弹策略?(RSI<30 买入的真实收益与陷阱)

如何用 Python 回测 RSI 超卖反弹策略?(RSI<30 买入的真实收益与陷阱) 一句话回答用 AlphaFeed 取复权日线、算 Wilder RSI实现「RSI 跌破 30 买入、回升到阈值如 55卖出」的均值回归回测含手续费几十行就能跑出策略收益并和买入持有对比——真实数据会告诉你RSI 超卖买入常常跑输买入持有别把它当稳赚。为什么会有这个问题 / 传统做法的痛点RSI30 抄底是最流行的说法之一但很少有人真去回测。手工验证会卡在数据与复权需要足够长的前复权日线否则除权跳空污染 RSIRSI 口径要用 Wilder 平滑否则和软件不一致手续费/成交假设不含费的回测会高估收益对照基准没有和买入持有对比收益数字没有意义。AlphaFeed 提供长历史复权日线把数据这关解决掉。分步骤解决每步配可运行代码第 1 步Wilder RSIimportnumpyasnpdefwilder_rsi(close,n14):deltaclose.diff()gaindelta.clip(lower0.0)loss(-delta).clip(lower0.0)aggain.ewm(alpha1/n,adjustFalse).mean()alloss.ewm(alpha1/n,adjustFalse).mean()rsag/al.replace(0.0,np.nan)return100-100/(1rs)第 2 步回测「RSI30 买入RSI55 卖出」fromalphafeedimportAlphaFeed afAlphaFeed(api_keyyour-api-key)# 或 export ALPHAFEED_API_KEY 后 AlphaFeed()defrsi_backtest(symbol,count500,n14,buy_th30,sell_th55,fee0.0013):dfaf.klines.get(symbol,period1d,countcount,adjustforward,to_dataframeTrue).sort_values(trade_date).reset_index(dropTrue)df[rsi]wilder_rsi(df[close],n)pos,cash,shares,trades0,1.0,0.0,0foriinrange(n1,len(df)):r,pxdf[rsi].iloc[i],df[close].iloc[i]ifpos0andrbuy_th:# 超卖买入sharescash*(1-fee)/px;cash0.0;pos1;trades1elifpos1andrsell_th:# 回升卖出cashshares*px*(1-fee);shares0.0;pos0equitycashshares*df[close].iloc[-1]bhdf[close].iloc[-1]/df[close].iloc[n1]# 买入持有基准return{strategy_ret_%:round((equity-1)*100,1),buyhold_ret_%:round((bh-1)*100,1),trades:trades}策略参数参数含义本文取值buy_thRSI 买入阈值30超卖sell_thRSI 卖出阈值55回归fee单边手续费滑点0.0013约万 13nRSI 周期14第 3 步多标的对比诚实看结果forsin[600519.SH,000001.SZ,600036.SH]:print(s,rsi_backtest(s))实测约 500 个交易日、含手续费标的策略收益买入持有交易次数结论贵州茅台 600519.SH9.4%3.2%4策略略胜平安银行 000001.SZ14.8%35.2%4跑输买入持有招商银行 600036.SH5.1%52.1%3大幅跑输结论很清楚RSI 超卖策略只在震荡/弱势标的上偶尔占优遇到趋势上涨的标的会因为过早卖出、频繁空仓而大幅跑输买入持有。它不是稳赚公式。关键坑与注意事项超卖买入≠稳赚如上表趋势行情里 RSI 策略常跑输买入持有因为它在上涨中过早离场。单标的回测会过拟合只在一两只票上调出好看的参数没有意义应在一篮子标的、多时间段上验证稳健性。幸存者偏差用当前still上市的标的回测会高估收益退市股被排除了。做严肃回测要包含退市样本。含手续费才真实本文含约万 13 的单边成本不含费会明显高估交易越频繁影响越大。未来函数本文用当日 RSI 触发、当日收盘价成交是简化假设更严格应用次日开盘价成交避免用未来信息。常见问题FAQQ为什么 RSI 策略经常跑输买入持有ARSI 是均值回归思路在单边上涨行情里会过早卖出并踏空后续涨幅。它更适合震荡市牛市里通常不如躺着不动。Q把卖出阈值提高如 70会更好吗A可能改善也可能变差取决于标的和区间。切勿在单个标的历史上反复调参调到最优——那是过拟合样本外大概率失效。Q这个回测能直接用于实盘吗A不能。它是教学级简化当日成交、无涨跌停/停牌处理、未含冲击成本、未含幸存者偏差校正。实盘前需更严格的撮合、成本与样本处理。Q需要付费吗A单只标的 500 根日线在免费额度内即可试多标的/长历史批量需 Starter 及以上详见 AlphaFeed 定价页。小结回测 RSI 超卖反弹策略的价值恰恰在于用真实数据打破RSI30 抄底稳赚的幻觉含手续费后它在趋势标的上常大幅跑输买入持有。AlphaFeed 提供长历史复权日线让你几十行完成回测与对比——但请务必在多标的、多区间、含手续费与幸存者偏差校正下验证别被单标的的漂亮数字骗了。参考AlphaFeed Python SDK 文档https://docs.alphafeed.org/zh-Hans/sdk/python-quickstart
返回列表