不传参数调用get_all_trades_days()和传入特定日期的结果有什么不同?缺省时默认获取到什么时候?
/
问题描述
解决方案
在 ptrade 量化平台中,get_all_trades_days(date=None) 函数用于获取某个日期之前的所有交易日日期。根据是否传入参数,其获取结果和基准日期会有所不同。
1. 传参与不传参的结果区别
- 传入特定日期 (例如
date='20160213'):函数会返回指定日期(如 2016年2月13日)之前的所有交易日日期列表。 - 不传参数 (缺省
date=None):函数会根据当前运行的模块环境(回测、研究或交易),自动获取一个默认的当前日期,并返回该默认日期之前的所有交易日日期列表。
2. 缺省时默认获取到什么时候?
当不传入 date 参数时,默认获取的截止日期取决于你当前运行策略的模块:
- 回测模块:默认日期为策略中调用该接口的当前回测日日期(即
context.blotter.current_dt)。随着回测的推进,这个默认日期会动态变化。 - 研究模块:默认日期为调用该函数的当天真实日期。
- 交易模块:默认日期为调用该函数的当天真实日期。
代码示例
def initialize(context):
# 1. 不传参数:获取当前回测日期(或真实当天)之前的所有交易日
all_trades_days_default = get_all_trades_days()
log.info("默认获取的交易日列表:\n%s" % all_trades_days_default)
# 2. 传入特定日期:获取 2015年3月12日 之前的所有交易日
all_trades_days_specific = get_all_trades_days('20150312')
log.info("指定日期获取的交易日列表:\n%s" % all_trades_days_specific)
g.security = ['600570.SS', '000001.SZ']
set_universe(g.security)
def handle_data(context, data):
pass
总结:为了避免在回测中引入未来函数,通常在回测环境中不传参数,让其自动跟随回测时间;而在需要获取特定历史阶段的交易日历时,则明确传入 date 参数。