🚀 AI 一键生成 joinquant 策略代码

如何在 JoinQuant 中获取指定日期范围内的所有交易日?

joinquant | 发布时间: 2025/12/16
以下内容由 EasyQuant 生成。

问题描述

如何获取从今天往前数 10 个交易日的日期列表?

解决方案

在 JoinQuant 聚宽平台中,获取从今天(或指定日期)往前数特定数量的交易日列表,主要使用 get_trade_days 函数。

以下是具体的实现方法和代码示例。

获取最近10个交易日日期列表

使用 get_trade_days 函数,通过设置 count 参数为 10,并指定 end_date 为当前日期,即可获取包括当前日期在内的前 10 个交易日。

1. 在研究环境(Research)中使用

在研究环境中,默认的结束日期是系统当天的日期。

from jqdata import *
import datetime

# 获取截止到今天的前10个交易日(包含今天)
# 如果今天不是交易日,则从最近的一个交易日往前推
dates = get_trade_days(count=10)

print(dates)

2. 在回测或模拟交易(Strategy)中使用

在策略代码中,“今天”指的是回测运行到的当前逻辑时间(context.current_dt)。

def handle_data(context, data):
    # 获取截止到回测当前时间的前10个交易日
    # end_date 必须指定为 context.current_dt 或 context.previous_date
    dates = get_trade_days(end_date=context.current_dt, count=10)
    
    # 打印结果
    log.info(dates)
    
    # 示例:获取列表中的第一个日期(10天前)和最后一个日期(今天)
    first_date = dates[0]
    last_date = dates[-1]

函数说明

  • 函数名: get_trade_days(start_date=None, end_date=None, count=None)
  • 参数:
    • end_date: 结束日期。在回测中通常传入 context.current_dt。如果不传,默认为 datetime.date.today()
    • count: 数量。表示取 end_date 往前的 count 个交易日,包含 end_date 当天(如果当天是交易日)。
    • 注意:start_datecount 不能同时使用。
  • 返回值: 一个包含 datetime.date 对象的 numpy.ndarray 或列表。

Q&A

Q: get_trade_days 返回的数据类型是什么?
A: 返回的是一个包含 datetime.date 对象的数组(numpy array)。如果需要字符串格式,需要自行转换(例如使用 strftime)。

Q: 如果 end_date 当天是周六或周日,返回的列表包含当天吗?
A: 不包含。get_trade_days 只返回交易日。如果 end_date 是非交易日,它会从该日期之前的最近一个交易日开始往前数。

Q: 如何获取两个具体日期之间的所有交易日?
A: 不使用 count 参数,而是同时指定 start_dateend_date。例如:get_trade_days(start_date='2023-01-01', end_date='2023-01-31')

Q: 如何判断今天是否是交易日?
A: 可以使用 get_trade_days(start_date=date, end_date=date),如果返回的列表非空,则该日期为交易日;或者直接检查该日期是否在 get_all_trade_days() 返回的列表中。