利用Backtrader进行期权回测之五:用backtrader_plotting查看回测结果

backtrader_plotting是一个扩展库,用来增强backtrader的绘图功能。它不仅功能更加强大,比如能够把结果分成多个Tab显示,而且显示效果也更加优雅美观。所以推荐大家使用这个,而不是backtrader缺省的plot功能。

安装backtrader_plotting

backtrader_plotting可以通过pip进行安装:

pip install backtrader_plotting

替换backtrader的plot功能

backtrader_plotting的使用也很简单。在前一篇文章的例子中,显示回测结果的代码是这样的:

cerebro.plot()

如果使用backtrader_plotting,需要把代码改成这样:

from backtrader_plotting import Bokeh
from backtrader_plotting.schemes import Tradimo

# 其它回测代码
# ...

b = Bokeh(style='bar', plot_mode='single', scheme=Tradimo())
cerebro.plot(b)

下面是backtrader_plotting的执行结果。

  • 账户资产变化情况

图1:账户资产变化情况

  • K线

图2:K线

设置不显示K线

在实际的回测中,通常需要设置为不显示K线。因为实际的回测通常包含几百个甚至更多的期权,把每个期权的K线都画出来,既费时也没有必要。

backtrader关闭K线的方法,是把每一个数据流的plotinfo.plot属性设置成False。如下面的代码所示:

# 设置回测结果中不显示期权K线
for d in cerebro.datas:
    d.plotinfo.plot = False
    
# 显示策略运行结果
b = Bokeh(style='bar', plot_mode='single', scheme=Tradimo())
cerebro.plot(b)

但是这个方法在使用backtrader_plotting时遇到一个问题:即使设置了plot=False,backtrader_plotting仍然会显示K线。
这个问题花了我两天的时间,仍然没有头绪。最后咨询了backtrader_plotting的作者,他给了一个解决方案。方法如下:

  1. 打开backtrader_plotting安装文件里的bokeh.py。
  2. 找到下面这段代码:
		if plotmaster not in data_graph:
		    data_graph[plotmaster] = []
		data_graph[plotmaster].append(obj)
  1. 把上面的代码替换成下面这样(增加第1行代码):
		if plotmaster.plotinfo.plot:
		    if plotmaster not in data_graph:
		        data_graph[plotmaster] = []
		    data_graph[plotmaster].append(obj)
  1. 替换完成之后,保存bokeh.py文件

然后,当plot=False的时候,backtrader_plotting就不会显示K线了。

有兴趣的读者可以参考作者的回复:how to disable buy/sell chart

注意:这个解决方案对backtrader_plotting当前版本v1.1.0适用,未来可能会有变化。

### Backtrader 框架使用教程 #### 一、简介 Backtrader 是一个开源的量化交易框架,适用于股票、期货以及期权等多种金融工具的与实时交易。该平台不仅提供了丰富的功能和灵活的接口来满足复杂的期权需求[^1],还覆盖了从数据预处理至实际部署的一系列流程,使得开发者可以高效地构建稳健的交易模型[^2]。 #### 二、核心组件概述 为了更好地理解 backtrader 的工作原理及其应用方式,以下是其主要组成部分: - **Cerebro**: 构建整个系统的引擎,负责管理所有其他模块并执行具体的买卖操作。 - **Data Feeds (数据源)**: 支持多种格式的数据输入,包括 CSV 文件、Pandas DataFrame 和在线 API 接口等。 - **Strategies (策略类)**: 用户自定义的投资逻辑实现处;所有的决策都基于此类中的方法完成。 - **Indicators (技术指标库)**: 提供了大量的内置计算函数用于辅助分析市场趋势。 - **Orders (订单机制)**: 定义下单行为的具体参数设置。 - **Observers & Analyzers**: 前者用来监控运行状态而后者则帮助评估性能表现。 - **Broker (模拟/真实经纪商)**: 负责处理资金账户变动情况下的资产分配问题。 - **Plotting (绘图展示)**: 可视化最终的结果以便直观查看历史走势变化。 这些特性共同构成了 backtrader 强大而又易于使用的体系结构[^3]。 #### 三、简单示例代码 下面是一段简单的 Python 示例程序,演示如何利用 backtrader 进行基本的时间序列数据分析及策略试: ```python import datetime as dt import backtrader as bt class TestStrategy(bt.Strategy): def __init__(self): self.dataclose = self.datas[0].close self.order = None def next(self): if not self.position: if self.dataclose < self.data.close[-1]: self.buy() elif self.dataclose >= self.data.close[-1]: self.sell() if __name__ == '__main__': cerebro = bt.Cerebro() data = bt.feeds.YahooFinanceCSVData( dataname='AAPL.csv', fromdate=dt.datetime(2020, 1, 1), todate=dt.datetime(2020, 12, 31)) cerebro.adddata(data) cerebro.addstrategy(TestStrategy) print('Starting Portfolio Value:', cerebro.broker.getvalue()) cerebro.run() print('Ending Portfolio Value:', cerebro.broker.getvalue()) ``` 此脚本创建了一个名为 `TestStrategy` 的新策略对象,在每次价格下跌时买入而在上涨时卖出。接着初始化 Cerebro 实例并将上述策略添加进去。最后读取苹果公司(AAPL)的历史股价作为输入来进行仿真运算,并输出初始净值与结束后的总资产价值对比结果
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值