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

抱歉官方文档没找到解答, 不是十分确定这三的理解是否正确:

以15分钟K線代碼为例

def on_15min_bar(self, bar: BarData):
self.cancel_all()

    am = self.am
    am.update_bar(bar)
    if not am.inited:
        return

    if self.pos == 0:
        self.intra_trade_high = bar.high_price
        self.intra_trade_low = bar.low_price

if not am.inited就return, return就不会再执行下面的代碼, 而am.inited=True是"该15分钟線成功合成的那一分钟", 只有在am.inited=True的时候才会执行下面的代碼.
那么如果在def on_15min_bar里调用bar.high_price, bar.close_price或bar.low_price, 是否每15分钟才计算入参一次? 这里面调用的是上一根15分钟bar的high, low, close?
因为这3个参数需要一根BAR走完结束才能确定, 但入参时是新bar的开始而非结束, 还是說他会一直计算, 取的是这根BAR里的high, low, close?

Member
avatar
加入于:
帖子: 101
声望: 8

1,am.inited是在加载了足够多的用户指定颗粒度的bar数据之后才会被设置为True,比如你使用15分钟的bar,在初始化Arraymanager的时候又没有具体指定长度,即你是这么定义ArrayManager的self.am = ArrayManager(),那么必须得有100根15分钟的bar加载进来才会将am.inited设置为True。
2,bar的合成是由BarGenerator类来执行,而传入到函数0n_15min_bar的每根bar都是合成好的15分钟的bar。所以在on_15min_bar函数下调用的bar.high_price等都是调用那根刚合成好的15分钟的bar的数据。

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

沪公网安备 31011502017034号

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