3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投)量化平台中,调用 get_full_tick(或 ContextInfo.get_full_tick)经常返回空数据,不一定全是行情源的问题。通常情况下,这与数据订阅状态、代码格式、调用时机或本地客户端状态有关。
以下是导致该接口返回空数据的常见原因及排查解决方法:
get_full_tick 是用于获取内存中最新的 tick 快照数据。如果你没有提前对该股票进行行情订阅,内存中可能没有该股票的最新数据,从而返回空字典 {}。
解决方法:在获取 tick 数据前,确保已经调用了订阅接口。
# QMT 内置模式示例
def init(ContextInfo):
# 订阅行情数据
ContextInfo.subscribe_quote('000001.SZ', period='tick', dividend_type='none')
def handlebar(ContextInfo):
# 获取全量 tick 数据
tick_data = ContextInfo.get_full_tick(['000001.SZ'])
print(tick_data)
如果是独立运行模式(xtdata),请确保调用了 xtdata.subscribe_quote。
QMT 对股票代码的格式要求非常严格,必须包含市场后缀,且大写。例如,平安银行必须是 000001.SZ,贵州茅台必须是 600519.SH。
排查方法:检查传入的 stock_code 列表,确保格式为 ['代码.市场']。如果漏掉后缀或写成小写,接口将无法识别,直接返回空。
如果你在盘前(如 9:00 之前)、盘后或周末调用该接口,且 QMT 客户端刚刚重启,内存中尚未接收到当天的任何 tick 推送,此时调用也会返回空数据。
排查方法:确认测试时间是否在交易时段内(9:15 - 15:00)。如果需要在盘后测试,建议使用获取历史数据的接口(如 get_market_data_ex 或 get_local_data)。
无论是内置模式还是独立模式,底层都依赖 QMT 客户端的行情接收模块。如果 QMT 客户端的行情服务器断开连接,或者账号未正常登录,数据推送就会停止。
排查方法:
get_full_tick 的参数 stock_code 应该是一个列表(List),即使只查询一只股票,也建议传入列表形式。
正确写法:ContextInfo.get_full_tick(['600000.SH'])
错误写法:ContextInfo.get_full_tick('600000.SH') (部分版本可能会兼容,但标准用法是列表)。
如果你最近频繁遇到这个问题,建议按照以下步骤排查:
subscribe_quote 订阅操作。.SH / .SZ 后缀是否正确。