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

聚宽(JoinQuant)如何实现类似优矿refresh_rate的自定义调仓间隔?

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

问题描述

请问聚宽有优矿的“efresh_rate”类似功能函数吗?

efresh_rate 表示调仓间隔的时间,每次触发handle_data的间隔时间。

解决方案

在聚宽(JoinQuant)平台中,没有直接对应优矿 refresh_rate 的参数来直接控制 handle_data 的触发间隔。聚宽的 handle_data 默认是根据你设置的回测频率(按天或按分钟)每个单位时间触发一次。

但是,聚宽提供了非常灵活的定时运行函数以及全局变量机制,你可以通过以下两种主要方式完美实现 refresh_rate(自定义调仓间隔)的功能:

方法一:使用聚宽的定时运行函数(推荐)

聚宽推荐使用 run_dailyrun_weeklyrun_monthly 来替代 handle_data 进行周期性调仓。这是最符合聚宽 API 风格的做法。

  • 按周调仓(类似 refresh_rate = 5 天)
def initialize(context):
    # 设定每周的第一个交易日开盘时运行调仓函数
    run_weekly(rebalance, weekday=1, time='09:30')

def rebalance(context):
    # 在这里编写你的调仓逻辑
    log.info("执行每周调仓")
    pass
  • 按月调仓(类似 refresh_rate = 20 天左右)
def initialize(context):
    # 设定每月的第一个交易日开盘时运行调仓函数
    run_monthly(rebalance, monthday=1, time='09:30')

def rebalance(context):
    # 在这里编写你的调仓逻辑
    log.info("执行每月调仓")
    pass

方法二:在 handle_data 中自定义计数器(实现任意 N 天调仓)

如果你确实需要严格的“每隔 N 个交易日”调仓(比如每隔 3 天,每隔 10 天),你可以利用全局变量 ghandle_data 中自己维护一个计数器。

def initialize(context):
    # 设置调仓间隔天数 (类似 refresh_rate = N)
    g.refresh_rate = 5 
    # 初始化计数器
    g.days_count = 0   

def handle_data(context, data):
    # 每次触发 handle_data 时,计数器加 1
    g.days_count += 1
    
    # 判断是否达到了调仓间隔
    if g.days_count % g.refresh_rate == 0:
        log.info(f"达到调仓周期,当前天数:{g.days_count},执行调仓")
        rebalance(context, data)

def rebalance(context, data):
    # 具体的买卖逻辑写在这里
    pass

总结

  • 如果你只是需要按周按月调仓,强烈建议使用 run_weeklyrun_monthly,代码更简洁且易于维护。
  • 如果你需要任意指定天数(如每 7 天、每 12 天)的绝对间隔,使用方法二的计数器是最直接的替代方案。