文章链接 qmt量化教程4----订阅全推数据 (qq.com)
上次写了订阅单股数据的教程 量化教程3---miniqmt当作第三方库设置,提供源代码
全推就主动推送,当行情有变化就会触发回调函数,推送实时数据,可以理解为数据驱动类型,当数据没有变化不推送数据,函数保持一样的数据,可以全推市场数据比如SH,SZ,期货市场等
1打开qmt,登录选择极简模式
原始的qmt全推送函数代码
# coding:utf-8
import time
from xtquant import xtdata
code='600031.SH'
#订阅最新行情
def callback_func(data):
print('回调触发')
stock_code=list(data.keys())
df=xtdata.get_full_tick(code_list=stock_code)
print(df)
xtdata.subscribe_quote(stock_code=code,start_time='20240101',end_time='20240525',period='1m')
hist=xtdata.get_market_data(stock_list=[code],start_time='20240101',end_time='20240525',period='1m')
print(hist)
xtdata.subscribe_whole_quote(code_list=[code],callback=callback_func)
#死循环 阻塞主线程退出
xtdata.run()
运行的效果
推送一分钟的数据先订阅
小果框架利用类开发使用非常方便
小果框架订阅全推数据的代码
# coding:utf-8
import time
from qmt_trader.qmt_data import qmt_data
data=qmt_data()
code='600031.SH'
#订阅最新行情
def callback_func(datas):
print('回调触发')
stock_code=list(datas.keys())
df=data.get_full_tick(code_list=stock_code)
print(df)
data.subscribe_quote(stock_code=code,start_time='20240101',end_time='20240525',period='1m')
hist=data.get_market_data(stock_list=[code],start_time='20240101',end_time='20240525',period='1m')
print(hist)
data.subscribe_whole_quote(code_list=[code],callback=callback_func)
#死循环 阻塞主线程退出
data.run()
#函数的具体代码
"""
def get_full_tick(self,code_list=['600031.SH','600111.SH']):
'''
例子
models=qmt_data()
stock_list=['600031.SH','600111.SH']
df=models.get_full_tick()
print(df)
释义
获取全推数据
参数
code_list - 代码列表,支持传入市场代码或合约代码两种方式
传入市场代码代表订阅全市场,示例:['SH', 'SZ']
传入合约代码代表订阅指定的合约,示例:['600000.SH', '000001.SZ']
返回
dict 数据集 { stock1 : data1, stock2 : data2, ... }
备注
无
获取除权数据
'''
df=self.xtdata.get_full_tick(code_list=code_list)
return df
"""
"""
def get_market_data(self,field_list=[], stock_list=['600031.SH','600111.SH'],
period='1d', start_time='20210101', end_time='20240419',
count=-100, dividend_type='none', fill_data=True):
'''
数据需要先订阅
#启动模型
models=qmt_data()
models.subscribe_quote(stock_code='600031.SH')
df=models.get_market_data(field_list=[], stock_list=['600031.SH','600111.SH'],
period='1d', start_time='20210101', end_time='20240419',
count=-100, dividend_type='none', fill_data=True)
print(df)
释义
从缓存获取行情数据,是主动获取行情的主要接口
参数
field_list - list 数据字段列表,传空则为全部字段
stock_list - list 合约代码列表
period - string 周期
start_time - string 起始时间
end_time - string 结束时间
count - int 数据个数
默认参数,大于等于0时,若指定了start_time,end_time,此时以end_time为基准向前取count条;若start_time,end_time缺省,默认取本地数据最新的count条数据;若start_time,end_time,count都缺省时,默认取本地全部数据
dividend_type - string 除权方式
fill_data - bool 是否向后填充空缺数据
返回
period为1m 5m 1d等K线周期时
返回dict { field1 : value1, field2 : value2, ... }
field1, field2, ... :数据字段
value1, value2, ... :pd.DataFrame 数据集,index为stock_list,columns为time_list
各字段对应的DataFrame维度相同、索引相同
period为tick分笔周期时
返回dict { stock1 : value1, stock2 : value2, ... }
stock1, stock2, ... :合约代码
value1, value2, ... :np.ndarray 数据集,按数据时间戳time增序排列
备注
获取lv2数据时需要数据终端有lv2数据权限
时间范围为闭区间
'''
df=self.xtdata.get_market_data(field_list, stock_list, period,
start_time, end_time, count, dividend_type, fill_data)
return df
def get_marke
"""
"""
def subscribe_whole_quote(self,code_list=['600031.SH'], callback=None):
'''
models=qmt_data()
func=models.on_data_subscribe_quote
models.subscribe_whole_quote(code_list=['600031.SH','600111.SH'],callback=func)
models.run()
释义
订阅全推行情数据,返回订阅号
数据推送从callback返回,数据类型为分笔数据
参数
code_list - 代码列表,支持传入市场代码或合约代码两种方式
传入市场代码代表订阅全市场,示例:['SH', 'SZ']
传入合约代码代表订阅指定的合约,示例:['600000.SH', '000001.SZ']
callback - 数据推送回调
回调定义形式为on_data(datas),回调参数datas格式为 { stock1 : data1, stock2 : data2, ... }
'''
stats=self.xtdata.subscribe_whole_quote(code_list=code_list,callback=callback)
if stats !=-1:
print('{}订阅成功'.format(code_list))
else:
print('{}订阅失败'.format(code_list))
return stats
"""
推送ticck数据
推送一分钟数据
源代码全部上传了知识星球可以直接下载