如何在Backtrader中获取主绘图轴以添加自定义绘图元素?
在Backtrader中获取绘图轴添加自定义元素
两种获取绘图轴的方法
1. 策略类内部直接获取
在你的策略逻辑里(比如处理交易的notify_trade方法,或者自定义的交易记录方法中),可以通过数据源对象的plotinfo.plotaxes属性拿到对应的绘图轴。如果只用了一个数据源,用self.data0或者self.datas[0]都可以:
修改后的代码示例:
import matplotlib.patches as patches import backtrader as bt # 假设在策略类的某个方法内执行 ax = self.data0.plotinfo.plotaxes # 获取主K线图的绘图轴 width = (bt.num2date(self.sell_dt) - bt.num2date(self.buy_dt)).total_seconds() / (60*60*24) height = self.sell_price - self.buy_price rect = patches.Rectangle((self.buy_dt, self.buy_price), width, height, linewidth=1, edgecolor='yellow', facecolor='yellow', alpha=0.5) ax.add_patch(rect)
2. 调用plot()后外部获取
如果是在策略外部,调用cerebro.plot()之后,返回的结果里包含了所有绘图的fig和轴信息,直接提取即可:
# 运行策略并获取绘图对象 figs = cerebro.plot() # figs是列表结构,每个元素对应一组绘图的(figure, 轴列表) # 取第一个数据源的主价格轴 ax = figs[0][1][0]
注意点
- 必须在Backtrader初始化绘图流程之后再获取轴,比如
notify_trade触发时,绘图轴已经被创建,此时获取才有效。 - 如果策略里有单独绘图的指标,要获取对应指标子图的轴,用
self.你的指标实例.plotinfo.plotaxes即可。
内容的提问来源于stack exchange,提问作者aiv
相关产品推荐
相关产品推荐

