文章鏈接?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數據
推送一分鐘數據
源代碼全部上傳了知識星球可以直接下載