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

Exception in thread Thread-1 (_run):
Traceback (most recent call last):
File "C:\veighna_studio\lib\threading.py", line 1016, in _bootstrap_inner
self.run()
File "C:\veighna_studio\lib\threading.py", line 953, in run
self._target(*self._args, **self._kwargs)
File "C:\veighna_studio\lib\site-packages\vnpy\event\engine.py", line 60, in _run
self._process(event)
File "C:\veighna_studio\lib\site-packages\vnpy\event\engine.py", line 73, in _process
[handler(event) for handler in self._handlers[event.type]]
File "C:\veighna_studio\lib\site-packages\vnpy\event\engine.py", line 73, in <listcomp>
[handler(event) for handler in self._handlers[event.type]]
File "C:\Users\Master.vntrader\Run\recordAll.py", line 493, in process_tick_event
bg.update_tick(copy(tick))
File "C:\veighna_studio\lib\site-packages\vnpy\trader\utility.py", line 241, in update_tick
self.on_bar(self.bar)
File "C:\veighna_studio\lib\site-packages\vnpy_datarecorder\engine.py", line 303, in record_bar
self.bars[bar.vt_symbol].append(bar)
AttributeError: 'BarData' object has no attribute 'vt_symbol'. Did you mean: 'symbol'?

其中recordAll.py中继承了RecorderEngine并重写了process_tick_event

def process_tick_event(self, event: Event) -> None:
    """"""
    tick: TickData = event.data
    if tick.vt_symbol in self.bar_recordings:
        bg: Optional[BarGenerator] = self.bar_generators.get(tick.vt_symbol, None)
        if not bg:
            bg = BarGenerator(self.record_bar)
            self.bar_generators[tick.vt_symbol] = bg
        bg.update_tick(copy(tick))

感觉class BarData中的post_init没有触发,为什么会这样呢?

Member
avatar
加入于:
帖子: 1472
声望: 105

建议查下你的BarData对象是如何实例化的,如果用的标准开源版本不会有这个问题

Member
avatar
加入于:
帖子: 84
声望: 1

建议将RecorderEngine中的record_bar的语句改为self.bars[bar.vt_symbol].append(copy(bar)),加个copy以免bars.clear后原bar内容被修改或删除了,由于在utility中每次record_bar之后会马上给bar生成新的BarData,这个问题被掩盖了;如果不按照utility中那样执行,可能就有问题。

建议合理吗?

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

沪公网安备 31011502017034号

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