3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投 Print Quant)量化交易平台中,实时捕捉盘口买卖五档价格和挂单量是开发高频交易、网格交易及盘口微观结构策略的核心需求。本文将详细介绍如何利用 Python API 中的 ContextInfo.get_full_tick 函数高效获取实时分笔数据及五档盘口。
get_full_tick 是 QMT 专门用于获取指定合约最新分笔行情(Tick)的接口,包含盘口五档买卖价格和数量。
ContextInfo.get_full_tick(stock_code=[])
'代码.市场'(例如 ['600000.SH', '000001.SZ'])。若不传或留空,默认获取当前主图合约的实时数据。函数返回一个字典(dict),key 为合约代码,value 为该合约最新行情数据的字典,主要字段包括:
| 字段名 | 类型 | 说明 |
|---|---|---|
lastPrice |
float | 最新成交价 |
askPrice |
list | 卖价五档(从卖一到卖五) |
bidPrice |
list | 买价五档(从买一到买五) |
askVol |
list | 卖量五档(从卖一到卖五,单位:手) |
bidVol |
list | 买量五档(从买一到买五,单位:手) |
amount |
float | 成交总金额 |
volume |
int | 成交总量(手) |
open / high / low / lastClose |
float | 开盘价 / 最高价 / 最低价 / 昨收价 |
以下是在 QMT 策略中提取股票买卖五档及最新价的标准实现:
#encoding:gbk
def init(ContextInfo):
# 设置运行股票池
ContextInfo.set_universe(['600000.SH', '000001.SZ'])
def handlebar(ContextInfo):
# 建议仅在最后一根 Bar(即盘中实时 tick 到来时)触发五档读取
if not ContextInfo.is_last_bar():
return
stock_list = ['600000.SH', '000001.SZ']
tick_data = ContextInfo.get_full_tick(stock_list)
for stock in stock_list:
if stock in tick_data:
data = tick_data[stock]
last_price = data.get('lastPrice', 0)
ask_prices = data.get('askPrice', []) # 卖一至卖五价格
bid_prices = data.get('bidPrice', []) # 买一至买五价格
ask_vols = data.get('askVol', []) # 卖一至卖五挂单量
bid_vols = data.get('bidVol', []) # 买一至买五挂单量
print(f"[{stock}] 最新价: {last_price}")
if ask_prices and bid_prices:
print(f" 买一: Price={bid_prices[0]}, Vol={bid_vols[0]}")
print(f" 卖一: Price={ask_prices[0]}, Vol={ask_vols[0]}")
get_full_tick 用于获取实时盘口快照,在实盘运行与模拟运行模式下最为有效;在历史 K 线回测中,获取的是回测当下时间点对应的分笔快照。handlebar 会随每一个 Tick 的到来而被调用。通过 ContextInfo.is_last_bar() 可以确保策略仅在最新的实时 Tick 点处理五档数据,避免历史数据计算的资源浪费。ContextInfo.subscribe_quote 使用可以获得更实时的行情推送。