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

JoinQuant 平台 handle_data 函数如何区分日线与分钟级别回测?

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

问题描述

handle_data 怎么区分日线级别或分钟级别回测

在handle_data(context, data)函数中,没发现怎么设置日线级别还是分钟级别的回测参数,想问下怎么设置?

解决方案

在 JoinQuant(聚宽)平台中,handle_data(context, data) 函数本身的参数中并没有用于设置日线级别还是分钟级别的参数。它的运行频率是由您在网页端的回测/模拟交易配置界面中设置的。

1. 如何设置回测频率?

handle_data 的调用频率完全取决于您在启动回测时选择的**“运行频率”**:

  • 在网页端设置:在聚宽策略编写页面的右上方(或回测配置面板中),有一个**“频率”选项。您可以选择“每天”“每分钟”**。
  • 按天回测:如果您选择了“每天”,handle_data 就会在每个交易日调用一次(通常在 9:30 左右触发,具体取决于底层撮合机制)。此时传入的 data 是前一天的日线数据。
  • 按分钟回测:如果您选择了“每分钟”,handle_data 就会在交易时间的每一分钟调用一次(每天 240 次)。此时传入的 data 是上一分钟的分钟线数据。

2. 官方推荐的替代方案:使用定时运行函数

虽然 handle_data 可以通过界面设置频率,但聚宽官方目前更推荐使用定时运行函数(如 run_dailyrun_weeklyrun_monthly)来替代 handle_data。使用定时运行函数可以让您在代码中精确控制策略的执行时间,而不需要依赖全局的频率设置。

示例:使用 run_daily 替代 handle_data

def initialize(context):
    # 每天 9:30 运行一次(相当于按天回测的 handle_data)
    run_daily(my_trade_logic, time='09:30')
    
    # 如果你想每分钟运行一次,可以这样设置(前提是网页端频率必须选“按分钟”):
    # run_daily(my_trade_logic, time='every_bar')

def my_trade_logic(context):
    # 在这里编写你的交易逻辑
    # 注意:定时运行函数只接受 context 参数,不再提供 data 参数
    # 你可以使用 get_price 或 attribute_history 来获取数据
    pass

总结

  • handle_data 的频率:在网页右上角的回测设置中选择“每天”或“每分钟”。
  • 最佳实践:建议在 initialize 中使用 run_daily 等定时函数来显式指定运行时间,这样代码的意图更清晰,且灵活性更高。注意,如果在一个策略中同时使用了 run_dailyhandle_data,可能会导致逻辑混乱,官方建议不要在同一个策略中混用