我也遇到这个问题,在启用“组合管理”app会出现。 不启用“组合管理”就没问题。。。
hxxjava wrote:
morgan66b5694ca1a94a98 wrote:
self.event_engine:EventEngine = self.strategy_engine.event_engine
这行在价差回测引擎执行的时候报错,strategy_engine:BacktestingEngine 是没有event_einge的
是不是说有事件信号的,回测引擎都暂时不支持?印象中价差回测是没有现成的测试界面,你是如何编写回测代码的呢?
总之交易线需要和策略引擎使用同一个消息引擎就可以了。
本来合约价格是可以通过订阅获得的,就是考虑到回测时无法订阅价格,
所以改成了由策略通知交易线价格发生了变化的。def on_spread_tick(self, tick: TickData): """ Callback when new spread tick data is generated. """ self.bg.update_tick(tick) if self.trading: pc = PriceData(sponsor=self.strategy_name,price_name=self.spread_name,price=tick.last_price) self.event_engine.put(Event(EVENT_PRICE_CHANGE,data=pc))
当然如果你的米筐账号没有tick数据(通常贵多了),那么你也可以把通知价格更新的语句放在on_bar()中,
tick.last_price用bar.close代替,当然这也是没有办法的事情。
感谢大佬!
我没用界面回测,直接写个vnpy.vnpy_spreadtrading.backtesting.BacktestEngine实例,设置参数跑回测的。
只需要在策略初始化处,加判断若它是回测引擎,则新建一个EventEgine(),并手工给它start() ,最后在run_backtesting轮播bar数据时,要sleep(0.01)一下,毕竟是不同的线程在做,防止交易线处理得慢。单这样做回测起来确实慢很多。
self.event_engine:EventEngine = self.strategy_engine.event_engine
这行在价差回测引擎执行的时候报错,strategy_engine:BacktestingEngine 是没有event_einge的
是不是说有事件信号的,回测引擎都暂时不支持?
按照楼主类似的思路,弄了个本地撮合服务;两个虚拟交易员根据tick一个做买,一个做卖;再连上一个vnpy做第三者看行情变化,测试策略。