🚀 AI 一键生成 joinquant 策略代码

JoinQuant聚宽平台判断每月最后一个交易日的实现方法

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

问题描述

怎么判断当天是否是每个月的最后一个交易日?

怎么判断当天是否是每个月的最后一个交易日?

解决方案

在JoinQuant(聚宽)平台上,判断当天是否为每个月的最后一个交易日,通常有两种常用的方法。具体取决于您的应用场景:如果是为了在月末执行调仓,推荐使用定时任务;如果是需要在盘中逻辑里动态判断,可以使用交易日历API。

方法一:使用 run_monthly 定时任务(推荐用于月末调仓)

如果您只是想在每个月的最后一个交易日执行某些操作(例如月末调仓),最简单的方法是使用聚宽提供的定时运行函数 run_monthly,并将 monthday 参数设置为 -1

def initialize(context):
    # 指定每月倒数第一个交易日,在开盘前(9:00)执行
    run_monthly(monthly_rebalance, monthday=-1, time='9:00')

def monthly_rebalance(context):
    print('今天是本月最后一个交易日,执行月末调仓逻辑')
    # 在这里编写您的调仓代码

方法二:使用交易日历进行逻辑判断

如果您需要在 handle_data 或其他非定时函数中动态判断今天是否是本月的最后一个交易日,可以通过获取下一个交易日,并比较月份是否发生变化来实现。

from jqdata import *

def initialize(context):
    run_daily(check_last_trade_day, time='9:30')

def check_last_trade_day(context):
    # 获取当前逻辑日期
    current_date = context.current_dt.date()
    
    # 获取从今天开始的未来2个交易日(包含今天)
    # count=2 表示获取今天和下一个交易日
    trade_days = get_trade_days(start_date=current_date, count=2)
    
    # 如果获取到的交易日数量大于1,说明有下一个交易日
    if len(trade_days) > 1:
        next_trade_date = trade_days[1]
        # 如果下一个交易日的月份和今天的月份不同,说明今天是本月最后一个交易日
        if next_trade_date.month != current_date.month:
            print(f"{current_date} 是本月最后一个交易日!")
            # 执行月末逻辑
        else:
            print(f"{current_date} 不是本月最后一个交易日。")

总结

  • 定时执行:直接在 initialize 中使用 run_monthly(func, monthday=-1),这是最优雅且性能最好的方式。
  • 动态判断:利用 get_trade_days 获取下一个交易日,对比月份是否变更。这种方法适用于更复杂的条件触发场景。