我个人认为在目前的python开源量化框架或平台中,backtrader的设计架构是最简洁自然的,很容易入门。我们来看一个所有开源量化框架都会实现的单股票双均线策略,在backtrader中是如何实现的,代码如下,看注释很容易理解。
假设操作一支股票,使用日线数据,该策略基本思想是短期均线上穿长期均线(金叉),下穿长期均线(死叉)卖出。
- # 创建双均线策略类
- class SmaCross(bt.Strategy):
- # 定义参数
- params = dict(
- fast_period=5, # 快速移动平均期数
- slow_period = 10,) # 慢速移动平均期数
- def __init__(self):
- # 快速移动平均线指标
- fastMA = bt.ind.MovingAverageSimple(period=self.params.fast_period)
- # 慢速移动平均线指标
- slowMA = bt.ind.MovingAverageSimple(period=self.params.slow_period)
- # 移动均线交叉信号指标
- self.crossover = bt.ind.CrossOver(fastMA, slowMA)
- self.order = None # 设置订单引用,用于取消以往发出的尚未执行的订单
- def next(self): # 每个新bar结束时触发调用一次,相当于其他框架的 on_bar()方法
- self.cancel(self.order) # 取消以往未执行订单
- if not self.position: # 还没有仓位,才可以买
- if self.crossover > 0: # 金叉
- self.order = self.buy(size=100) # 创建市价买单,该单正常应该在次日开盘以开盘价成交
- # 已有仓位,才可以卖
- elif self.crossover < 0: # 死叉
- self.order = self.sell(size=100) # 创建市价卖单,该单正常应该在次日开盘以开盘价成交
看过其他python开源量化平台或框架的读者,可以把其他框架实现同样逻辑的代码拿来比较一下,看看哪个更加简洁自然。
还没有入坑backtrader的朋友也可根据本例子评估是否喜欢backtrader的风格,做出是否入坑的决定。
扫地僧backtrader给力教程