QMT的实时行情获取主要分为tick分笔数据和kline分钟数据,其中全推tick行情仅支持股票,其他tick/kline行情则需要通过订阅的方式获得。 全推方式获得tick行情首先订阅全推行情:a_index_etf = get_a_index_etf() subscribe_id = xtdata.subscribe_whole_quote(a_index_etf) 然后实时查询,整理成dataframe:
data = xtdata.get_full_tick(a_index_etf) df = pd.DataFrame(data) 订阅方式获得tick/kline行情
首先订阅指定ticker,如有多个则依次订阅, count参数指定缓存数据量大小: contract = get_main_contract() subscribe_ids = [] for ticker in contract: subscribe_ids.append(xtdata.subscribe_quote(ticker, 'tick', count=10)) subscribe_ids.append(xtdata.subscribe_quote(ticker, '1m', count=10)) 查询tick行情:
tick_data = xtdata.get_market_data(stock_list=['IC00.IF', 'IM00.IF', 'ag00.SF'], period='tick', count=5) print(pd.DataFrame(tick_data['IC00.IF'])) 可以看到,tick行情时间戳精确到毫秒,字段同全推行情。 查询Kline行情:kline_data = xtdata.get_market_data(stock_list=['90001156.SZO'], period='1m', count=10) df = pd.concat([kline_data[i].T for i in ['time', 'open', 'high', 'low', 'close', 'volume', 'amount', 'settelementPrice', 'openInterest']], axis=1) df.columns = ['time', 'open', 'high', 'low', 'close', 'volume', 'amount', 'settelementPrice', 'openInterest'] df = df[df.volume !=0] df['time'] = df['time'].apply(lambda x: datetime.datetime.fromtimestamp(x / 1000.0))
|