🚀 AI 一键生成 qmt 策略代码

QMT模拟账号使用get_full_tick无法获取最新价格怎么办?

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

问题描述

我的qmt模拟账号,用get_full_tick,为啥无法取到最新的价格了,只能取到昨日收盘价

请问一下,我的 qmt 模拟账号,用 get_full_tick,为啥无法取到最新的价格了,只能取到昨日的收盘价

解决方案

在 QMT 平台中使用 get_full_tick 函数获取最新分笔数据时,如果发现只能取到昨日收盘价(lastClose)而无法获取最新价(lastPrice),通常是由以下几个原因导致的。请按照以下步骤进行排查:

1. 当前处于非交易时间

get_full_tick 获取的是当前内存中最新的 Tick 快照。如果您在盘前(如 9:15 之前)、盘后、周末或法定节假日运行策略,由于交易所没有推送最新的实时行情,系统内存中保留的最新数据就是上一个交易日的收盘状态。此时 lastPrice 通常会等于昨日收盘价。
解决方法:请在交易时间段(9:30-11:30, 13:00-15:00)内测试该函数。

2. 行情服务器未连接或未登录

如果您的 QMT 客户端没有成功连接到行情服务器,或者网络存在延迟,本地无法接收到最新的 Tick 推送,调用该函数自然只能拿到旧数据。
解决方法:检查 QMT 客户端右下角的网络连接状态,确保“行情”连接正常(显示为绿色)。可以尝试重启客户端重新连接。

3. 策略运行模式设置问题

如果您是在回测模式下运行,get_full_tick 的行为可能与实盘不同。回测模式主要依赖历史 K 线数据,Tick 数据的获取可能受限于您下载的历史 Tick 数据是否完整。
解决方法:确保策略处于实盘/模拟运行模式。如果是回测,请确保在【数据管理】中下载了对应时间段的“分笔线(Tick)”数据。

4. 标的停牌或无成交

如果您查询的特定股票当日停牌,或者属于交易极不活跃的标的(如某些冷门期权、债券),在没有新成交产生时,最新价也会停留在昨收价。
解决方法:使用 ContextInfo.is_suspended_stock(stockcode) 检查该股票是否停牌,或者换一只活跃的股票(如 000001.SZ)进行测试。

正确的代码示例

以下是一个在盘中正确调用 get_full_tick 并解析最新价的示例代码:

#coding:gbk
def init(ContextInfo):
    # 设置股票池
    ContextInfo.set_universe(['000001.SZ', '600000.SH'])

def handlebar(ContextInfo):
    # 确保在最新的一根 K 线上执行
    if not ContextInfo.is_last_bar():
        return
    
    # 获取股票池中股票的最新 tick 数据
    stock_list = ContextInfo.get_universe()
    tick_dict = ContextInfo.get_full_tick(stock_list)
    
    for stock in stock_list:
        if stock in tick_dict:
            tick_data = tick_dict[stock]
            last_price = tick_data.get('lastPrice', 0) # 最新价
            last_close = tick_data.get('lastClose', 0) # 昨收价
            
            print(f"代码: {stock}, 最新价: {last_price}, 昨收价: {last_close}")
        else:
            print(f"未获取到 {stock} 的 tick 数据")

总结:绝大多数情况下,取不到最新价是因为在非交易时间测试或行情断开。请确保在盘中时间保持网络畅通,并使用 ContextInfo.is_last_bar() 确保只在最新行情到来时触发逻辑。