问题描述
解决方案
在聚宽(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])
注意事项
- 库的导入:必须先执行
from jqdata import *或from jqdata import get_trade_days。 - 参数互斥:
start_date和count不能同时存在。 - 回测环境:在回测或模拟交易中,如果不指定
end_date,默认使用的是context.current_dt(当前回测时间)。 - 数据类型:返回的是
numpy数组,里面的元素是datetime.date类型。如果需要字符串格式,需要自行转换(例如使用strftime)。
Q&A
Q: get_trade_days 返回的数据类型是什么?
A: 返回的是一个 numpy.ndarray,其中的元素是 python 的标准 datetime.date 对象。
Q: 如果传入的 start_date 或 end_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股市场的交易日历。虽然大部分情况下期货交易日与股票交易日重合,但如果涉及夜盘或特定节假日差异,建议参考期货特定的日历处理逻辑或通过行情数据判断。