问题描述
问题描述:
在调用 xtdata.download_history_data 批量下载郑商所纯碱连续合约(SA00.CZCE)的 分笔数据(tick) 时,接口返回错误:
{error:{ErrorID:200006,ErrorMsg: "Parameter 'period is invalid" } }
请问这是因为什么原因呢?或者有排查的方向吗?
解决方案
遇到 ErrorID: 200006, ErrorMsg: "Parameter 'period is invalid" 错误,通常是因为传入的参数不符合 QMT 底层接口的规范。针对您下载郑商所纯碱连续合约 tick 数据的情况,请按照以下几个方向进行排查和修改:
1. 检查市场代码后缀(最常见原因)
在 QMT 平台中,交易所的市场代码后缀与常见的其他软件(如 CZCE、SHFE)不同。根据 QMT 官方文档的市场简称代码规范:
- 郑商所 的后缀是
.ZF - 大商所 的后缀是
.DF - 上期所 的后缀是
.SF - 中金所 的后缀是
.IF
因此,您传入的合约代码 SA00.CZCE 是无法被 QMT 识别的,底层在解析时可能会导致后续参数(如 period)校验级联报错。请将合约代码修改为 SA00.ZF。
2. 检查 period 参数的拼写
确保您在调用 download_history_data 时,period 参数传入的是全小写的字符串 'tick'。QMT 对大小写敏感,传入 'Tick'、'TICK' 或其他变体都会导致 period is invalid 错误。
3. 连续合约(主连)的特殊性
SA00.ZF 代表纯碱的主力连续合约。在 QMT 中,连续合约的日线、分钟线数据通常是拼接好的,但 Tick(分笔)数据的数据量极其庞大,部分券商的 QMT 服务器可能不支持直接下载长期的连续合约 Tick 数据。
建议排查步骤:
- 先尝试下载具体月份的合约(例如:
SA401.ZF或当前实际的主力合约代码),看是否能成功下载 tick 数据。 - 如果具体合约可以下载,而
SA00.ZF报错,说明服务器不支持主连的 tick 下载,您需要在代码中自行维护主力合约的换月逻辑,分段下载具体合约的 tick 数据。
正确的代码示例
# 导入 xtdata 模块
from xtquant import xtdata
# 正确的合约代码(郑商所后缀为 .ZF)
stock_code = 'SA00.ZF'
# 或者尝试具体合约,如 'SA401.ZF'
# 正确的 period 参数
period = 'tick'
# 设置下载的时间范围(格式:YYYYMMDD)
start_time = '20231001'
end_time = '20231010'
try:
# 调用下载接口
xtdata.download_history_data(stock_code, period, start_time, end_time)
print(f"{stock_code} 的 {period} 数据下载任务已提交。")
# 获取本地数据验证
data = xtdata.get_local_data(field_list=[], stock_list=[stock_code], period=period, start_time=start_time, end_time=end_time)
print(data)
except Exception as e:
print(f"下载失败: {e}")
总结: 请优先将 SA00.CZCE 改为 SA00.ZF,并确保 period='tick'。如果仍有问题,请尝试下载具体月份合约的 tick 数据。