想获取前后N个交易日的日期应该用哪个函数?get_all_trades_days和get_trading_day有什么区别?
/
问题描述
解决方案
在 ptrade 量化交易平台中,处理时间序列和交易日历是策略开发的基础。针对您的问题,以下是详细的解答:
1. 获取前后N个交易日的日期
如果您想获取当前时间数天前或数天后的交易日期,应该使用 get_trading_day(day) 函数。
- 参数
day:表示天数。- 正数(如
1):表示数天后的交易日。 - 负数(如
-1):表示数天前的交易日。 0:表示获取当前交易日(如果当前日期为非交易日,则返回下一交易日的日期)。
- 正数(如
- 返回值:
datetime.date日期对象。
2. get_all_trades_days 和 get_trading_day 的区别
这两个函数虽然都与交易日历有关,但应用场景和返回的数据类型有显著区别:
功能定位对比
get_trading_day(day):相对位移查询。用于基于当前日期,向前或向后推算单个特定的交易日。非常适合用于“获取昨天的收盘价”、“判断明天是否交易”等场景。get_all_trades_days(date=None):历史全量查询。用于获取指定日期(默认为当前日期)之前的所有交易日历。非常适合用于计算历史区间、统计交易日总数等场景。
返回值对比
get_trading_day返回的是一个单一的datetime.date对象。get_all_trades_days返回的是一个包含所有历史交易日的numpy.ndarray数组。
3. 代码示例
以下是在 ptrade 策略中如何使用这两个函数的示例:
def initialize(context):
g.security = ['600570.SS', '000001.SZ']
set_universe(g.security)
def handle_data(context, data):
# --- get_trading_day 示例 ---
# 获取前一天的交易日期
previous_trading_date = get_trading_day(-1)
log.info(f"前一个交易日是: {previous_trading_date}")
# 获取后一天的交易日期
next_trading_date = get_trading_day(1)
log.info(f"后一个交易日是: {next_trading_date}")
# --- get_all_trades_days 示例 ---
# 获取当前回测日期之前的所有交易日
all_trades_days = get_all_trades_days()
log.info(f"历史交易日总数: {len(all_trades_days)}")
log.info(f"最近的5个交易日: {all_trades_days[-5:]}")
# 获取指定日期之前的所有交易日
all_trades_days_date = get_all_trades_days('20150312')
log.info(f"2015年3月12日之前的交易日总数: {len(all_trades_days_date)}")
总结:
- 找某一天(昨天、明天、N天前),用
get_trading_day。 - 要一堆天(历史所有交易日列表),用
get_all_trades_days。