ITPub博客

首页 > 应用开发 > Python > VNPY重新启动后,没有停止单挂单原因和简洁解决方法

VNPY重新启动后,没有停止单挂单原因和简洁解决方法

原创 Python 作者:张国平 时间:2019-01-29 16:27:45 0 删除 编辑
之前在这个链接里面,提了vnpy重启后,比如开盘前开始,即使符合挂单条件,也没有挂单出现的问题,给了一个比较麻烦的方法。
http://blog.itpub.net/22259926/viewspace-2563701/
后来研究代码,发现原因应该是:
程序用onInit(self) 初始化回放数据,但是此时self.trading 为false,不会发出停止单;而启动onStart时候,不会重新回放启动,也就不会有挂单,这样重启第一个时间K线是没有停止单在的。
由于历史回测是连续的K线,这样也就是造成回测和实盘差异较大。


之前链接解决方法比较复杂,简单解决方法就是把回放最后一个bar放在onStart里面跑,这时候 self.trading 为True,允许挂单
1. 修改策略的 onInit(self)  ,回放不包括最后一个bar
def onInit(self):
    """初始化策略(必须由用户继承实现)"""
    self.writeCtaLog(u'%s策略初始化' % self.name)
    # 载入历史数据,并采用回放计算的方式初始化策略数值
    initData = self.loadBar(self.initDays)
    for bar in initData[:-1]:
        self.onBar(bar)
    self.putEvent()
2.给onStart加入最后一个bar回放,
def onStart(self):
    """启动策略(必须由用户继承实现)"""
    initData = self.loadBar(1)
    bar = initData[-1]
    self.onBar(bar)
    self.writeCtaLog(u'%s策略启动' % self.name)    
    self.putEvent()


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22259926/viewspace-2565165/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
SAP 金融风险管理产品专家

注册时间:2009-08-05

  • 博文量
    184
  • 访问量
    414731