🚀 AI 一键生成 joinquant 策略代码
立即体验

JoinQuant 策略定时任务详解:run_daily 的 time 参数的三种高级用法

joinquant | 发布时间: 2026/7/27
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 定时任务设置:run_daily 的 time 参数的三种高级用法

Question: joinquant 的 run_daily 函数中 time 参数除了具体时间外还可以怎么设置?

解决方案

JoinQuant 策略定时任务详解:run_daily 的 time 参数的三种高级用法

在 JoinQuant(聚宽)量化交易平台中,run_daily 是最常用的策略定时运行函数。许多开发者习惯将其 time 参数设置为固定的时间点(例如 '09:30'),但实际上 time 参数支持三种灵活且高级的设置方式,以满足不同资产类别和回测频率的需求。


1. 设置为具体时间字符串(最常见用法)

你可以将 time 参数设置为 24 小时制内的任意具体时间,如字符串 'HH:MM'(在 tick 级策略中可精确到秒,如 'HH:MM:SS')。

  • 用法说明:在交易日的特定时间点触发指定的函数(精确到秒,例如 '14:50' 会在 14:50:00 执行)。
  • 适用场景:开盘定时选股、尾盘调仓平仓等。
  • 代码示例
def initialize(context):
    # 每天 09:30 开盘时运行
    run_daily(market_open, time='09:30')
    # 每天 14:50 尾盘调仓
    run_daily(close_market, time='14:50')

def market_open(context):
    log.info("开盘运行")

def close_market(context):
    log.info("尾盘调仓")

注意:当 time 指定为具体时间时,请勿同时设置 reference_security 参数。


2. 设置为 'every_bar'(随 Bar 频率运行)

time 设置为 'every_bar',函数的运行频率将完全与你在回测页面右上角设置的回测频率保持一致。

  • 用法说明
    • 按天回测:在交易日开盘时(09:30)调用一次。
    • 按分钟回测:在交易时间的每分钟第一秒运行一次(每天共执行 240 次)。
  • 适用场景:需要高频监控价格变化、实时计算指标并触发交易的策略(如双均线突破、实时追涨等)。
  • 代码示例
def initialize(context):
    # 设定按 Bar 运行(配合分钟回测即每分钟运行)
    run_daily(check_signals, time='every_bar')

def check_signals(context):
    # 获取上一分钟收盘价
    close_data = attribute_history(g.security, 5, '1m', ['close'])
    # 策略逻辑...

注意every_bar 只能在 run_daily 中调用,且 Tick 级别策略不支持设置为 'every_bar'


3. 设置为基于开盘时间的偏移量(如 'open+5m''open-10m'

对于有夜盘或不同交易时段的标的(如商品期货、金融期货),可以使用 'open''open+Xm''open-Xm' 这种相对时间格式。

  • 用法说明:以参照标的(reference_security)的实际开盘时间为基准,加上或减去指定分钟数来执行函数。
  • 适用场景:期货策略。因为不同期货品种(如夜盘 21:00 开盘)开盘时间不固定,使用相对开盘时间能完美适配各类合约。
  • 代码示例
def initialize(context):
    # 在螺纹钢主力合约开盘时(含夜盘21:00)运行
    run_daily(futures_open, time='open', reference_security='RB9999.XSGE')
    # 在开盘后 5 分钟运行
    run_daily(futures_check, time='open+5m', reference_security='RB9999.XSGE')

def futures_open(context):
    log.info("期货开盘运行,当前逻辑时间:%s" % context.current_dt)

def futures_check(context):
    log.info("期货开盘5分钟后运行")

注意:使用相对时间模式时,必须reference_security 设置为对应的参考标的代码(建议设置为对应的主力合约或品种指数)。


总结与注意事项

  1. 避免冲突:一个策略中建议统一使用 run_daily,避免同时混用 handle_data,更不能写出 run_daily(handle_data, ...)
  2. 参数限制run_daily 调用的函数只能有一个参数 context,无法直接接收 data 参数,如需获取行情数据请通过 get_price / attribute_history / get_bars 等 API 获取。
  3. 多任务设置:一个策略中可以写多个 run_daily 来实现不同的定时逻辑,同一个时间点触发多个任务时,系统会按照代码注册顺序执行。