问题描述
我的策略需要每天都运行,包括周末
解决方案
在 JoinQuant(聚宽)量化平台上,run_daily 函数默认是不能在周末(非交易日)运行的。
为什么不能在周末运行?
JoinQuant 的回测和模拟交易引擎是基于交易日历驱动的。无论是 run_daily、run_weekly、run_monthly 还是 handle_data,它们触发的前提都是“当前日期是一个有效的交易日”。
根据官方 API 文档的说明:
run_daily指定每天要运行的函数,可以在具体每天的某一分钟执行。但这里的“每天”实际上指的是每个交易日。
在周末、法定节假日等非交易日,由于市场休市,没有新的行情数据产生,也无法进行委托下单,因此策略引擎会自动跳过这些日期,不会触发任何定时函数。
应对策略与建议
如果您的策略逻辑“感觉”需要每天(包括周末)运行,通常可以从以下几个角度进行调整:
-
数据处理的延后或提前:
如果您需要在周末进行某些数据计算或状态重置,可以将其逻辑转移到周五收盘后(例如使用run_daily(func, time='15:30')或after_trading_end)或者周一开盘前(例如使用run_daily(func, time='09:00')或before_trading_start)来集中处理。 -
理解量化环境的本质:
在 A 股或国内期货市场,周末没有任何交易活动。即使您的代码在周末运行了,调用get_price获取到的也是周五的数据,调用order下单也会因为非交易时间而变成挂单(甚至被拒绝)。因此,将逻辑压缩到交易日内执行是完全可行且符合市场规律的。 -
外部系统辅助(仅限实盘/外部环境):
如果您是在本地使用JQData结合自己的任务调度系统(如 Linux 的crontab或 Python 的schedule库),您可以自由控制代码在周末运行。但这脱离了聚宽官网的回测/模拟交易引擎范畴。
总结:在聚宽官网的策略代码中,请将所有需要执行的逻辑安排在交易日的特定时间点,引擎会自动为您处理好日期的跳跃。