Backtrader回测图表买卖点标记位置错位异常问题排查求助
问题原因
你遇到的交易标记悬浮问题是多标的回测时Backtrader默认绘图逻辑导致的,和数据源无关:
- 你同时加载了SPY、QQQ、VOO三个不同价格区间的标的,默认绘图时所有标的的交易信号都会绑定到第一个主图的价格轴(即SPY的价格轴),QQQ、VOO的成交价格和SPY价格差较大,对应的买卖标记自然不会落在SPY的价格曲线上,看起来就像悬浮在空白区域。
- 你当前的绘图参数没有开启多标的分图展示,三个标的的K线没有分层独立显示,进一步加剧了信号错位的观感。
解决方案
方法1:开启多标的分图绘制
修改最后一行绘图代码,添加subplot=True参数让每个标的单独生成子图,自身的交易信号只会绘制在对应子图的价格轴上:
# 原代码:cerebro.plot(style='candlestick') # 修改为: cerebro.plot(style='candlestick', subplot=True, iplot=False)
方法2:仅保留指定标的的绘图权限
如果你不需要同时查看所有标的的回测绘图,可以在添加数据源时关闭其他标的的绘图开关,仅保留你需要查看的标的的绘图权限,避免其他标的的信号干扰:
stocks = ['SPY', 'QQQ', 'VOO'] for s in stocks: data = bt.feeds.YahooFinanceData(dataname = s, fromdate = datetime(2010, 1, 1), todate = datetime(2020, 1, 1)) # 示例:仅保留SPY的绘图权限,其余标的关闭绘图 if s != 'SPY': data.plotinfo.plot = False cerebro.adddata(data, name = s)
修改后运行即可看到买卖标记准确落在对应标的的K线价格位置,不会再出现悬浮错位的问题。
内容的提问来源于stack exchange,提问作者Deemo
相关产品推荐
相关产品推荐

