昨天星球同学问我,怎么通过QMT获取行情数据。 这里说明下, QMT分为大QMT 和miniQMT(独立交易) 2个版本。
QMT行情数据主要分为三种,包括本地数据,全推数据,订阅数据。
get_full_tick一次性取出当前最新值,也可以用subscribe_whole_quote注册回调函数,每次处理增量的部分。 对应python接口为get_full_tick在新窗口打开,subscribe_whole_quote
在新窗口打开down_history_data下. 订阅有最大数量限制(例如:假设最大数量限制为300个,则可以单独订阅日线300个,若同时订阅日线和五分钟 则各150个),对应python接口为subscribe_quote在新窗口打开和get_market_data_ex(subscribe=True,)在新窗口打开其中,使用get_market_data或get_market_data_ex(subscribe=True,)时客户端会自动订阅传入的品种,不需要额外调用subscibe_quote,但这种方式订阅的品种没有订阅号,无法手动反订阅,只能通过停止策略释放可订阅数。这里以大QMT举例, 大QMT有内置函数
# coding:gbk
def init(C):
start_date = '20231001'# 格式"YYYYMMDD",开始下载的日期,date = ""时全量下载
end_date = ""
period = "1d"
need_download = 1 # 取数据是空值时,将need_download赋值为1,确保正确下载了历史数据
code_list = ["000001.SZ", "600519.SH"] # 股票列表
if need_download: # 判断要不要下载数据, gmd系列函数都是从本地读取历史数据,从服务器订阅获取最新数据
my_download(code_list, period, start_date, end_date)
############ 仅获取历史行情 #####################
subscribe = False # 设置订阅参数,使gmd_ex仅返回本地数据
count = -1 # 设置count参数,使gmd_ex返回全部数据
data1 = C.get_market_data_ex([],code_list,period = period, start_time = start_date, end_time = end_date,subscribe = subscribe)
############ 仅获取最新行情 #####################
subscribe = True # 设置订阅参数,使gmd_ex仅返回最新行情
count = 1 # 设置count参数,使gmd_ex仅返回最新行情数据
data2 = C.get_market_data_ex([],code_list,period = period, start_time = start_date, end_time = end_date,subscribe = subscribe, count = 1) # count 设置为1,使返回值只包含最新行情
############ 获取历史行情+最新行情 #####################
subscribe = True # 设置订阅参数,使gmd_ex仅返回最新行情
count = -1 # 设置count参数,使gmd_ex返回全部数据
data3 = C.get_market_data_ex([],code_list,period = period, start_time = start_date, end_time = end_date,subscribe = subscribe, count = -1) # count 设置为-1,使返回值包含最新行情和历史行情
print(data1[code_list[0]].tail())# 行情数据查看
print(data2[code_list[0]].tail())
print(data3[code_list[0]].tail())
def handlebar(C):
return
def my_download(stock_list,period,start_date = '', end_date = ''):
'''
用于显示下载进度
'''
if "d" in period:
period = "1d"
elif "m" in period:
if int(period[0]) < 5:
period = "1m"
else:
period = "5m"
elif "tick" == period:
pass
else:
raise KeyboardInterrupt("周期传入错误")
n = 1
num = len(stock_list)
for i in stock_list:
print(f"当前正在下载{n}/{num}")
download_history_data(i,period,start_date, end_date)
n += 1
print("下载任务结束")
其实迅投QMT知识库写的蛮详细的, 现在一些同学喜欢到网上找一些二手资料,比如我这篇文章就属于二手资料。 其实学技术最好的方法是跟着官方文档走。
QMT官方文档百度搜索一下就有地址, Ptrade一样。 如果找不到,可以加我进交流群,群公告有写。 如果会python编程,按照教程一步步做, 跑通流程没什么问题, 重点是赚钱策略需要自己多思考。