问题描述
1.qmt 数据日期一直无法更新,时间停留在 2021 年,如何才能更新到最新日期
image.png
2.get_market_data_ex 获取不到最新数据,只能获取到 2021-06-11 前的数据
这个是目前主要使用的函数,其它获取行情函数都不推荐使用了。
已经试了很多方法,换电脑及 QMT 软件卸载重新安装,清除数据,重新下载全部 K 线数据,都不能解决问题。
哪位大神能帮忙解答一下,万分感谢!
解决方案
遇到 QMT 平台数据日期不更新(如停留在 2021 年),且 get_market_data_ex 无法获取最新数据的问题,通常是由行情服务器连接、本地数据未正确补充、或代码参数设置不当引起的。即使重装软件,如果核心配置或数据源未对齐,问题依然会存在。
以下是详细的排查和解决步骤:
1. 检查行情服务器连接状态
QMT 必须连接到券商的行情服务器才能获取最新数据。
- 操作步骤:查看 QMT 客户端右下角的连接状态图标。如果显示为红色或“未连接”,说明网络或服务器配置有问题。
- 解决方法:点击右下角连接状态,尝试切换行情服务器(通常券商会提供多个行情节点),直到显示绿色“已连接”。
2. 正确使用“数据管理”补充数据
虽然您提到已经重新下载了数据,但请确认下载的范围和品种是否正确。
- 操作步骤:
- 点击菜单栏的 数据管理 -> 补充数据。
- 选择您需要的市场(如沪深 A 股)和周期(如日线、1分钟线)。
- 关键点:检查“时间范围”设置,确保结束时间设置为当前最新日期,而不是默认的旧日期。
- 点击“开始补充”,等待进度条完成。
3. 检查 get_market_data_ex 的参数设置
get_market_data_ex 是 QMT 推荐的获取行情数据的接口,其参数设置直接影响数据的获取。
- 检查
subscribe参数:
默认情况下subscribe=True,表示会订阅最新数据。如果被错误地设置为False,系统将只读取本地已有数据(即您本地停留在 2021 年的数据)。 - 检查
start_time和end_time:
确保没有在代码中将end_time写死为 2021 年的某个日期。如果留空'',则默认获取到最新数据。
正确调用示例:
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取沪深300最新日线数据,确保 subscribe=True
data = ContextInfo.get_market_data_ex(
fields=['open', 'high', 'low', 'close'],
stock_code=['000300.SH'],
period='1d',
start_time='',
end_time='',
count=-1,
dividend_type='follow',
fill_data=True,
subscribe=True # 关键:开启数据订阅
)
print(data)
4. 检查回测时间区间设置
如果您是在回测模式下运行策略,获取的数据范围受限于回测参数的设置。
- 操作步骤:
- 检查策略编辑器右侧的 回测参数 -> 结束时间,确保设置为最新日期。
- 检查代码中
init函数是否写死了ContextInfo.end:def init(ContextInfo): # 确保这里的结束时间不是 2021 年 # ContextInfo.end = '2021-06-11 15:00:00'
5. 检查账号权限与版本
- 数据权限:某些特殊数据(如 Level-2 数据、期权数据)需要券商开通特定权限。如果普通 A 股数据也无法获取,通常不是权限问题。
- 软件版本:确保您使用的是券商官网提供的最新版 QMT 客户端。如果券商后台升级了接口,旧版客户端可能无法拉取数据。
总结
如果重装和清空数据无效,最可能的原因是行情服务器未连接,或者补充数据时的时间区间未包含最新日期。请优先检查右下角的网络连接状态,并在代码中确保 subscribe=True。