问题描述
/
解决方案
在 ptrade 量化平台中,调用 get_trade_days 接口时,如果同时传入 start_date 和 count 参数,系统会抛出“参数不可同时使用”的错误。这是因为该接口的设计逻辑中,这两种方式代表了不同的查询维度,属于互斥参数。
报错原因解析
根据 ptrade API 文档,get_trade_days(start_date=None, end_date=None, count=None) 的参数规则如下:
start_date:指定查询的起始日期。count:指定查询的交易日数量(往前推算)。
这两个参数只能二选一。你不能既告诉系统“从哪天开始”,又告诉系统“往前取多少天”,这在逻辑上会产生冲突。
正确的参数组合方式
为了正确获取指定范围的交易日期,你可以根据实际需求选择以下三种组合方式之一:
方式一:按明确的起止日期查询 (start_date + end_date)
如果你知道确切的开始和结束日期,使用这种方式。
# 获取 2016-01-01 到 2016-02-01 之间的所有交易日
trade_days = get_trade_days(start_date='2016-01-01', end_date='2016-02-01')
log.info(trade_days)
方式二:按截止日期往前推算 N 天 (end_date + count)
如果你想获取某个特定日期往前推算的 N 个交易日(包含该特定日期),使用这种方式。
# 获取 2016-02-01 往前推的 10 个交易日
trade_days = get_trade_days(end_date='2016-02-01', count=10)
log.info(trade_days)
方式三:按当前日期往前推算 N 天 (仅使用 count)
如果你想获取当前日期(回测中为当前回测日,实盘中为当天)往前推算的 N 个交易日,只需传入 count。
# 获取当前日期往前推的 10 个交易日
trading_days = get_trade_days(count=10)
log.info(trading_days)
总结建议
在编写 ptrade 策略时,明确你的时间获取需求:
- 如果是区间截取,用
start_date和end_date。 - 如果是固定长度的历史窗口,用
count(配合或不配合end_date)。
牢记start_date和count永远不要出现在同一个get_trade_days调用中即可避免此报错。