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

JoinQuant 策略调度进阶:run_monthly 函数 monthday 参数详解与倒数交易日设置指南

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

问题描述

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

Title: joinquant 策略调度进阶:run_monthly 函数 monthday 参数详解

Question: 如何在 joinquant 中设置按月倒数第 N 个交易日执行策略?

解决方案

JoinQuant 策略调度进阶:run_monthly 函数 monthday 参数详解

在 JoinQuant(聚宽)量化平台中,针对月度调仓或定期统计的策略,推荐使用 run_monthly 定时运行函数。通过灵活配置 monthday 参数,可以轻松实现基于正向或倒数交易日的定时调度。


一、如何在 JoinQuant 中设置按月倒数第 N 个交易日执行策略?

run_monthly 函数中,monthday 参数支持使用负数来指定从月末倒数计算的交易日。例如:

  • monthday = -1:表示每月的最后一个交易日(倒数第一个交易日)。
  • monthday = -2:表示每月的倒数第二个交易日
  • monthday = -N:表示每月的倒数第 N 个交易日

示例代码:在每月倒数第一个交易日开盘执行

def initialize(context):
    # 开启动态复权模式
    set_option('use_real_price', True)
    
    # 设置在每月倒数第一个交易日的 09:30 执行 rebalance 函数
    run_monthly(rebalance, monthday=-1, time='09:30', reference_security='000300.XSHG')

def rebalance(context):
    log.info("今天是本月最后一个交易日,执行调仓逻辑:%s" % context.current_dt)
    # 在此处编写买卖逻辑

二、run_monthly 函数参数详解

run_monthly 的完整调用语法如下:

run_monthly(func, monthday, time='9:30', reference_security='000001.XSHG', force=False)

参数说明

  1. func (function): 自定义的回调函数,该函数必须且只能接受一个参数 context
  2. monthday (int): 每月的第几个交易日。
    • 正整数(如 1):表示当月第 1 个交易日。
    • 负整数(如 -1):表示当月倒数第 1 个交易日。
  3. time (str): 具体执行时间,支持以下格式:
    • 24 小时制字符串,如 '09:30', '14:50', '15:30' 等。
    • 'every_bar':按回测/模拟的频率每 Bar 运行一次(通常在日线或分钟级别使用)。
  4. reference_security (str): 时间参照标的代码,默认 '000001.XSHG'(上证指数)。针对期货等特殊交易时间的品种,建议设置为对应的合约或主向合约(如 'IF9999.CCFX')。
  5. force (bool): 注册回调函数的时间晚于第一次回调执行时间时,是否就近执行。建议设置为 False,避免不必要的重复触发。

三、注意事项与最佳实践

  1. 月交易日数不足处理
    若设置的 monthday 绝对值超出了当月的实际交易日总数,JoinQuant 默认会取最临近的交易日执行。例如当月只有 20 个交易日而设置了 monthday=22monthday=-22,引擎会自适应匹配。
  2. 策略首月运行规则
    策略启动当月的第一个交易日是从策略实际开始运行的那一天起算的,次月起恢复为自然月的交易日计算。
  3. 与 handle_data 的兼容性
    推荐使用 run_daily/run_weekly/run_monthly 系列计划任务函数管理运行时间,避免与 handle_data 混用以提高策略执行效率。