- 功能描述:获取股票及期货交易所交易日历数据,默认提取的是上交所
- 返回限量:一次请求足以获取单一交易所所有的交易日历
- 接口权限:每分钟访问次数因用户积分不同而不同
- 说明:
1. 该数据从1991/01/01开始,每年年底以国家披露次年假期进行更新
2. 该数据包含的是整年数据,例如2027/07/11日也可获取2026/12/31日的记录
3. tushare的数据接口中,很多是以交易日、周最后一个交易日、月最后一个交易日作为传入参数来获取数据的,trade_cal接口在此就起到了关键性作用
输入参数:
名称 |
类型 |
必选 |
描述 |
exchange |
str |
N |
交易所代码:SSE-上交所、SZSE-深交所、CFFEX-中金所、SHFE-上期所、CZCE-郑商所、DCE-大商所、INE-上能源 |
start_date |
str |
N |
开始日期(格式:YYYYMMDD 下同) |
end_date |
str |
N |
结束日期 |
is_open |
str |
N |
是否开市:'0'-休市、'1'-开市 |
输出参数:
名称 |
类型 |
默认显示 |
描述 |
exchange |
str |
Y |
交易所代码 |
cal_date |
str |
Y |
日历日期 |
is_open |
str |
Y |
是否开市 |
pretrade_date |
str |
Y |
上一个交易日 |
接口示例:
示例1:全默认参数
如果是对A股交易日的获取,通常情况下仅使用上交所交易日历足矣,此时仅使用默认参数将所有的交易日历获取之后存储在本地就可以在当年一直使用了。
import tushare as ts pro = ts.pro_api() df = pro.trade_cal() df
输出结果:
exchange cal_date is_open pretrade_date 0 SSE 20261231 1 20261230 1 SSE 20261230 1 20261229 2 SSE 20261229 1 20261228 3 SSE 20261228 1 20261225 4 SSE 20261227 0 20261225 ... ... ... ... ... 13157 SSE 19901223 0 19901221 13158 SSE 19901222 0 19901221 13159 SSE 19901221 1 19901220 13160 SSE 19901220 1 19901219 13161 SSE 19901219 1 None 13162 rows × 4 columns
示例2:获取中金所一段时间里仅开市的交易日
向交易日历trade_cal接口传入exchange可指定交易所,传入start_date和end_date可指定时间段,传入is_open可仅获取开市的交易日。
由于年中的时候也能够获取到全年的交易日,所以如果不用日期进行限定的话可能会导致使用了未来交易日去请求数据,虽然请求了空数据问题不大,可以使用两种方案来杜绝这种无效的请求:
- 向trade_date中将“今天”传入end_date来获取今天及以前的交易日期;
- 在trade_date获取了所有交易日后,用“今天”来过滤交易日期,使用今天及以前的交易日去请求数据。
from datetime import datetime today = datetime.now().strftime('%Y%m%d') df = pro.trade_cal(exchange='CFFEX', start_date='20260101', end_date=today, is_open='1') df
输出结果:
exchange cal_date is_open pretrade_date 0 CFFEX 20260710 1 20260709 1 CFFEX 20260709 1 20260708 2 CFFEX 20260708 1 20260707 3 CFFEX 20260707 1 20260706 4 CFFEX 20260706 1 20260703 ... ... ... ... ... 119 CFFEX 20260109 1 20260108 120 CFFEX 20260108 1 20260107 121 CFFEX 20260107 1 20260106 122 CFFEX 20260106 1 20260105 123 CFFEX 20260105 1 20251231 124 rows × 4 columns
示例3:获取每周及每月最后一个交易日
获取每周或每月交易日的时候,可以:1)先获取所有交易日,2)再将交易日转换为相应的周期关键字,3)根据周期关键字进行分组获取最后一个交易日期,4)最后再使用“今天”对交易日进行过滤
注意,在根据周期关键字进行分组获取最后一个交易日期之前不要先使用“今天”(或者特定日期)对交易日进行筛选。否则由于最后一周或者最后一月的尾部部分的交易日被过滤掉了,从而导致筛选出的最后一周或者最后一月的最后一个交易日是错的。
import pandas as pd # 获取所有的交易日,注意不要使用end_date进行限制 df = pro.trade_cal(start_date='20260101', is_open='1') # 将交易日转换为周周期,并获取每周的最后一个交易日 # 将W替换为M,就可以筛选出每月的最后一个交易日 df['key'] = pd.to_datetime(df['cal_date']).dt.to_period('W') lst_last_days = df.sort_values('cal_date').groupby('key').last().reset_index(drop=True)['cal_date'].tolist() # 过滤掉大于今天的日期 today = datetime.now().strftime('%Y%m%d') lst_last_days_filtered = [day for day in lst_last_days if day <= today] lst_last_days_filtered[-6:]
输出结果:
['20260605', '20260612', '20260618', '20260626', '20260703', '20260710']
说明:
本文说明
本文旨在对Tushare的交易日历trade_cal数据接口进行介绍,提供更多参考示例和使用说明。交易日历可以用来作为获取其他数据的关键(迭代)参数,也可以进行其他的应用。本文还基于交易日介绍了如何获取每周及每月最后一个交易日。目的是为了让用户和AIGC工具能够更便捷、准确地使用该接口。大家在使用过程中遇到什么问题和建议可在线留言,作者会进行数据探索并将建议反馈给Tushare团队。本文另一个目的也是为了聚集大家的智慧以创建“我为人人,人人为我”的共创氛围。