🚀 AI 一键生成 qmt 策略代码

QMT调用 get_full_tick 获取期货实时行情不准确怎么办?

qmt | 发布时间: 2026/5/27
以下内容由 EasyQuant 生成。

问题描述

使用.get_full_tick取F2407.IF数据不准确

你好,使用海通证券提供的E海方舟量化版时,遇到了这样一个问题:
麻烦帮忙看一下原因,在使用data = ContextInfo.get_full_tick(['IF2407.IF'])取数据时,返回


返回如下信息:
{'IF2407.IF': {'timetag': '20240613 00:00:00', 'lastPrice': 3502.0, 'open': 3502.0, 'high': 3502.0, 'low': 3502.0, 'lastClose': 3502.0, 'amount': 0.0, 'volume': 0, 'pvolume': 0, 'stockStatus': 0, 'openInt': 18603, 'settlementPrice': 0.0, 'lastSettlementPrice': 0.0, 'askPrice': [0.0, 0.0, 0.0, 0.0, 0.0], 'bidPrice': [0.0, 0.0, 0.0, 0.0, 0.0], 'askVol': [0, 0, 0, 0, 0], 'bidVol': [0, 0, 0, 0, 0]}}


timetag为: '20240613 00:00:00,并没有返回实时信息。

并且, 'lastPrice': 3502.0, 'open': 3502.0, 'high': 3502.0, 'low': 3502.0, 'lastClose': 3502.0, 都是同一个数据3502.0,且amount': 0.0, 'volume': 0, 'pvolume': 0, 'stockStatus': 0, 都为0.

请帮我看看原因,谢谢

解决方案

你好!在QMT(E海方舟量化版底层)中使用 ContextInfo.get_full_tick 获取数据时,如果返回的 timetag00:00:00,且价格字段全部相同、成交量为 0、买卖五档皆为 0,这通常意味着策略没有获取到该合约的实时行情数据,返回的仅仅是系统初始化的静态昨收数据

出现这种情况通常有以下几个原因及对应的解决方法:

1. 未显式订阅行情数据(最常见原因)

QMT 平台为了节省资源,默认只会推送主图(当前图表)的行情。如果你在代码中直接使用 get_full_tick 去获取非主图合约的数据,且没有提前订阅,就会取到这种无效的空数据。

解决方法
init 函数中使用 ContextInfo.subscribe_quote 显式订阅该合约的 tick 行情,或者使用更推荐的 get_market_data_ex 接口(自带订阅功能)。

推荐写法(使用 get_market_data_ex):

def handlebar(ContextInfo):
    # 使用 get_market_data_ex 获取 tick 数据,subscribe=True 会自动订阅
    tick_data = ContextInfo.get_market_data_ex(
        [], 
        ['IF2407.IF'], 
        period='tick', 
        subscribe=True
    )
    print(tick_data)

传统写法(先订阅,再获取):

def init(ContextInfo):
    # 在初始化时订阅 IF2407.IF 的 tick 行情
    ContextInfo.subscribe_quote('IF2407.IF', period='tick')

def handlebar(ContextInfo):
    # 盘中获取最新 tick
    data = ContextInfo.get_full_tick(['IF2407.IF'])
    print(data)

2. 在非交易时间运行策略

如果你是在非交易时间(如周末、节假日或盘后)点击“运行”或“回测”,由于当前没有实时的 tick 数据推送,系统只能返回当天的初始状态数据(即昨收价,且成交量为0)。
解决方法:请在期货的实际交易时间段内(如上午 9:30-11:30,下午 13:00-15:00)运行实盘/模拟策略进行测试。

3. 客户端行情服务器未连接

请检查 E海方舟 客户端右下角的行情连接状态。如果行情断开,或者你登录的账号权限没有开通中金所的实时行情(部分券商默认可能只提供延时或不提供股指期货行情),也会导致取不到数据。
解决方法:确认客户端行情连接正常,且能在软件的行情界面正常看到 IF2407.IF 的实时跳动。

总结
建议你将代码改为使用 ContextInfo.get_market_data_ex 并设置 subscribe=True,同时确保在盘中交易时间运行,即可解决此问题。