3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)平台上,回测并不是必须实现 handle_data 函数的。实际上,官方更推荐使用 run_daily 等定时函数来构建策略。
以下是 handle_data 与 run_daily 等定时函数的详细区别和使用建议:
handle_data(context, data):
handle_data 函数。run_daily / run_weekly / run_monthly:
time='09:30'、time='14:50'),甚至可以指定在开盘前(如 09:00)或收盘后(如 15:30)执行。handle_data(context, data):
context(账户和上下文信息)和 data(当前单位时间的标的数据)。data 参数是为了早期兼容性保留的,官方文档指出,为了加速,data 里面的数据是按需获取的。现在更推荐使用 get_price、history、get_current_data 等全局 API 来获取数据。run_daily(func, time, ...) 指定的回调函数:
market_open)只能有一个参数 context。history()、get_current_data() 等 API 即可,代码更加清晰。根据 JoinQuant 官方 API 文档的建议:
run_daily:为了避免换算错误和逻辑混乱,建议设置 time 为具体的时间(例如:time='9:30'),并使用 run_daily 等定时函数。run_daily 和 handle_data,更不能写出 run_daily(handle_data, "xx:xx") 这样的代码。initialize / before_trading_start / after_trading_end / handle_data 都是可选的。如果不是必须的,不要实现这些函数,一个空函数反而会降低运行速度。你发现的用法是非常正确且现代的。使用 run_daily 配合自定义函数(如 before_market_open, market_open, after_market_close)能够让你的策略时间轴更加清晰,逻辑解耦得更好,这也是目前量化策略编写的主流和推荐方式。完全可以抛弃 handle_data。