backtrader最大的坑:没有内置处理涨跌停板

很多朋友使用backtrader做A股的量化回测,往往忽视了一个问题,就是没注意对涨跌停的处理,导致回测结果严重失真。

backtrader中通过self.buy命令创建的市价买单将在下一个bar(次日)以开盘价执行,即使次日是全天涨停板,也会成交,而这并不符合实际,因为如果次日全天涨停板,那么买单通常会因买不到而无法执行。如果次日全天跌停板,那么卖单通常无法执行。

怎样才能模拟出次日涨停时买不进,跌停时卖不出这种场景呢?本教程提出两种解决方案。一种是利用带有效期的限价单来处理, 在策略的next方法中,核心代码如下:
在这里插入图片描述

upperprice是比次日涨停价稍低(低2分钱)的买单价格上限,订单有效截止期为下一个bar,注意截止期self.data.datetime[1]中的索引是1,表示下一个bar的日期时间(默认截止到该日晚上23点59分)。如果次日全天处于涨停状态,那么价格会始终在upperprice之上,导致无法成交,这样就模拟了无法以涨停价成交。若未成交,再往后推一天,该买单就失效了。跌停板的处理与此类似。

另一种更加好的方法是直接修改backtrader自己的经纪行broker定义,在bbroker.py文件里进行修改,具体方法可参考我们的视频课程。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扫地僧量化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值