Jikipedia
Jikipedia量化聚宽新手入门教程(JoinQuant 平台实操)run_daily 与任务节奏控制(定时任务)
概念笔记

run_daily 与任务节奏控制(定时任务)

rundaily(函数, time) 把自定义函数挂到指定节奏循环执行,是替代 handledata 的推荐写法,也是让一个策略里多个任务(每分钟止损、每 10 天调仓)各跑各的机制。

量化聚宽run_daily定时任务周期控制回测周期

一句话

run_daily(daily, time='every_bar') 在 initialize 里注册一个自定义函数,让它按 time 指定的节奏被平台调用;time 的取值(every_bar / open / before_open 等)决定「什么时候触发」。按天回测时 every_bar 每天开盘跑,按分钟回测时每分钟跑。

当前理解

  • 标准套路(第 5 篇):initialize 里 run_daily(daily, time='every_bar');另写 def daily(context): 放周期逻辑。效果等同 handle_data,但函数名、职责自定义。
  • time 取值(教程出现过的)
    • 'every_bar':按当前回测周期循环——按天 = 每天开盘时,按分钟 = 每分钟开始时(第 3/5/7 篇)。
    • 'open':每日开盘时执行一次(第 3 篇追涨示例用它跑 morning_sell_all 卖光)。
    • 'before_open':raw 注释为「每日开盘循环」(第 7 篇;疑指开盘前,[需要验证] 以官方文档为准)。
    • 完整取值(分钟/小时/星期几等)在官方 API「定时运行」文档,教程只列了这几个。
  • 低频业务逻辑要自己写:run_daily 只控制触发频率的下界,做不到「每 10 天一次」。轮动 1.0 用计数变量:if g.days % g.period == 1: 才执行,每天末尾 g.days += 1
  • 多节奏并存(第 7 篇思想):交易按天、止损按分钟——把止损单独抽成函数、用不同 time 的 run_daily 挂进去,两个节奏互不干扰。
  • 用途分类:handle_data 做不了 / 不便做的定时动作(开盘卖光、盘前取数、跨周期控制)都交给 run_daily;教程建议新代码一律用它。

来源

常见混淆

  • every_bar ≠ 每天:它的语义是「跟随当前回测周期」。同段代码按天回测=日频,按分钟回测=分钟频;想要「固定每天」要用 open/before_open 之类取值。
  • run_daily 注册 ≠ 立即执行:注册只是告知平台「这个时点叫我」,真正执行按 time 触发,低频(每 N 天)仍要靠计数器。
  • 与 handle_data 的区别:handle_data 是平台内置每周期入口,不能改时机;run_daily 可以给多个自定义函数分别设时机,代码组织也更清晰。

开放问题

  • [需要验证] run_daily time 参数完整取值表与历史版本差异(教程只覆盖 every_bar/open/before_open 三个)。
  • [需要验证] 分钟级止损在真实回测里的开销与滑点影响(教程只给了思路,未给完整代码与实测)。

更新 2026-09-06

检索知识库

按标题、类型或正文检索