VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 4
声望: 0

关于vnpy重启后,比如开盘前开始,即使符合挂停止单条件,也没有挂停止单的问题

目前找到的解决方案是张国平老师的方案:

  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)

但由于现在的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("策略启动")
Member
加入于:
帖子: 158
声望: 71

这个问题根源是CTA策略的init和trading约束,init初始化时候把历史bar回测,但是此时trading为false不会发出交易;只有启动时候才会发出,但是此时bar回测已经结束了。最好修改就是onStart方法中加入对分析如果最后参数状态复合发出交易时候,在onStart方法发出交易

Member
avatar
加入于:
帖子: 7
声望: 0

张国平 wrote:

这个问题根源是CTA策略的init和trading约束,init初始化时候把历史bar回测,但是此时trading为false不会发出交易;只有启动时候才会发出,但是此时bar回测已经结束了。最好修改就是onStart方法中加入对分析如果最后参数状态复合发出交易时候,在onStart方法发出交易
这样改正确吗?既然load_bar不返回数据,那initData1是不是为空了?

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】