🚀 AI 一键生成 joinquant 策略代码

JoinQuant 策略编程:如何使用 get_trade_days 获取指定区间的交易日?

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

问题描述

如何获取一段时间内的所有交易日列表?

解决方案

在聚宽(JoinQuant)平台中,获取一段时间内的所有交易日列表主要使用 get_trade_days 函数。该函数属于 jqdata 库。

以下是详细的使用说明和代码示例。

核心函数说明

1. get_trade_days

用于获取指定日期范围内的所有交易日。

函数签名:

get_trade_days(start_date=None, end_date=None, count=None)

参数说明:

  • start_date: 开始日期(字符串或 datetime 对象)。与 count 二选一,不可同时使用。
  • end_date: 结束日期(字符串或 datetime 对象)。默认为 datetime.date.today()(在回测中为当前回测日期)。
  • count: 数量(整数,必须大于0)。表示获取 end_date 往前的 count 个交易日。与 start_date 二选一。

返回值:

  • 返回一个包含 datetime.date 对象的 numpy.ndarray 数组。

2. get_all_trade_days

用于获取交易所公布的所有交易日列表(通常包含历史上所有交易日及未来已公布的交易日)。

函数签名:

get_all_trade_days()

代码示例

以下代码展示了如何在聚宽的研究环境或回测策略中使用这些函数。

示例 1:指定开始和结束日期

这是最常用的方式,用于获取两个日期之间的所有交易日。

# -*- coding: utf-8 -*-
from jqdata import *
import datetime

# 获取 2023年1月1日 到 2023年2月1日 之间的所有交易日
# 注意:结果包含 start_date 和 end_date 当天(如果是交易日的话)
trade_days = get_trade_days(start_date='2023-01-01', end_date='2023-02-01')

print("交易日数量:", len(trade_days))
print("交易日列表:", trade_days)

# 遍历打印
for day in trade_days:
    print(day)

示例 2:指定结束日期和数量

用于获取截止到某一天之前的 N 个交易日。

# -*- coding: utf-8 -*-
from jqdata import *

# 获取 2023年6月30日(含)往前推的 5 个交易日
last_5_days = get_trade_days(end_date='2023-06-30', count=5)

print("最近5个交易日:", last_5_days)

示例 3:获取所有交易日

# -*- coding: utf-8 -*-
from jqdata import *

# 获取系统记录的所有交易日
all_days = get_all_trade_days()

print("第一天:", all_days[0])
print("最后一天:", all_days[-1])

注意事项

  1. 库的导入:必须先执行 from jqdata import *from jqdata import get_trade_days
  2. 参数互斥start_datecount 不能同时存在。
  3. 回测环境:在回测或模拟交易中,如果不指定 end_date,默认使用的是 context.current_dt(当前回测时间)。
  4. 数据类型:返回的是 numpy 数组,里面的元素是 datetime.date 类型。如果需要字符串格式,需要自行转换(例如使用 strftime)。

Q&A

Q: get_trade_days 返回的数据类型是什么?
A: 返回的是一个 numpy.ndarray,其中的元素是 python 的标准 datetime.date 对象。

Q: 如果传入的 start_dateend_date 不是交易日怎么办?
A: 函数会自动处理。如果 start_date 不是交易日,它会从该日期之后的第一个交易日开始计算;如果 end_date 不是交易日,它会截止到该日期之前的最后一个交易日。

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

Q: 这个函数能获取期货的交易日吗?
A: get_trade_days 获取的是A股市场的交易日历。虽然大部分情况下期货交易日与股票交易日重合,但如果涉及夜盘或特定节假日差异,建议参考期货特定的日历处理逻辑或通过行情数据判断。