vn.py官网
开源量化社区
Member
avatar
加入于:
帖子: 58
声望: 0

使用Porfolio Strategy的策略,订阅CTP实盘行情下的多个期权合约和期货合约时,经常发现推到on_bars函数里面的bars有很多是None值,其中有不少是活跃的主力期货合约,想不明白这是什么原因。 合约都能正常订阅到,而且是UI里面,是可以看到价格在跳动的。

以下是 Porfolio Strategy 里面默认的on_tick函数写法:

def on_tick(self, tick: TickData):
    """
    Callback of new tick data update.
    """
    if (
        self.last_tick_time
        and self.last_tick_time.minute != tick.datetime.minute
    ):
        bars = {}
        for vt_symbol, bg in self.bgs.items():
            bars[vt_symbol] = bg.generate()
        self.on_bars(bars)

    bg: BarGenerator = self.bgs[tick.vt_symbol]
    bg.update_tick(tick)

    self.last_tick_time = tick.datetime

之前我认为可能是在一分钟内没有收到到tick,就会合成None值,但是有些活跃期货合约也会出现这个情况,就不能理解了。
之后我加了一个优化,如果当前一分钟Bar为None的话,就调用bg.last_bar的价格来替换,结果发现依旧是None值。

def on_tick(self, tick: TickData):
    """
    Callback of new tick data update.
    """
    if (
            self.last_tick_time
            and self.last_tick_time.minute != tick.datetime.minute
    ):
        bars = {}
        for vt_symbol, bg in self.bgs.items():

            if bg.bar is not None:
                bars[vt_symbol] = bg.generate()
            elif bg.last_bar is not None:
                bars[vt_symbol] = bg.last_bar
            else:
                bars[vt_symbol] = None

        self.on_bars(bars)

    bg: BarGenerator = self.bgs[tick.vt_symbol]
    bg.update_tick(tick)

    self.last_tick_time = tick.datetime

不清楚是不是应该订阅的某些期权合约太不活跃导致,但是不应该活跃的主力期货合约也有时为None值

Member
avatar
加入于:
帖子: 3033
声望: 174

可以自己打印一下看看是没收到tick还是合成的时候导致的

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

xiaohe wrote:

可以自己打印一下看看是没收到tick还是合成的时候导致的

有收到tick,就是合成的时候的问题

Member
avatar
加入于:
帖子: 3033
声望: 174

那可以在合成过程中打印一下看是卡在哪一步了

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

沪公网安备 31011502017034号