3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT 平台的实际使用中,很多开发者会发现 get_trading_dates 函数的返回结果与部分旧版文档或网传文档的描述不符。这主要是因为参数优先级(start_date 与 count 的互斥关系)以及count 的取值范围在底层逻辑中有着严格的限制。
根据 QMT 官方最新 API 文档,以下是该函数的真实运行逻辑与避坑指南:
官方文档明确指出:start_date 不为空时不使用 count 参数。
start_date 和 count,期望在指定时间段内再限制获取数量,或者传入 count=-1 期望获取全部。start_date 填入了具体时间(如 '20170101'),系统会直接忽略 count,返回 start_date 到 end_date 之间的所有交易日。如果想要使用 count 向前推算 K 线,必须将 start_date 设为空字符串 ''。count=-1 取全部。count 必须大于 0。当 start_date 为空时,系统会从 end_date 开始往前取 count 个 K 线周期。为了确保稳定获取交易日历,请根据您的实际需求选择以下两种写法之一:
如果您想获取两个日期之间的所有交易日,请传入具体的 start_date 和 end_date,此时 count 随便填什么都会被忽略(建议填 1 占位)。
def handlebar(ContextInfo):
# 获取 20230101 到 20230110 之间的日线交易日
# 注意:start_date 不为空,此时 count=1 会被忽略
dates = ContextInfo.get_trading_dates('600000.SH', '20230101', '20230110', 1, '1d')
print('按区间获取:', dates)
如果您想获取截止到某一天(或当前最新 bar)往前推的 N 个交易日,必须将 start_date 设为 '',且 count 必须大于 0。
def handlebar(ContextInfo):
# 获取截止到 20230110 往前推的 5 个交易日
# 注意:start_date 必须为空字符串 ''
dates_by_count = ContextInfo.get_trading_dates('600000.SH', '', '20230110', 5, '1d')
print('按数量获取:', dates_by_count)
# 获取当前最新 K 线往前推的 10 个交易日(end_date 也为空)
recent_dates = ContextInfo.get_trading_dates('600000.SH', '', '', 10, '1d')
print('最新往前推10天:', recent_dates)
ContextInfo.get_trading_dates('代码', '开始时间', '结束时间', 1, '周期')ContextInfo.get_trading_dates('代码', '', '结束时间', 数量, '周期')遵循上述互斥原则,即可完美解决 get_trading_dates 返回结果不符合预期的问题。