在前面的例子里,我使用的是从雅虎财经获取的股票数据。要回测期权的话,需要导入从通达信获取的数据。如何下载和解析通达信期权数据请参考:利用BackTrader进行期权回测之一:获取期权数据
为了加载自己的数据,Backtrader提供了两种常用方法:
- 从CSV文件加载
- 从Pandas DataFrame加载数据
从DataFrame加载数据
如果我已经有了如下图这样一个dataframe:

注意,backtrader要求至少有6列数据,包括:日期,最高价,最低价,开盘价,收盘价,成交量。
有个这个dataframe以后,加载数据就可以通过创建一个PandasData实例来实现:
from backtrader.feeds import PandasData
# 从dataframe加载数据
data = PandasData(dataname=df, datetime=-1)
# 添加数据到回测引擎
cerebro.adddata(data)
在创建PandasData的时候,参数datetime=-1表示“交易日期”通过列名自动识别。如果在dataframe中日期列的名称不是“datetime”,除了修改dataframe列名以外,还可以使用下面的方法。
- 通过一个字符串指定日期列的名称:
# 日期列的名称是“col_name”
data = PandasData(dataname=df, datetime='col_name')
- 或通过一个整数指定日期列在第几列:
# 日期列在第1列
data = PandasData(dataname=df, datetime=1)
如果datetime参数没有指定(相当于datetime=None),PandasData会尝试从dataframe的索引中获取日期。
其它列与之类似,可以使用标准的列名high,low,open,close,volume;也可以指定列的名称和位置。如果没有指定,则会自动根据列的名称去匹配。
加载数据以后,就可以在策略类中访问数据了。
添加额外的数据指标
对于期权来说,通常除了价格和成交量以外,还需要增加一些重要的指标,比如期权到期时间等。那么应该怎么办呢?
通过扩展一个新的数据加载类,可以很方便地在这个类中定义新增的数据。
现在我dataframe中新增了两列数据,分别是ttm(到期时间)和impvol(隐含波动率),如下图所示:

本文详细介绍如何使用Backtrader进行期权回测,包括从PandasDataFrame加载数据、定义额外数据指标、处理多个期权数据及解决期权开始日期不一致的问题。
最低0.47元/天 解锁文章
813





