KB / ARTICLE

多周期数据订阅

策略文档修订 R1发布于 2026-11-05

本文讲解如何从任务基础周期聚合出更粗的窗口 K 线,并在窗口闭合时执行跨周期逻辑。

任务的基础周期由页面决定,例如 1 分钟。更粗的周期用下面的接口从基础 K 线聚合出来。多个股票或 ETF 把代码放进 symbols,回调里用 bar.symbol 区分。

subscribe_bars

从基础 K 线订阅一根更粗的窗口 K 线。

写在 __init__ 里。引擎启动后订阅表冻结,写在 on_start 无效。页面参数会作为构造参数传入,签名要接住:

from qmfquant import  Strategy


class MyStrategy(Strategy):
    def __init__(self, *args, **kwargs) -> None:
        super().__init__(*args, **kwargs)
        self.subscribe_bars(
            "15min",
            symbols=["000001.SZ", "600000.SH"],
            session_windows=[("09:30", "11:30"), ("13:00", "15:00")],
        )
        self.subscribe_bars(
            "1h",
            symbols=["000001.SZ", "600000.SH"],
            session_windows=[("09:30", "11:30"), ("13:00", "15:00")],
        )

接口:subscribe_bars(freq, callback=None, symbols=None, *, session_windows=None)

参数 输入 限制
freq str,必填 只能是整数分钟 "Nmin"、整数小时 "Nh"、日线 "1d",如 "3min"、"5min"、"15min"、"30min"、"1h"。不支持秒、周、月。必须粗于任务基础周期,相同或更细会报 ValueError
symbols list[str] 或省略 省略表示全部标的。填写则只聚合这些代码,如 "000001.SZ"、"600000.SH"
session_windows list[tuple[str, str]] 或省略 每项为 ("09:30", "11:30") 这种开始、结束时间。A 股连续竞价传 [("09:30", "11:30"), ("13:00", "15:00")],窗口不跨午休。同一 freq、标的范围有重叠时,这个参数必须完全相同,否则 ValueError
callback 方法或省略 省略时,闭合后调用 on_window_bar(bar)。传入 callback=self.on_daily 后,只进这个方法

返回值:None。

on_window_bar

窗口闭合时由框架调用。策略里重写它。

from qmfquant import  Strategy


class MyStrategy(Strategy):
    def on_window_bar(self, bar) -> None:
        if bar.freq != "15min":
            return
        closes = self.get_history(20, bar.symbol, "close")
参数 输入 说明
bar Bar bar.symbol 是标的,bar.freq 是 "15min" 这类周期,bar.timestamp 是这根窗口的结束时间

限制:

  • 每个标的单独回调,用 bar.symbol 分状态。
  • 它发生在闭合该窗口的那根基础 K 线的 on_bar 之后。下单写在 on_bar。窗口 K 线不参与撮合。
  • 卖出仍用 get_available_position(),T+1 不变。

get_history 的 freq

取某一窗口周期已经闭合的历史。

写在 on_window_bar 或 on_bar 里。该周期必须已经 subscribe_bars。

closes = self.get_history(20, "600000.SH", "close", freq="15min")
参数 输入 限制
freq str 或省略 取值必须是已订阅的窗口标签,如 "15min"、"1h"、"1d"。在对应的 on_window_bar 里可以省略。这不是双流接口里的 "bar" / "tick"

current_window(symbol, freq) 读取尚未闭合的当前窗口,只能在行情回调里调用,不会再触发回调。symbol、freq 的限制与上表相同。


相关阅读

已复制到剪贴板
策略文档修订 R1

返回策略文档板块

评论