利用Backtrader进行期权回测之二:Backtrader基础

Backtrader是一个用python编写的回测和交易框架。功能强大,文档详细,开发社区也很活跃,出现问题容易得到支持。同时它还是一款开源的工具,需要的时候可以很方便地阅读和修改代码。

编写一个Backtrader回测程序很容易。

  • 首先是编写一个自己的策略类;
  • 然后调用执行这个策略。

实现策略类

一个简单的策略类只需要十几行代码。我们以一个简单的均线股票策略来示范(例子引自Backtrader官方文档):

import backtrader as bt

class SmaCross(bt.Strategy):
    # 定义策略参数,可以在启动策略的时候调整这些参数
    params = dict(
        pfast=10,  # 短期均线的交易日数量
        pslow=30   # 长期均线的交易日数量
    )

    # 类初始化,对数据进行预处理,如增加需要的指标。
	def __init__(self):
		#  定义一个长期均线和短期均线
		sma1 = bt.ind.SMA(period=self.p.pfast)  
        sma2 = bt.ind.SMA(period=self.p.pslow)  
        # 创建均线交叉(买入卖出)信号
        self.crossover = bt.ind.CrossOver(sma1, sma2) 

    # 滚动处理每天的交易。日线数据是在每天收盘后调用,所以实际成交是在第二天。
    def next(self):
    	# 没有持仓且短期均线上穿长期均线时买入
        if not self.position:  
            if self.crossover > 0:  
                self.buy() 
                
        # 如果已经买入并且短期均线下穿长期均线则卖出
        elif self.crossover < 0:  
            self.close()  

这个非常简单的类做了三件事情:

  1. 继承bt.Strategy,这是在Backtrader中定义的策略基类。
  2. 在init方法中定义自己的数据。
  3. 在next方法中实现买入/卖出的逻辑

执行策略

定义好策略类,就可以初始化并运行策略了。

# 创建回测引擎实列
cerebro = bt.Cerebro() 

# 创建数据流。框架原生支持从雅虎财经获取股票交易数据。
data = bt.feeds.YahooFinanceData(dataname='MSFT',
                 fromdate=datetime(2011, 1, 1),
                 todate=datetime(2012, 12, 31))

cerebro.adddata(data)  # 添加数据流
cerebro.addstrategy(SmaCross)  # 添加策略

cerebro.run()  # 执行策略

cerebro.plot()  # 显示回测结果

运行结果是这样的:
图1:简单均线策略执行结果

可以看到,简单的均线策略没有赚到钱,不过这里主要是演示怎么实现一个策略。

我们现在知道了怎么编写一个简单的Backtrader实现,下一步是实现自己的期权策略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值