本案例演示在实盘环境下替代
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 走通。
相关阅读
- • 策略基础与生命周期
- • 账户、持仓与订单查询
- • 辅助功能

评论
登录后参与讨论,与站内账号体系共用。