问题描述
解决方案
在 JoinQuant(聚宽)平台中,获取过去交易日列表主要有两个常用的 API 函数:get_all_trade_days 和 get_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_days 和 get_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: 不包含。这两个函数返回的都是实际开盘交易的日期,自动剔除了周末和法定节假日休市。