QMT支持的市场有A股股票、指数、ETF、上证50/沪深300ETF期权、国内期货、国内期货期权、香港股票等,这里先设置好待监控标的,并定期更新。
获取上证指数、深证成指、创业板指、科创50、上证50、沪深300、中证500、中证1000等主要指数ticker,以及活跃ETFticker
defget_a_index_etf():indexes=['000001.SH','399001.SZ','399006.SZ','000688.SH','000016.SH','000300.SH','000905.SH','000852.SH']etf=["512100.SH","510050.SH","510300.SH","513050.SH","515790.SH","563000.SH","588000.SH","513180.SH","513060.SH","159915.SZ","512880.SH","512010.SH","512660.SH","159949.SZ","510500.SH","512690.SH","518880.SH","511260.SH","512480.SH","512200.SH","515030.SH","511380.SH","512000.SH","510330.SH","513130.SH","513500.SH","513100.SH","512800.SH","512760.SH","159920.SZ","159605.SZ","159941.SZ","162411.SZ","513330.SH","510900.SH","513090.SH","513550.SH"]returnindexes+etf1.2A股重要指数成分股获取沪深300(000300)、中证500(000905)、中证1000(000852)指数成分股
importredefget_main_contract():contract=xtdata.get_stock_list_in_sector('中金所')+xtdata.get_stock_list_in_sector('大商所')+xtdata.get_stock_list_in_sector('郑商所')+xtdata.get_stock_list_in_sector('上期所')market_mapping={'CZCE':'ZF','DCE':'DF','CFFEX':'IF','SHFE':'SF'}contract_main=[i.split('.')[0]+'.'+market_mapping.get(i.split('.')[1])foriincontractifre.search(r'[A-Za-z]00\.[A-Z]',i)]if'IM00.IF'notincontract_main:contract_main.append('IM00.IF')returncontract_main1.5外盘期货外盘期货市场主要标的,包含汇率、利率、商品以及股指
defget_future_market_ticker():forex=['DXY.OTC','EURUSD.OTC','GBPUSD.OTC','USDJPY.OTC','USDRUB.OTC','USDCNH.OTC','USDHKD.OTC']interest=['US10YR.OTC','DE10YR.OTC','UK10YR.OTC','CN10YR.OTC','JP10YR.OTC','US5YR.OTC','US2YR.OTC','US1YR.OTC','US30YR.OTC','FR10YR.OTC','CN5YR.OTC','CN2YR.OTC','CN1YR.OTC','CN7YR.OTC']commodity=['USHG.OTC','UKAH.OTC','UKCA.OTC','UKNI.OTC','UKPB.OTC','UKZS.OTC','UKSN.OTC','USZC.OTC','USZW.OTC','USYO.OTC','USZS.OTC','USLHC.OTC','UKOIL.OTC','USCL.OTC','USNG.OTC','XAUUSD.OTC','USGC.OTC','XAGUSD.OTC','USSI.OTC','AUTD.SGE','AGTD.SGE','PT9995.SGE','USPL.OTC','USPA.OTC']index=["US500F.OTC","VIXF.OTC","US30F.OTC","USTEC100F.OTC","JP225F.OTC","EU50F.OTC","DE30F.OTC","FR40F.OTC","ES35F.OTC","AU200F.OTC","STOXX50F.OTC"]returnforex+interest+commodity+index二、行情获取QMT的实时行情获取主要分为tick分笔数据和kline分钟数据,其中全推tick行情仅支持股票,其他tick/kline行情则需要通过订阅的方式获得。
首先订阅全推行情:
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)抽出几列数据,可看出指数无五档行情,一般股票则包含了实时请求的快照:
首先订阅指定ticker,如有多个则依次订阅,count参数指定缓存数据量大小:
contract=get_main_contract()subscribe_ids=[]fortickerincontract:subscribe_ids.append(xtdata.subscribe_quote(ticker,'tick',count=10))subscribe_ids.append(xtdata.subscribe_quote(ticker,'1m',count=10))查询tick行情:
查询Kline行情:
kline_data=xtdata.get_market_data(stock_list=['90001156.SZO'],period='1m',count=10)df=pd.concat([kline_data[i].Tforiin['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(lambdax:datetime.datetime.fromtimestamp(x/1000.0))timeopenhighlowclosevolumeamountsettelementPriceopenInterest2022-08-0214:56:000.17280.17390.17280.173940693330160192022-08-0214:57:000.17390.17410.17290.1741771336750159592022-08-0215:00:000.17410.17410.17310.1731117310.173115960至此我们完成了行情获取的基本操作,下文将继续介绍如何在实时行情中提取技术因子,设计定时任务,构造机器学习工作流。