关于vnpy重启后,比如开盘前开始,即使符合挂停止单条件,也没有挂停止单的问题
目前找到的解决方案是张国平老师的方案:
self.onBar(bar)
self.putEvent()但由于现在的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线不同,导致指标计算数据不一样,从而影响回测准确度。 这个怎么解决呢?