VeighNa量化社区
你的开源社区量化交易平台
jackzhou's Avatar
Member
离线
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("策略启动")

下面代码是vnpy自带的肯特纳通道突破的代码,请问下,这是在突破开仓的那一瞬间就挂上止损单? 还是要等走完开仓时的那根k线后才设止损单?
self.kk_up, self.kk_down = am.keltner(self.kk_length, self.kk_dev)

    if self.pos == 0:
        self.intra_trade_high = bar.high_price
        self.intra_trade_low = bar.low_price
        self.send_oco_order(self.kk_up, self.kk_down, self.fixed_size)

    elif self.pos > 0:
        self.intra_trade_high = max(self.intra_trade_high, bar.high_price)
        self.intra_trade_low = bar.low_price

        vt_orderids = self.sell(self.intra_trade_high * (1 - self.trailing_percent / 100),
                                abs(self.pos), True)
        self.vt_orderids.extend(vt_orderids)

    elif self.pos < 0:
        self.intra_trade_high = bar.high_price
        self.intra_trade_low = min(self.intra_trade_low, bar.low_price)

        vt_orderids = self.cover(self.intra_trade_low * (1 + self.trailing_percent / 100),
                                 abs(self.pos), True)
        self.vt_orderids.extend(vt_orderids)

之前看陈大的课程,了解了任意k线合成的方法,但里面有个问题。 不像能整除60分钟的k线, 比如合成7分钟k线,载入数据日期的起始时间到目前时间 的长度会使得合成的k线不同,导致指标计算数据不一样,从而影响回测准确度。 这个怎么解决呢?

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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