QMT 里面获取行情数据的函数常用的有:
ContextInfo.get_market_data_ex- 获取行情数据 ,
ContextInfo.get_full_tick - 获取全推数据,
ContextInfo.subscribe_quote - 订阅行情数据。
这三个函数都是用来获取行情数据的,但是根据运行机制的不一样,选择的函数也有所区别。
QMT有三种运行机制,分别是分别是逐K线运行(handlebar),订阅推送(subscribe)、定时任务(run_time)。
逐K线驱动:handlebar
handlebar是主图历史 k 线+盘中订阅推送。运行开始时,所选周期历史 k 线从左向右每根触发一次handlebar函数调用。盘中时,主图品种每个新分笔数据到达,触发一次handlebar函数调用。
事件驱动 :subscribe 订阅推送
盘中订阅指定品种的分笔数据,新分笔到达时,触发指定的回调函数。
定时任务 :run_time 定时运行
指定固定的时间间隔,持续触发指定的回调函数。
ContextInfo.get_market_data_ex- 获取行情数据,可以获取实时行情和历史数据
ContextInfo.get_market_data_ex( fields=[], stock_code=[], period='follow', start_time='', end_time='', count=-1, dividend_type='follow', fill_data=True, subscribe=True)
Field 数据类型为list,可以选择的数据如下:
stock_list数据类型也是list,储存的是合约代码列表。
period数据类型为str,可以选择:
"tick";"1m":1分钟线;"5m":5分钟线;"15m":15分钟线;"30m":30分钟线;"1h"小时线、"1d":日线;"1w":周线;"1mon":月线;"1q":季线;"1hy":半年线;"1y":年线;
'l2quote':Level2行情快照;'l2quoteaux':Level2行情快照补充;'l2order':Level2逐笔委托;'l2transaction':Level2逐笔成交;'l2transactioncount':Level2大单统计;'l2orderqueue':Level2委买委卖队列
选择L2的周期是需要开通L2权限的,这个不是指手机端或者通达信端的L2行情,而是量化软件的L2行情,数据收费QMT是两三千一年。
start_time 数据类型str,数据起始时间,格式为 %Y%m%d 或 %Y%m%d%H%M%S,填""为获取历史最早一天
end_time数据结束时间,格式为 %Y%m%d 或 %Y%m%d%H%M%S ,填""为截止到最新一天
Count 表示数据个数,数据类型为int
dividend_type除权方式,数据类型str,可选值为:'none':不复权'front':前复权'back':后复权'front_ratio': 等比前复权'back_ratio': 等比后复权
fill_data是否填充数据,数据类型为布尔值。
subscribe订阅数据开关,默认为True,设置为False时不做数据订阅,只读取本地已有数据。
比如获取股票的开盘价和收盘价就可以这么写代码
运行出来的数据结果如下,但是可以看到14号的开盘价和收盘价是为0的,这个是因为本地没有补充数据,所以读取不出来,在数据管理里面补充一下数据即可。
数据补充完成之后,再运行就可以读取到正确的数据了,在做量化交易的时候,程序编写是一方面,另一方面核对数据的准确性也是非常重要的。
ContextInfo.get_full_tick - 获取全推数据,不能用于回测 只能取最新的分笔,不能取历史分笔
ContextInfo.get_full_tick(stock_code=[])
ContextInfo.subscribe_quote - 订阅行情数据。
ContextInfo.subscribe_quote( stock_code, period='follow', dividend_type='follow', result_type='', callback=None)
这两个函数大家可以根据自己的需要去研究编写策略
今天的分享到这里结束了,感谢阅读~想要开通量化交易的朋友欢迎交流