问题描述
正常交易时间, 买卖价格都是能 get 到一个了,挂单量也是, 以前是 3 个啊,昨天发现变成这样了, 是接口数据改变了吗?
这个是 000001.SZ 的
解决方案
根据 QMT 官方 API 文档的说明,get_full_tick 接口(在内置环境中为 ContextInfo.get_full_tick)返回的字典数据中,askPrice(卖价)、bidPrice(买价)、askVol(卖量)、bidVol(买量)均明确定义为五档列表。\n\n如果您在正常交易时间(连续竞价阶段)调用 000001.SZ 时只获取到一档数据,这并非 QMT 接口底层数据结构的改变,而是可能由以下几种情况导致的异常:\n\n### 1. 行情源或服务器异常\nQMT 的行情数据依赖于券商的行情服务器。如果券商的 Level-1 行情源出现波动或降级,可能会导致推送的盘口数据缺失,仅保留最优一档。建议重启 QMT 客户端,或者在客户端的“数据管理”中检查实时行情连接状态。\n\n### 2. 集合竞价时间段的影响\n虽然您提到是“正常交易时间”,但请注意在早盘集合竞价(9:15-9:25)期间,交易所规则决定了只广播一档匹配价格和虚拟成交量。请确保您的测试时间是在 9:30 之后的连续竞价阶段。\n\n### 3. 客户端版本或权限问题\n部分券商定制版的 QMT 在近期更新中可能对外部独立环境(如 xtdata)的行情获取权限进行了调整。如果您使用的是独立 Python 环境的 xtdata,建议对比一下 QMT 客户端内置策略编辑器中调用 ContextInfo.get_full_tick(['000001.SZ']) 的返回结果。如果内置环境是五档,而 xtdata 是一档,可能是订阅机制或本地数据同步出现了延迟。\n\n### 排查建议代码\n您可以在 QMT 内置策略中运行以下代码,验证底层接收到的数据长度:\npython\ndef handlebar(ContextInfo):\n if not ContextInfo.is_last_bar():\n return\n tick_data = ContextInfo.get_full_tick(['000001.SZ'])\n if '000001.SZ' in tick_data:\n data = tick_data['000001.SZ']\n print('买价档数:', len(data.get('bidPrice', [])))\n print('买价列表:', data.get('bidPrice', []))\n\n如果上述代码打印的长度仍为 1,建议联系您所属券商的 QMT 技术支持,反馈“Level-1 实时行情盘口五档数据丢失”的问题。