问题描述
好像没有方法能获取到吧,是不是只有投研有才
解决方案
miniQMT 是可以获取 Level-2 数据的,并非只有投研端才能获取。但是,获取 L2 数据有一个硬性前提:您的资金账号需要额外开通 Level-2 增强版权限。
根据 QMT 官方 API 文档,平台提供了专门的接口来获取和订阅 Level-2 的行情快照和逐笔成交统计数据。如果您调用没有返回数据,通常是因为券商端没有为您开通 L2 权限。
获取 Level-2 数据的方法
在 QMT/miniQMT 中,主要通过以下两个函数来获取 L2 数据:
ContextInfo.get_market_data_ex:用于主动拉取历史或最新的 L2 数据。ContextInfo.subscribe_quote:用于盘中实时订阅 L2 数据推送。
在调用时,需要将 period 参数设置为 L2 专属的周期标识:
'l2quoteaux':Level2 行情快照指标'l2transactioncount':Level2 大单统计(逐笔成交统计)
示例代码:订阅 Level-2 逐笔大单统计
#coding:gbk
def init(ContextInfo):
# 订阅平安银行的 Level2 大单统计数据
# 注意:前提是账号已开通 Level-2 增强版权限
ContextInfo.subscribe_quote('000001.SZ', period='l2transactioncount', dividend_type='none', callback=on_l2_quote)
def on_l2_quote(datas):
# 回调函数,打印推送的 L2 数据
print("收到 L2 数据推送:")
print(datas)
def handlebar(ContextInfo):
pass
示例代码:主动获取 Level-2 行情快照
#coding:gbk
def init(ContextInfo):
pass
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 获取沪深300 ETF的 Level2 行情快照指标
l2_data = ContextInfo.get_market_data_ex(
fields=[],
stock_code=['510300.SH'],
period='l2quoteaux',
start_time='',
end_time='',
count=1
)
print("L2 行情快照:", l2_data)
Level-2 数据包含哪些字段?
根据 QMT 附录文档,L2 数据包含非常丰富的逐笔和快照信息:
1. Level2 逐笔成交统计 (l2transactioncount) 包含:
bidNumber/offNumber:主买/主卖单总单数bidMostVolmue/offMostVolmue:主买/主卖特大单成交量ddx,ddy,ddz:大单动向、涨跌动因、大单差分zjbyNetInflow:资金博弈净流入- 以及各类大、中、小单的成交量和成交额等。
2. Level2 行情快照指标 (l2quoteaux) 包含:
avgBidPrice/avgOffPrice:委买/委卖均价totalBidQuantity/totalOffQuantity:委买/委卖总量withdrawBidQuantity/withdrawOffQuantity:买入/卖出撤单总量withdrawBidAmount/withdrawOffAmount:买入/卖出撤单总额
总结:miniQMT 完全支持 L2 数据的获取,您只需要联系您的开户券商,确认并开通“Level-2 增强版权限”即可使用上述代码获取逐笔及大单统计数据。