问题描述
新手求问各位大大,如果基于股票的1hour K线高低点做交易,订阅发现行情不更新,正常吗?
是不是get_market_data_ex函数不支持订阅60m的数据 ?
data_K = C.get_market_data_ex(["close",'high','low','open'],[A.stock],period = ‘60m’, count = 10, dividend_type='front')
解决方案
您好!在 QMT 平台中,get_market_data_ex 函数是支持获取和订阅 1 小时 K 线数据的。您遇到的行情不更新问题,主要是因为 period 参数的取值写错了。
问题原因
在 QMT 的 API 规范中,1 小时线的标准参数值是 '1h',而不是 '60m'。当传入不支持的周期字符串时,底层可能无法正确解析并建立订阅通道,从而导致数据获取失败或无法实时更新。
正确的代码写法
请将您的代码中的 period = '60m' 修改为 period = '1h',同时建议显式开启订阅参数 subscribe=True(虽然默认是 True,但显式写出更清晰):
# 正确的 1小时线 获取与订阅方式
data_K = ContextInfo.get_market_data_ex(
fields=['open', 'high', 'low', 'close'],
stock_code=[A.stock],
period='1h',
count=10,
dividend_type='front',
subscribe=True # 确保开启订阅以获取实时更新
)
进阶排查建议
如果修改为 '1h' 后仍然发现数据不更新,请按以下步骤排查:
- 检查数据补充:QMT 获取历史 K 线(如
count=10)需要本地有数据基础。请在 QMT 终端的【数据管理】中,确保已经补充了该股票的 1小时线(60分钟线) 历史数据。 - 理解驱动机制:
get_market_data_ex的实时更新依赖于主图行情的 Tick 驱动。请确保您的策略是运行在实盘/模拟模式下,并且handlebar(ContextInfo)函数正在被实时行情正常触发。 - K线闭合机制:1 小时 K 线的数据在盘中是动态变化的(比如 10:00 到 11:00 之间的 K 线,其 close/high/low 会随 tick 变动)。如果您只在 K 线走完时才做交易,建议配合
ContextInfo.is_last_bar()或判断时间戳来确认当前 1 小时 K 线是否已经确定。
附:QMT 常用周期参数对照表
'tick':分笔线'1m':1分钟线'5m':5分钟线'15m':15分钟线'30m':30分钟线'1h':小时线(即60分钟线)'1d':日线