VeighNa量化社区
你的开源社区量化交易平台 | vn.py | vnpy
Member
avatar
加入于:
帖子: 11
声望: 0

我想设计一个任何周期K线的NewBarGenerator,然后收盘的时候,会把剩余k线强制推出去,然后第二天重新生成,只包含白盘,所以写了下面的程序,但是在中午停盘的时候,计数器会自动加1.,导致生成的k线少1分钟。
具体举例如下:
当我想生成7min的k线的时候,应该生成一根11:29--13:06的K线, 但是实际会生成一根11:29 --13:05的K线,我想问下应该怎么修改,谢谢。

class NewBarGenerator(BarGenerator):
""""""

def __init__(
    self,
    on_bar: Callable,
    window: int = 0,
    on_window_bar: Callable | None = None,
    interval: Interval = Interval.MINUTE,
    daily_end: time | None = None
) -> None:
    super().__init__(on_bar, window, on_window_bar, interval, daily_end)

    self.target_time = time(hour=14, minute=59)

def update_bar_minute_window(self, bar: BarData) -> None:
    """"""
    # If not inited, create window bar object
    if not self.window_bar:
        dt: datetime = bar.datetime.replace(second=0, microsecond=0)
        self.window_bar = BarData(
            symbol=bar.symbol,
            exchange=bar.exchange,
            datetime=dt,
            gateway_name=bar.gateway_name,
            open_price=bar.open_price,
            high_price=bar.high_price,
            low_price=bar.low_price
        )
    # Otherwise, update high/low price into window bar
    else:
        self.window_bar.high_price = max(
            self.window_bar.high_price,
            bar.high_price
        )
        self.window_bar.low_price = min(
            self.window_bar.low_price,
            bar.low_price
        )

    # Update close price/volume/turnover into window bar
    self.window_bar.close_price = bar.close_price
    self.window_bar.volume += bar.volume
    self.window_bar.turnover += bar.turnover
    self.window_bar.open_interest = bar.open_interest

    # Check if window bar completed
    if bar.datetime.time() < self.target_time:
        if self.window_bar.datetime.minute != bar.datetime.minute:
            self.interval_count += 1
            if not (self.interval_count + 1) % self.window:
                self.interval_count = 0
                self.on_window_bar(self.window_bar)
                self.window_bar = None

    if bar.datetime.time() >= self.target_time:
        if self.on_window_bar:
            self.interval_count = 0
            self.on_window_bar(self.window_bar)
            self.window_bar = None
Member
avatar
加入于:
帖子: 11
声望: 0

谢谢论坛各位大哥的帮忙。

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

谢谢论坛各位大哥的帮忙。

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

description

目前是生成11:29到13:05 的一根k线,应该是11:29到13:06, 我的理解是在停盘的时候,计数器也增加了1. 我不知道怎么忽略中午停盘

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

沪公网安备 31011502017034号

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