在回测研究vnpy自带的策略时发现,self.boll_up, self.boll_down = am.boll(self.boll_window, self.boll_dev)这句代码并不能正确输出布林带上下轨的准确数据,由于遇到开仓规则如下的代码,出现每根bar都交易的问题:
## 问题代码
self.boll_up, self.boll_down = am.boll(self.boll_window, self.boll_dev) # 生成bolling带上下轨
boll_width = self.boll_up - self.boll_down # 计算bolling带宽度
if self.pos == 0:
atr_fix = am.atr(self.atr_window) # 计算atr指标
self.trading_size = int(self.risk_level / atr_fix) # 根据用风险控制水平除以atr得到开仓量,吗每单固定风险,根据atr调整仓位大小
self.intra_trade_high = bar.high_price
self.intra_trade_low = bar.low_price
self.long_stop = 0
self.short_stop = 0
self.buy(self.boll_up, self.trading_size, stop=True) # 在bolling带上轨开多仓
self.short(self.boll_down, self.trading_size, stop=True) # 在bolling带下轨开空仓
发生问题如下:
自带的回测策略出现大幅连续亏损
查看成交单,发现每一根bar都有交易,过度交易的手续费和滑点吃掉了本金
用
self.boll_up, self.boll_down = am.boll(self.boll_window, self.boll_dev)
print("up_down:" + str(self.boll_up) + "," + str(self.boll_down) # 新增调试代码
输出self.boll_up和self.boll_down发现,am.boll()返回的self.boll_up和self.boll_down值是一样的,测试过所有调用am.boll()函数的策略都有这个问题
请教大家有没有遇到相同情况的?