MINIQMT订阅实时股票期货可转债行情数据

miniqmt qmt 65℃

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订阅实时股票期货可转债行情数据

喜欢 (0)