问题描述
/
解决方案
在 ptrade 量化交易平台中,get_all_trades_days 和 get_trade_days 都是用于获取交易日期的函数,但它们的应用场景和参数设计有显著的区别。如果您只需要获取特定时间段的交易日,误用 get_all_trades_days 确实会导致返回大量不必要的历史数据。
以下是这两个函数的详细区别与用法:
1. get_all_trades_days:获取指定日期之前的所有交易日
功能:用于获取某个日期(默认当前日期)之前的所有交易日日期。返回的数据量通常很大,包含从交易所成立以来的历史交易日。
参数:
date(可选):指定的截止日期,如'2016-02-13'或'20160213'。如果不传,回测中默认为当前回测日期,研究/交易中默认为当天日期。
返回值:一个包含所有交易日的 numpy.ndarray。
示例:
# 获取当前日期之前的所有交易日
all_days = get_all_trades_days()
# 获取2015年3月12日之前的所有交易日
all_days_before_2015 = get_all_trades_days('20150312')
2. get_trade_days:获取指定范围的交易日期
功能:用于获取指定时间段或指定数量的交易日期。这是获取区间交易日最常用的函数。
参数:
start_date(可选):开始日期,如'2016-02-13'。与count二选一。end_date(可选):结束日期,如'2016-02-13'。如果不传,默认取当前回测日期或当天日期。count(可选):数量,必须大于0。表示获取end_date往前的count个交易日(包含end_date当天)。与start_date二选一。
返回值:一个包含指定范围交易日的 numpy.ndarray。
示例:
# 获取指定日期范围内的交易日
trade_days_range = get_trade_days('2016-01-01', '2016-02-01')
# 获取当前日期往前10天的交易日
trading_days_count = get_trade_days(count=10)
总结对比
| 特性 | get_all_trades_days |
get_trade_days |
|---|---|---|
| 核心功能 | 获取某日之前的所有历史交易日 | 获取指定区间或指定数量的交易日 |
| 参数设计 | 仅支持传入截止日期 date |
支持 start_date + end_date 或 count + end_date |
| 数据量 | 极大(通常几千条) | 可控(由开发者指定的范围决定) |
| 适用场景 | 需要遍历整个历史交易日历时 | 计算均线、获取过去N天数据、获取特定月份交易日时 |
解决方案:
如果您只需要获取指定范围的交易日期,请将代码中的 get_all_trades_days() 替换为 get_trade_days(start_date='...', end_date='...') 或 get_trade_days(count=N),这样可以显著提高策略的运行效率并减少内存占用。