KB / ARTICLE

策略案例:实盘盘前检查

案例合集修订 R1发布于 2026-11-05

本案例演示在实盘环境下替代 on_pre_open 做盘前检查:用 schedule_daily 注册盘前和收盘前两个时点,用 on_before_trading 做交易日边界处理。

背景说明

on_pre_open 只适用于回测,因此实盘盘前检查不能用 on_pre_open 执行相关逻辑,以下案例使用 on_before_trading 和 on_timer 实现盘前检查相关逻辑。此处不涉及完整的策略逻辑,可以在此基础上增加其他交易逻辑。

完整代码

from qmfquant import Strategy


class PreOpenLiveStrategy(Strategy):
    def on_start(self) -> None:
        self.schedule_daily("09:25:00", "pre_open")
        self.schedule_daily("14:55:00", "before_close")

    def on_before_trading(self, trading_date, timestamp) -> None:
        self.log(f"交易日开始:{trading_date},此处只能看到前一日信息")

    def on_timer(self, payload: str) -> None:
        if payload == "pre_open":
            account = self.get_account()
            self.log(f"盘前资金检查:现金={account.get('cash', 0):.2f}")
        elif payload == "before_close":
            for symbol, qty in self.positions.items():
                available = self.get_available_position(symbol)
                self.log(f"收盘前 {symbol} 持仓={qty} 可卖={available}")

要点说明

  • 两个时点用不同的 payload 区分,共用一个 on_timer,避免注册多个定时回调。
  • on_before_trading 里只能看到前一交易日的信息,当日行情尚未产生,因此不要在这里读取当日价格。
  • 盘前检查通常关注可用资金、冻结资金和待处理订单;收盘前检查关注持仓与可卖数量,为次日决策做准备。

回测若确需“盘前决策、本次 open 成交”,可以另外实现 on_pre_open;上线实盘时必须保证同一套逻辑也能通过 on_timer 或 on_before_trading 走通。


相关阅读

已复制到剪贴板
案例合集修订 R1

返回案例合集板块

评论