🚀 AI 一键生成 joinquant 策略代码

JoinQuant 交易日历 API:get_all_trade_days 与 get_trade_days 使用详解

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

问题描述

如何获取过去所有交易日的列表?

解决方案

在 JoinQuant(聚宽)平台中,获取过去交易日列表主要有两个常用的 API 函数:get_all_trade_daysget_trade_days

以下是具体的获取方法和代码示例:

方法一:获取历史上所有交易日

使用 get_all_trade_days() 可以获取平台数据库中记录的所有交易日(包含过去以及当年剩余的未来交易日)。

from jqdata import *

# 获取所有交易日列表
# 返回一个 numpy.ndarray,包含 datetime.date 对象
all_days = get_all_trade_days()

print(f"交易日总数: {len(all_days)}")
print(f"第一个交易日: {all_days[0]}")
print(f"最后一个记录的交易日: {all_days[-1]}")

方法二:获取指定日期之前的交易日(推荐)

如果您只想获取截止到当前或指定日期的过去交易日,建议使用 get_trade_days

参数说明:

  • start_date: 开始日期(可选)。
  • end_date: 结束日期(可选)。默认为 datetime.date.today()(研究环境)或 context.current_dt(回测环境)。
  • count: 数量(可选,与 start_date 二选一)。

示例代码:

from jqdata import *
import datetime

# 1. 获取截止到今天的所有过去交易日(默认从平台最早数据开始)
past_days = get_trade_days(end_date=datetime.date.today())
print(f"截止今日的交易日数量: {len(past_days)}")

# 2. 获取指定时间段内的交易日(例如 2023年全年)
days_2023 = get_trade_days(start_date='2023-01-01', end_date='2023-12-31')
print(f"2023年交易日列表: {days_2023}")

# 3. 获取最近 N 个交易日(例如最近 5 天)
last_5_days = get_trade_days(end_date=datetime.date.today(), count=5)
print(f"最近5个交易日: {last_5_days}")

Q&A 常见问题解答

Q: get_all_trade_daysget_trade_days 的返回值类型有什么区别?
A: get_all_trade_days() 返回的是 numpy.ndarray 数组,而 get_trade_days() 返回的是包含 datetime.date 对象的 list(列表)。在使用时请注意数据类型的差异。

Q: 如何判断今天是否是交易日?
A: 可以获取今天的日期,然后判断它是否在交易日列表中。

import datetime
from jqdata import *

today = datetime.date.today()
all_days = get_all_trade_days()

if today in all_days:
    print("今天是交易日")
else:
    print("今天不是交易日")

Q: 回测环境中 get_trade_days() 的默认结束日期是什么?
A: 在回测环境中,如果不指定 end_date,默认结束日期是回测当前的逻辑时间(context.current_dt),而不是现实世界的今天。这有助于避免引入未来函数。

Q: 获取的交易日包含周末或节假日吗?
A: 不包含。这两个函数返回的都是实际开盘交易的日期,自动剔除了周末和法定节假日休市。