MINIQMT订阅实时股票期货可转债行情数据
历史行情数据可以用来选股和回测,实时行情数据可以用于盘中交易买卖。关于历史行情数据获取,之前已写了文章进行介绍手把手教你使用MiniQmt批量下载股票历史行情数据]。本次介绍使用MiniQmt获取实时行情数据。
MiniQmt支持A股股票、ETF、可转债、期权、期货等市场的数据订阅,数据质量有保障,值得拥有。如果你还没有MiniQmt,可以关注公众号后联系我领取福利后开通
1. MiniQmt实时行情数据介绍
- 实时行情获取主要分为tick分笔数据和k线分钟级数据
- MiniQmt实时行情订阅分为全推方式订阅和单股直接订阅。全推数据是市场全部合约的切面数据,相比单股订阅,效率更优,但全推tick行情仅支持股票,不支持期货;单股订阅行情是接口仅支持订阅单个股票,如需订阅多个股票,则需要调用该接口多次
- 最新的券商版本MiniQmt只支持最多500只股票的订阅,只有投研版本的Qmt才支持全市场订阅;由于L2数据成本较高,仅有部分券商支持,不是所有券商都能提供
2. 实时行情数据订阅方式
2.1 使用全推方式获得tick行情
使用subscribe_whole_quote()订阅全推行情数据,使用get_full_tick()获取全推数据
subscribe_whole_quote(code_list, callback=None)
get_full_tick(code_list)
-
subscribe_whole_quote()订阅全推行情数据,返回订阅号。当callback非None时,数据推送从callback返回,数据类型为逐笔数据。订阅成功返回大于0,失败返回-1
-
get_full_tick()获取全推数据,code_list跟subscribe_whole_quote()函数的code_list参数一样
-
code_list参数支持传入市场代码或合约代码两种方式。传入市场代码代表订阅全市场,如
['SH', 'SZ']
。传入合约代码代表订阅指定的合约,如['600000.SH', '000001.SZ']
-
callback参数:回调定义形式为
on_data(datas)
,回调参数datas
格式为 { stock1 : data1, stock2 : data2, ... }def on_data(datas): for stock_code in datas: print(stock_code, datas[stock_code])
2.2 直接订阅单个股票获得tick行情
使用subscribe_quote()订阅单个股票,使用get_market_data()从缓存获取行情数据
subscribe_quote(stock_code, period='1d', start_time='', end_time='', count=0, callback=None)
get_market_data(field_list=[], stock_list=[], period='1d', start_time='', end_time='', count=-1, dividend_type='none', fill_data=True)
- 使用subscribe_quote()订阅单股行情数据,返回订阅号。传入不同period,其callback里收到的字段有所不同。订阅返回值和回调函数格式跟subscribe_whole_quote()全推行情订阅一致
- 使用get_market_data()从缓存获取行情数据。注意历史行情行情和实时行情数据获取都是使用该函数,但历史数据需要用download_history_data()提前下载到本地
- subscribe_quote()仅订阅数据时传
count = 0
即可,此时不管start_time和end_time传入何值,均不会订阅历史行情。get_market_data() count参数大于等于0时,若指定了start_time,end_time,此时以end_time为基准向前取count条;若start_time,end_time缺省,默认取本地数据最新的count条数据;若start_time,end_time,count都缺省时,默认取本地全部数据 - 参数stock_code为合约代码,period为周期,start_time为起始时间,end_time为结束时间,格式为%Y%m%d或%Y%m%d%H%M%S
2.3 *反订阅行情数据*
当不需要再订阅行情数据时,使用unsubscribe_quote()退订实时行情数据,其中seq参数为订阅时返回的订阅号
unsubscribe_quote(seq)
3. 代码实现
3.1 使用全推行情订阅
示例代码如下:
# 订阅全推行情
id = xtdata.subscribe_whole_quote(['SH', 'bu2402.SF'])
# 实时查询
xtdata.get_full_tick(['000300.SH', '600418.SH', 'bu2402.SF'])
输出如下:
{'000300.SH': {'timetag': '20231208 15:00:09',
'lastPrice': 3399.462,
'open': 3391.859,
'high': 3409.385,
'low': 3383.448,
'lastClose': 3391.2823,
'amount': 203034222600,
'volume': 129522054,
'pvolume': 129522054,
'stockStatus': 0,
'openInt': 0,
'settlementPrice': 0,
'lastSettlementPrice': 0,
'askPrice': [0, 0, 0, 0, 0],
'bidPrice': [0, 0, 0, 0, 0],
'askVol': [0, 0, 0, 0, 0],
'bidVol': [0, 0, 0, 0, 0]},
'600418.SH': {'timetag': '20231208 15:00:01',
'lastPrice': 16.69,
'open': 17.17,
'high': 17.35,
'low': 16.64,
'lastClose': 17.45,
'amount': 1992664000,
'volume': 1181268,
'pvolume': 118126810,
'stockStatus': 0,
'openInt': 15,
'settlementPrice': 0,
'lastSettlementPrice': 0,
'askPrice': [16.69, 16.7, 16.71, 0, 0],
'bidPrice': [16.68, 16.67, 16.66, 0, 0],
'askVol': [851, 1593, 301, 0, 0],
'bidVol': [3198, 1666, 1134, 0, 0]}}
可以看出,subscribe_whole_quote()不支持期货数据订阅
3.2 直接订阅
示例代码如下:
contracts = ['IC00.IF', 'IM00.IF', 'bu2402.SF']
ids = []
for contract in contracts:
ids.append(xtdata.subscribe_quote(contract, 'tick', count=10))
ids.append(xtdata.subscribe_quote(contract, '1m', count=10))
# 查询tick行情
xtdata.get_market_data(stock_list=['bu2402.SF'], period='tick', count=10)
# 查询1分钟k线行情
xtdata.get_market_data(stock_list=['bu2402.SF'], period='1m', count=10)
tick数据输出如下,注意tick行情时间戳单位:
{'bu2402.SF': array([(1701696886000, 3617., 3610., 3623., 3595., 3610., 9.4555247e+08, 26214, 0, 0, 130246, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([6, 0, 0, 0, 0]), list([57, 0, 0, 0, 0]), 0., 0),
(1701696886500, 3617., 3610., 3623., 3595., 3610., 9.4555247e+08, 26214, 0, 0, 130246, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([8, 0, 0, 0, 0]), list([57, 0, 0, 0, 0]), 0., 0),
(1701696887000, 3617., 3610., 3623., 3595., 3610., 9.4555247e+08, 26214, 0, 0, 130246, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([10, 0, 0, 0, 0]), list([57, 0, 0, 0, 0]), 0., 0),
(1701696887500, 3617., 3610., 3623., 3595., 3610., 9.4555247e+08, 26214, 0, 0, 130246, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([10, 0, 0, 0, 0]), list([57, 0, 0, 0, 0]), 0., 0),
(1701696888000, 3617., 3610., 3623., 3595., 3610., 9.4555247e+08, 26214, 0, 0, 130246, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([10, 0, 0, 0, 0]), list([58, 0, 0, 0, 0]), 0., 0),
(1701696888500, 3617., 3610., 3623., 3595., 3610., 9.4562481e+08, 26216, 0, 0, 130248, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([8, 0, 0, 0, 0]), list([58, 0, 0, 0, 0]), 0., 0),
(1701696889000, 3617., 3610., 3623., 3595., 3610., 9.4566098e+08, 26217, 0, 0, 130249, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([7, 0, 0, 0, 0]), list([58, 0, 0, 0, 0]), 0., 0),
(1701696889500, 3617., 3610., 3623., 3595., 3610., 9.4569715e+08, 26218, 0, 0, 130250, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([7, 0, 0, 0, 0]), list([58, 0, 0, 0, 0]), 0., 0),
(1701696890000, 3617., 3610., 3623., 3595., 3610., 9.4576949e+08, 26220, 0, 0, 130251, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([5, 0, 0, 0, 0]), list([58, 0, 0, 0, 0]), 0., 0),
(1701696890500, 3617., 3610., 3623., 3595., 3610., 9.4584183e+08, 26222, 0, 0, 130253, 3652., list([3617.0, 0.0, 0.0, 0.0, 0.0]), list([3616.0, 0.0, 0.0, 0.0, 0.0]), list([6, 0, 0, 0, 0]), list([58, 0, 0, 0, 0]), 0., 0)],
dtype=[('time', '<i8'), ('lastPrice', '<f8'), ('open', '<f8'), ('high', '<f8'), ('low', '<f8'), ('lastClose', '<f8'), ('amount', '<f8'), ('volume', '<i8'), ('pvolume', '<i8'), ('stockStatus', '<i4'), ('openInt', '<i4'), ('lastSettlementPrice', '<f8'), ('askPrice', 'O'), ('bidPrice', 'O'), ('askVol', 'O'), ('bidVol', 'O'), ('settlementPrice', '<f8'), ('transactionNum', '<i8')])}
k线数据输出:
{'time': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 1701696540000 1701696600000 1701696660000 1701696720000 1701696780000 1701696840000 1701696900000 1701696960000 1701697020000 1701697080000,
'open': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 3613.0 3619.0 3619.0 3617.0 3615.0 3618.0 3617.0 3617.0 3616.0 3617.0,
'high': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 3623.0 3620.0 3620.0 3620.0 3619.0 3619.0 3619.0 3618.0 3617.0 3620.0,
'low': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 3612.0 3617.0 3615.0 3615.0 3615.0 3617.0 3616.0 3616.0 3615.0 3617.0,
'close': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 3619.0 3619.0 3616.0 3615.0 3619.0 3617.0 3617.0 3617.0 3616.0 3620.0,
'volume': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 2310 830 702 438 553 236 432 120 250 271,
'amount': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 83570810.0 30035570.0 25389180.0 15845160.0 20008890.0 8539770.0 15626960.0 4340470.0 9040430.0 9806250.0,
'settelementPrice': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0,
'openInterest': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 130305 130212 130269 130222 130325 130253 130267 130270 130287 130336,
'preClose': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 3613.0 3619.0 3619.0 3616.0 3615.0 3619.0 3617.0 3617.0 3617.0 3616.0,
'suspendFlag': 20231204212900 20231204213000 20231204213100 20231204213200 20231204213300 20231204213400 20231204213500 20231204213600 20231204213700 20231204213800
bu2402.SF 0 0 0 0 0 0 0 0 0 0}
小结
- MiniQmt支持A股股票、ETF、可转债、期权、期货等市场的数据订阅,数据质量有保障,值得拥有。实时行情获取主要分为tick分笔数据和k线分钟级数据
- MiniQmt实时行情订阅分为全推方式订阅和单股直接订阅。全推数据是市场全部合约的切面数据,相比单股订阅,效率更优,但全推tick行情仅支持股票,不支持期货;单股订阅行情是接口仅支持订阅单个股票,如需订阅多个股票,则需要调用该接口多次
- 使用subscribe_whole_quote()订阅全推行情数据,使用get_full_tick()获取全推数据;使用subscribe_quote()订阅单个股票,使用get_market_data()从缓存获取行情数据
- 当不需要再订阅行情数据时,使用unsubscribe_quote()退订实时行情数据
- 最新的券商版本MiniQmt只支持最多500只股票的订阅,只有投研版本的Qmt才支持全市场订阅;由于L2数据成本较高,仅有部分券商支持,不是所有券商都能提供
转载请注明:QMT|Ptrade量化交易 » MINIQMT订阅实时股票期货可转债行情数据