🚀 AI 一键生成 joinquant 策略代码

JoinQuant 聚宽平台 handle_data 函数设置分钟级运行频率详解

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

问题描述

handle_data 如何设置1分钟运行一次呢?

handle_data(context, '399001.XSHE') 这样是一天一次 如何每分钟运行一次

解决方案

在 JoinQuant (聚宽) 平台中,handle_data 函数的运行频率不是通过代码参数来设置的,而是由您在创建回测或模拟交易时选择的**“运行频率”**决定的。

另外,您给出的示例 handle_data(context, '399001.XSHE') 存在语法错误。handle_data 的标准定义是 def handle_data(context, data):,第二个参数 data 是一个包含当前时间切片数据的字典,不能直接传入标的代码。

要实现每分钟运行一次策略,您有以下两种方法:

方法一:使用 handle_data 并设置回测频率为“分钟”

  1. 编写代码:保持 handle_data 的标准写法。
  2. 界面设置:在聚宽回测界面的右上方(或创建模拟交易时),将**“频率”选项从“天”修改为“分钟”**。

这样设置后,引擎会自动在交易时间的每一分钟调用一次 handle_data

def initialize(context):
    # 初始化设置
    g.security = '399001.XSHE'

# 只要在界面选择了“分钟”频率,这个函数就会每分钟执行一次
def handle_data(context, data):
    # 获取当前分钟的收盘价
    current_price = data[g.security].close
    log.info("当前时间:%s, 价格:%s" % (context.current_dt, current_price))

方法二:使用 run_daily 定时函数(官方更推荐)

聚宽官方文档建议尽量使用 run_daily 来代替 handle_data,因为 run_daily 的时间控制更加灵活和明确。您可以使用 time='every_bar' 参数来实现每分钟运行。

注意:使用此方法同样需要在回测界面将频率设置为“分钟”。

def initialize(context):
    g.security = '399001.XSHE'
    
    # 注册定时运行函数,time='every_bar' 表示在每个 Bar(分钟频率下即每分钟)运行
    run_daily(my_minute_strategy, time='every_bar')

# 自定义策略函数,注意参数只有 context
def my_minute_strategy(context):
    # 在 run_daily 调用的函数中,不再提供 data 参数,需要使用 API 获取数据
    current_data = get_current_data()
    current_price = current_data[g.security].last_price
    
    log.info("当前时间:%s, 最新价格:%s" % (context.current_dt, current_price))

总结

  • 频率控制:无论是 handle_data 还是 run_daily(..., time='every_bar'),要实现分钟级运行,必须在回测/模拟配置界面选择“分钟”频率
  • 代码规范:不要修改系统回调函数(如 handle_data)的默认参数结构。
  • 最佳实践:推荐使用 run_daily 结合 get_current_data()get_price()/history() 来编写策略,结构更清晰。