天天看点

【量化】Backtrader量化回测平台入门2——编写一个简单的策略

编写简单策略

上节介绍了Backtrader量化回测平台的安装和运行,这一节将编写简单的策略,使用Backtrader,用于策略研究模板的参考。

数据来源

选用具有ohlc格式的数据即可,这里使用的是股指期货IF在min级别的数据,如图所示,不包含成交量信息也可以回测,但是显示时无法使用cerebro.plot(style=“candlestick”),会报错。

【量化】Backtrader量化回测平台入门2——编写一个简单的策略

这里需要注意数据格式保持一致,backtrader中提供了btfeeds.PandasData方法可以将pandas中的DataFrame结构转化为backtrader的数据类型。

代码主函数部分
df=pd.read_csv("IF.csv")
df.index=pd.to_datetime(df["DATETIME"])
df.drop(["DATETIME","volume"],axis=1,inplace=True)
data=btfeeds.PandasData(dataname=df,fromdate=datetime.datetime(2020, 10, 1),todate=datetime.datetime(2020, 12, 31))
cerebro = bt.Cerebro()
cerebro.adddata(data)
cerebro.broker.setcash(1000000.0)
cerebro.addstrategy(mystrategy)
cerebro.broker.setcommission(commission=2.5,margin=117000, mult=300.0)
print('Start Value: {}'.format(cerebro.broker.getvalue()))
cerebro.run()
print('Final Value: {}'.format(cerebro.broker.getvalue()))
cerebro.plot(style="candlestick")
           

注意

1.在保证原有数据格式一致的情况下,使用btfeeds.PandasData转化DataFrame数据,然后设置相关参数。

2.设置标的交易手续

根据backtrader手续费介绍,需要注意如果不添加margin参数(margin默认为False(None)),则commission参数代表一次交易过程中总成交额的百分数;如果添加margin参数,则commission代表一次交易单手的固定手续费(单位为钱,注意不是百分比)。

cerebro.broker.setcommission(commission=0.005)#股票手续费设置,为每次交易的0.5%
cerebro.broker.setcommission(commission=2.5,margin=117000, mult=300.0)#期货手续费设置,margin为保证金,mult为乘数
           
策略回测结果

使用10月1日到12月31日的数据进行回测,可以得到如下结果:

【量化】Backtrader量化回测平台入门2——编写一个简单的策略
【量化】Backtrader量化回测平台入门2——编写一个简单的策略
【量化】Backtrader量化回测平台入门2——编写一个简单的策略

可以看到当RSI指标在高于80或者低于20时会产生交易信号,并且由上图第二幅子图可以看到,大部分的入场是盈利的,少部分开空的交易没有及时止盈导致后期价格反转而止损出场,说明策略的出场条件还需要进一步修改。

RSI指标介绍

本文使用的策略指标为RSI,可以用于衡量买卖双方强弱。N日RSI的计算公式如下:

R S I = A A + B × 100 RSI=\frac{A}{A+B}\times 100 RSI=A+BA​×100

A为N日收盘涨幅之和,B为N日收盘跌幅之和。若RSI>80,认为市场处于超买状态,价格被高估,预计在未来一段时间价格回落;而RSI<20,认为市场处于超卖状态,价格被低估,预计在未来一段时间价格上涨。

具体代码[email protected]

【量化】Backtrader量化回测平台入门1