交易日历#
日历函数默认 market="cn";美股使用 market="us"。
日期区间包含两端,前后偏移严格排除输入日。详见 交易日历。
函数 / 类 |
解决的问题 |
|---|---|
查询日期区间内的交易日 |
|
判断某一天是否开市 |
|
向前偏移 n 个交易日 |
|
向后偏移 n 个交易日 |
|
取截至某日的最近 n 个交易日 |
|
统计区间内的交易日数量 |
|
取得当前日历包含的全部交易日 |
|
确认日历有效区间,避免越界查询 |
get_trading_dates — 查询日期区间内的交易日#
- libfinance.get_trading_dates(start_date, end_date, market='cn')[源代码]#
获取某个区间的交易日期
- 参数
start_date – 开始日期
end_date – 结束日期
market – 市场,cn(默认)或 us
- 返回
pandas.DatetimeIndex,包含起止日期之间的交易日(含两端)。
示例
1. 区间内的 A 股交易日
print(lf.get_trading_dates("2024-01-01", "2024-01-31", market="cn"))
DatetimeIndex(['2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05', '2024-01-08', '2024-01-09', '2024-01-10', '2024-01-11', '2024-01-12', '2024-01-15', '2024-01-16', '2024-01-17', '2024-01-18', '2024-01-19', '2024-01-22', '2024-01-23', '2024-01-24', '2024-01-25', '2024-01-26', '2024-01-29', '2024-01-30', '2024-01-31'], dtype='datetime64[us]', freq=None)
show(lf::get_trading_dates("2024-01-01", "2024-01-31", "cn"));
[2024-01-02, 2024-01-03, 2024-01-04, 2024-01-05, 2024-01-08, 2024-01-09, 2024-01-10, 2024-01-11, 2024-01-12, 2024-01-15, 2024-01-16, 2024-01-17, 2024-01-18, 2024-01-19, 2024-01-22, 2024-01-23, 2024-01-24, 2024-01-25, 2024-01-26, 2024-01-29, 2024-01-30, 2024-01-31] (22 days)
2. 同一区间换成美股,交易日不同
print(lf.get_trading_dates("2024-01-01", "2024-01-31", market="us"))
DatetimeIndex(['2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05', '2024-01-08', '2024-01-09', '2024-01-10', '2024-01-11', '2024-01-12', '2024-01-16', '2024-01-17', '2024-01-18', '2024-01-19', '2024-01-22', '2024-01-23', '2024-01-24', '2024-01-25', '2024-01-26', '2024-01-29', '2024-01-30', '2024-01-31'], dtype='datetime64[us]', freq=None)
show(lf::get_trading_dates("2024-01-01", "2024-01-31", "us"));
[2024-01-02, 2024-01-03, 2024-01-04, 2024-01-05, 2024-01-08, 2024-01-09, 2024-01-10, 2024-01-11, 2024-01-12, 2024-01-16, 2024-01-17, 2024-01-18, 2024-01-19, 2024-01-22, 2024-01-23, 2024-01-24, 2024-01-25, 2024-01-26, 2024-01-29, 2024-01-30, 2024-01-31] (21 days)
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:相同日期区间也可能包含不同交易日:示例突出中美日历在 1 月 15 日的区别。
is_trading_date — 判断某一天是否开市#
- libfinance.is_trading_date(date, market='cn')[源代码]#
判断指定日期是否为交易日
- 参数
date – 指定日期
market – 市场,cn(默认)或 us
- 返回
bool,交易日为 True,非交易日为 False;超出日历范围会报错。
示例
1. 周一开市
print(lf.is_trading_date("2024-01-08", market="cn"))
True
show(lf::is_trading_date("2024-01-08", "cn"));
True
2. 周日休市
print(lf.is_trading_date("2024-01-07", market="cn"))
False
show(lf::is_trading_date("2024-01-07", "cn"));
False
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:结果为布尔值,可直接用于条件判断。
get_previous_trading_date — 向前偏移 n 个交易日#
- libfinance.get_previous_trading_date(date, n=1, market='cn')[源代码]#
获取指定日期之前的第 n 个交易日
- 参数
date – 指定日期
n – 第 n 个交易日
market – 市场,cn(默认)或 us
- 返回
pandas.Timestamp,严格早于输入日期的第 n 个交易日。
示例
1. 严格早于输入日的上一个交易日
print(lf.get_previous_trading_date("2024-01-08"))
2024-01-05 00:00:00
show(lf::get_previous_trading_date("2024-01-08"));
2024-01-05
2. n=3:往前第三个交易日,不是减三天
print(lf.get_previous_trading_date("2024-01-08", n=3))
2024-01-03 00:00:00
show(lf::get_previous_trading_date("2024-01-08", 3));
2024-01-03
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:n=1 与 n=3 分别回到上一个和第三个交易日,均不包含输入日。
get_next_trading_date — 向后偏移 n 个交易日#
- libfinance.get_next_trading_date(date, n=1, market='cn')[源代码]#
获取指定日期之后的第 n 个交易日
- 参数
date – 指定日期
n – 第 n 个交易日
market – 市场,cn(默认)或 us
- 返回
pandas.Timestamp,严格晚于输入日期的第 n 个交易日。
示例
1. 严格晚于输入日的下一个交易日
print(lf.get_next_trading_date("2024-01-05"))
2024-01-08 00:00:00
show(lf::get_next_trading_date("2024-01-05"));
2024-01-08
2. n=3:往后第三个交易日
print(lf.get_next_trading_date("2024-01-05", n=3))
2024-01-10 00:00:00
show(lf::get_next_trading_date("2024-01-05", 3));
2024-01-10
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:周五之后的第一个交易日是周一;n=3 是第三个交易日,不是三个自然日。
get_n_trading_dates_until — 取截至某日的最近 n 个交易日#
- libfinance.get_n_trading_dates_until(date, n, market='cn')[源代码]#
获取截至指定日期(含)的最后 n 个交易日
- 参数
date – 指定日期
n – 交易日个数
market – 市场,cn(默认)或 us
- 返回
pandas.DatetimeIndex,截至该日的最近 n 个交易日;历史不足 n 个时返回已有日期。
示例
1. 截至周一(含)的最近 5 个交易日
print(lf.get_n_trading_dates_until("2024-01-08", n=5))
DatetimeIndex(['2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05', '2024-01-08'], dtype='datetime64[us]', freq=None)
show(lf::get_n_trading_dates_until("2024-01-08", 5));
[2024-01-02, 2024-01-03, 2024-01-04, 2024-01-05, 2024-01-08] (5 days)
2. 截至周日:从此前最近的交易日往回数
print(lf.get_n_trading_dates_until("2024-01-07", n=5))
DatetimeIndex(['2023-12-29', '2024-01-02', '2024-01-03', '2024-01-04', '2024-01-05'], dtype='datetime64[us]', freq=None)
show(lf::get_n_trading_dates_until("2024-01-07", 5));
[2023-12-29, 2024-01-02, 2024-01-03, 2024-01-04, 2024-01-05] (5 days)
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:输入交易日时包含当天;输入周日时窗口截至此前的周五。
count_trading_dates — 统计区间内的交易日数量#
- libfinance.count_trading_dates(start_date, end_date, market='cn')[源代码]#
统计区间内的交易日数量
- 参数
start_date – 开始日期
end_date – 结束日期
market – 市场,cn(默认)或 us
- 返回
int,区间内的交易日数量(含两端)。
示例
1. 只要样本数时直接计数
print(lf.count_trading_dates("2024-01-01", "2024-01-31", market="cn"))
22
show(lf::count_trading_dates("2024-01-01", "2024-01-31", "cn"));
22
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:返回整数,不返回日期列表;这里统计的是交易日而非自然日。
get_all_trading_dates — 取得当前日历包含的全部交易日#
- libfinance.get_all_trading_dates(market='cn')[源代码]#
获取全部交易日。
- 参数
market – 市场,cn(默认)或 us
- 返回
pandas.DatetimeIndex,当前日历内全部交易日。
示例
1. 当前日历包含的全部交易日
dates = lf.get_all_trading_dates(market="cn")
print(len(dates), dates[0], dates[-1])
8797 1990-12-19 00:00:00 2026-12-31 00:00:00
const auto dates = lf::get_all_trading_dates("cn");
std::cout << dates.size() << " " << dates.front() << " " << dates.back() << "\n";
8797 1990-12-19 2026-12-31
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:示例打印交易日的个数与首尾两天;完整结果是日期索引(DatetimeIndex),不是带证券列的 DataFrame。
get_calendar_coverage — 确认日历有效区间,避免越界查询#
- libfinance.get_calendar_coverage(market='cn')[源代码]#
获取日历的权威区间——本 release 确认到哪一天。
- 参数
market – 市场,cn(默认)或 us
- 返回
dict,包含 history_start(历史起点)和 confirmed_through(确认上界),值为 pandas.Timestamp。
示例
1. A 股日历确认到哪天(不是行情更新到哪天)
print(lf.get_calendar_coverage(market="cn"))
{'history_start': Timestamp('1990-12-01 00:00:00'), 'confirmed_through': Timestamp('2026-12-31 00:00:00')}
const auto coverage = lf::get_calendar_coverage("cn");
std::cout << coverage.history_start << " .. " << coverage.confirmed_through << "\n";
1990-12-01 .. 2026-12-31
2. 美股日历的覆盖范围
print(lf.get_calendar_coverage(market="us"))
{'history_start': Timestamp('1929-01-01 00:00:00'), 'confirmed_through': Timestamp('2027-12-31 00:00:00')}
const auto coverage = lf::get_calendar_coverage("us");
std::cout << coverage.history_start << " .. " << coverage.confirmed_through << "\n";
1929-01-01 .. 2027-12-31
输出由 docs/_shared/update_examples.py 运行示例脚本生成:数据版本 sha256:6feda8ca,2026-10-09。
下载示例脚本: 01_calendar.cpp · 01_calendar.py
结果解读:边界随数据版本变化;confirmed_through 是日历确认上界,不能当作行情上界。