vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 24
声望: 0

刚接触vnpy,在看内置的双均线策略DoubleMaStrategy,其中部分代码如下。
我的问题是,在on_bar中,一开始并没有告诉am移动均线的窗口长度,它怎么知道何时k线数量已经足够计算均线了(if not am.inited)?

def on_bar(self, bar: BarData):
        """
        Callback of new bar data update.
        """
        # print(bar.datetime,bar.open_price)
        am = self.am
        am.update_bar(bar)
        if not am.inited:
            return

        fast_ma = am.sma(self.fast_window, array=True)
        self.fast_ma0 = fast_ma[-1]
        self.fast_ma1 = fast_ma[-2]

        slow_ma = am.sma(self.slow_window, array=True)
        self.slow_ma0 = slow_ma[-1]
        self.slow_ma1 = slow_ma[-2]

        cross_over = self.fast_ma0 > self.slow_ma0 and self.fast_ma1 < self.slow_ma1
Member
avatar
加入于:
帖子: 197
声望: 44

看看ArrayManager的update_bar()函数的代码就知道了

    def update_bar(self, bar: BarData) -> None:
        """
        Update new bar data into array manager.
        """
        self.count += 1
        if not self.inited and self.count >= self.size:
            self.inited = True

        self.open_array[:-1] = self.open_array[1:]
        self.high_array[:-1] = self.high_array[1:]
        self.low_array[:-1] = self.low_array[1:]
        self.close_array[:-1] = self.close_array[1:]
        self.volume_array[:-1] = self.volume_array[1:]
        self.open_interest_array[:-1] = self.open_interest_array[1:]

        self.open_array[-1] = bar.open_price
        self.high_array[-1] = bar.high_price
        self.low_array[-1] = bar.low_price
        self.close_array[-1] = bar.close_price
        self.volume_array[-1] = bar.volume
        self.open_interest_array[-1] = bar.open_interest
Member
avatar
加入于:
帖子: 1741
声望: 115

am默认的size是100,传进来的bar数满了size根就会把inited的状态从默认的False变为True

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

description
我用到20日均线指标,那么图中1处已经初始加载了30根日k线,2处收否没有必要再load_bar了?

Member
avatar
加入于:
帖子: 1741
声望: 115

load_bar才是加载数据,前面这个只是指定am的size。而且你指定am的size为30的话,load_bar至少要30根日线数据才能初始化am

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

mark

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

沪公网安备 31011502017034号