🚀 AI 一键生成 joinquant 策略代码

JoinQuant 聚宽 run_daily 实现每 5 分钟定时操作的正确写法

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

问题描述

run_daily里怎么实现每5分钟操作呢?

如题,run_daily(market_open, time='5m'),想这样写,但是报错了,应该怎么写呢?查API只查到定时和‘every_bar’

解决方案

在 JoinQuant 聚宽平台中,run_dailytime 参数确实不支持直接传入 '5m' 这种格式。time 参数只接受具体的时间字符串(如 '09:30')或者 'every_bar'

要实现每 5 分钟执行一次操作,你需要将策略的运行频率设置为“分钟”,然后使用 'every_bar' 让函数每分钟触发一次,并在函数内部通过判断当前时间(context.current_dt)的分钟数是否为 5 的倍数来决定是否执行核心逻辑。

正确的实现方法

以下是具体的代码示例:

# 导入聚宽函数库
import jqdata

def initialize(context):
    # 设定基准和真实价格模式
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 注册定时运行函数,设置为每分钟触发一次
    # 注意:回测界面的运行频率必须选择“分钟”
    run_daily(market_open, time='every_bar')

def market_open(context):
    # 获取当前时间的分钟数
    current_minute = context.current_dt.minute
    
    # 判断分钟数是否为 5 的倍数(即 0, 5, 10, 15...)
    if current_minute % 5 == 0:
        # 在这里写你每 5 分钟需要执行的操作
        log.info("当前时间:%s,执行 5 分钟定时操作", context.current_dt)
        
        # 示例:获取数据或下单
        # order('000001.XSHE', 100)

关键点解析:

  1. 回测频率设置:在回测或模拟交易的设置页面,运行频率必须选择“分钟”。如果选择“天”,'every_bar' 只会在每天开盘时触发一次。
  2. 时间判断逻辑context.current_dt.minute % 5 == 0 确保了只有在分钟数为 0, 5, 10, 15 等时刻,才会进入 if 语句内部执行你的交易逻辑。其余 4 分钟函数虽然被调用,但会直接跳过,不会消耗太多资源。
  3. 替代方案 (handle_data):你也可以不使用 run_daily,而是直接使用 handle_data(context, data) 函数,并在里面加上同样的 if context.current_dt.minute % 5 == 0: 判断,效果是完全一样的。