3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在微观结构分析与高频交易策略中,实时买卖五档数据(包含买1-买5、卖1-卖5的价格与挂单量)是判断盘口买卖力量对比、订单流不平衡(Order Flow Imbalance)的重要依据。QMT 平台提供了原生接口 ContextInfo.get_full_tick(),能够高效获取股票与期货的实时分笔及深度盘口数据。
ContextInfo.get_full_tick(stock_code=[])
stock_code (list) - 合约代码列表,如 ['600000.SH', '000001.SZ']。若不指定,默认获取当前主图合约。在返回的字典中,五档盘口相关的核心 Key 包括:
askPrice: 卖价列表(卖1到卖5价格,从低到高)askVol: 卖量列表(卖1到卖5挂单量)bidPrice: 买价列表(买1到买5价格,从高到低)bidVol: 买1到买5挂单量lastPrice: 最新成交价amount: 成交额volume: 成交总量(手)以下策略展示了如何在 handlebar 驱动下提取买卖五档数据,并计算简单的盘口买卖压比率(Bid-Ask Ratio):
#coding:gbk
import numpy as np
def init(ContextInfo):
# 1. 设定订阅标的股票池
ContextInfo.stocks = ['600000.SH', '000001.SZ']
ContextInfo.set_universe(ContextInfo.stocks)
print("策略初始化完成,开始监控买卖五档盘口...")
def handlebar(ContextInfo):
# 仅在最新 Bar/Tick 触发时执行盘口分析
if not ContextInfo.is_last_bar():
return
# 2. 调用 get_full_tick 获取最新分笔切片
tick_data = ContextInfo.get_full_tick(ContextInfo.stocks)
for code in ContextInfo.stocks:
if code in tick_data:
data = tick_data[code]
# 提取买卖五档价格与挂单量列表
ask_prices = data.get('askPrice', []) # [卖1, 卖2, 卖3, 卖4, 卖5]
ask_vols = data.get('askVol', []) # [卖1量, 卖2量, ...]
bid_prices = data.get('bidPrice', []) # [买1, 买2, 买3, 买4, 买5]
bid_vols = data.get('bidVol', []) # [买1量, 买2量, ...]
last_price = data.get('lastPrice', 0.0)
# 计算买五档与卖五档的总挂单量
total_bid_vol = sum(bid_vols)
total_ask_vol = sum(ask_vols)
# 计算盘口挂单买卖比(Quantity Imbalance)
imbalance = (total_bid_vol - total_ask_vol) / (total_bid_vol + total_ask_vol) if (total_bid_vol + total_ask_vol) > 0 else 0
# 打印盘口深度信息
print(f"=== [{code}] 最新价: {last_price} ===")
print(f"卖五: {ask_prices[4]:.2f} | 挂单量: {ask_vols[4]}")
print(f"卖一: {ask_prices[0]:.2f} | 挂单量: {ask_vols[0]}")
print(f"----------------------------------------")
print(f"买一: {bid_prices[0]:.2f} | 挂单量: {bid_vols[0]}")
print(f"买五: {bid_prices[4]:.2f} | 挂单量: {bid_vols[4]}")
print(f"买压偏向(Imbalance): {imbalance:.2%}\n")