QMT能正常看行情,为什么策略却读取不到数据?
发布时间:3小时前阅读:51
QMT界面能正常看到行情,策略却读取不到数据,是新手最容易困惑的问题之一。表面上看,软件已经显示了价格,代码理应可以直接读取;实际上,界面行情、历史数据、主图周期和策略接口可能来自不同层次,任何一个环节不匹配,返回结果都可能为空。
第一种情况是本地历史数据没有下载完整。QMT回测和部分历史数据接口主要读取本地文件,界面中能看到今天的最新行情,只说明实时行情连接正常,并不代表过去几年的日线或分钟线已经存在。策略请求一段较长历史数据时,本地缺少对应周期,就会得到空结果或长度不足。
第二种情况是代码和周期不一致。策略设置为日线,却请求一分钟数据,或者下载了日线,代码中读取五分钟周期,都可能出现问题。排查时应同时查看策略基本信息、主图周期、接口中的period参数和已下载的数据周期,四者最好先保持一致。
第三种情况是证券代码格式错误。QMT通常使用“代码.市场”的完整形式,例如沪深市场后缀不同。代码没有后缀、市场写错或期货大小写不符合规则,都可能让接口找不到合约。最稳妥的办法是从客户端行情列表或合约信息中复制标准代码,不要手工猜测。
第四种情况是运行到了错误环境。回测读取本地历史数据时,通常不需要订阅实时行情,接口参数应按照回测方式设置;实盘模型则需要接收未来行情。把实盘订阅逻辑直接放进回测,或在实盘中只读取没有更新的本地数据,都可能导致数据停留在旧日期。
第五种情况与主图有关。QMT内置策略中的handlebar通常依赖主图K线驱动,策略在什么标的和周期上运行,会受到模型交易或回测界面选择影响。如果代码用ContextInfo获取主图代码,但用户在界面中选了另一个标的,读取结果自然与预期不同。
第六种情况是请求时间范围不合理。开始时间晚于结束时间、请求的是非交易日、回测起点早于标的上市日期,或者指标需要的历史长度大于实际可用数据,都会造成空表或长度不足。策略应先检查返回对象和数据长度,再计算均线,不能直接对空结果取最后一行。
例如,一个二十日均线策略,如果回测从某月第一天开始,却只下载了从该日开始的数据,前二十个交易日就没有足够历史用于计算。正确做法是把数据下载起点提前,给指标预留预热区间。很多“代码没反应”,其实只是数据不够。
还有一种情况是客户端连接到了另一个数据目录。电脑安装过多个QMT版本时,策略和数据管理界面可能不在同一环境。用户以为已经下载,实际下载到了另一个客户端目录。检查当前客户端安装路径和数据目录,比反复运行下载更有效。
排查时不要一次修改所有参数。可以先用一个常见标的、一种日线周期和最近几十条数据做最小测试。打印返回类型、数据长度、第一条和最后一条时间。这个最小测试成功后,再逐步换成自己的标的、周期和时间范围。
如果历史数据正常,但盘中最新一根没有更新,还要检查实时订阅和模型运行状态。实时行情与历史数据可以拼接,但前提是订阅成功并且程序持续运行。本地已有数据不会自动触发实时回调,订阅后也要让进程保持运行。
如果返回对象不是空表,而是存在列却没有有效数值,还要检查fill_data和停牌数据处理。向后填充可能让停牌期间出现重复价格,不填充则可能留下空值。策略应明确自己希望怎样处理,而不是看到表格有行就默认数据可用。对于多标的回测,最好在日志中记录每只股票的最后时间和有效行数,方便发现个别数据异常。
此外,策略编辑器中的快速计算或主图选择也可能改变运行范围。排查时先关闭不必要的优化选项,用最基础配置验证,再逐步恢复。
遇到策略取不到数据时,按代码、周期、下载范围和运行环境逐项排查,通常比反复重装更有效。相关最小测试方法会在主页持续整理,便于对照。本文不涉及具体证券判断,仅供技术学习。

温馨提示:投资有风险,选择需谨慎。
-
一家坚守19年的财商教育平台,如何重塑投资服务的“靠谱”底色
2026-06-29 13:08
-
REITs打新:⌈华泰三峡新能源REIT⌋ 和 ⌈创金合信北京国资公司REIT⌋ 本周发售!
2026-06-29 13:08
-
券商客户经理是做什么的?为什么建议你理财投资前找一位?
2026-06-29 13:08


问一问

+微信
分享该文章
