关于vnpy重启后,比如开盘前开始,即使符合挂停止单条件,也没有挂停止单的问题
目前找到的解决方案是张国平老师的方案:
- 修改策略的 onInit(self) ,回放不包括最后一个bar
def onInit(self):
"""初始化策略(必须由用户继承实现)"""
self.writeCtaLog(u'%s策略初始化' % self.name)
# 载入历史数据,并采用回放计算的方式初始化策略数值
initData = self.loadBar(self.initDays)
for bar in initData[:-1]:
self.putEvent()self.onBar(bar)
2.给onStart加入最后一个bar回放,
def onStart(self):
"""启动策略(必须由用户继承实现)"""
initData = self.loadBar(1)
bar = initData[-1]
self.onBar(bar)
self.writeCtaLog(u'%s策略启动' % self.name)
但由于现在的load_bar函数并不会直接返回数据,而是在加载完成后由引擎负责执行on_bar推送了,所以这里init_data拿到的是None,我改成以下逻辑是否正确呢?
def on_init(self):
"""
Callback when strategy is inited.
"""
self.write_log("策略初始化")
self.load_bar(10)
def on_start(self):
"""
Callback when strategy is started.
"""
initData1 = self.load_bar(1)
bar1 = initData1[-1]
self.on_bar(bar1)
self.write_log("策略启动")