XtMiniQmt_perform_20210917.log - 客户端流程节点日志
XtMiniQmt_perform_20210917.log 是 QMT 内置 Python 文档中的客户端流程节点日志参考条目。
提示
level2market-data-viplocal-data-downloadpermission-dependentrate-or-quota-limit
条目定义
类型: 附录参考
官方名称: XtMiniQmt_perform_20210917.log
本条目不是独立可调用函数,用于说明对象属性、数据字段、枚举、日志或平台约定。
释义
XtMiniQmt_perform_20210917.log 是 QMT 内置 Python 文档中的客户端流程节点日志参考条目。
研究:官方目录未明确;回测:官方目录未明确;模拟:官方目录未明确;实盘:官方目录未明确。
参数
本条目没有独立函数参数。字段、取值或对象属性请查看下方官方详细说明。
返回值
本条目不是独立可调用函数,没有单独返回值。
示例
当前官方章节未提供独立示例;本页重点保留字段、对象或约定定义。
详细说明
获取行情示例
按品种划分
两融
获取融资融券账户可融资买入标的
python
#coding:gbk
def init(C):
r = get_assure_contract('123456789')
if len(r) == 0:
print('未取到担保明细')
else:
finable = [o.m_strInstrumentID+'.'+o.m_strExchangeID for o in r if o.m_eFinStatus==48]
print('可融资买入标的:', finable)
按功能划分
订阅K线全推
使用提示
K线全推需要VIP权限,非VIP用户请勿使用此功能
订阅全市场1m周期K线
python
#coding:gbk
import pandas as pd
import numpy as np
def init(C):
stock_list = C.get_stock_list_in_sector("沪深A股")
sub_num_dict = {i:C.subscribe_quote(
stock_code = i,
period = '1m',
dividend_type = 'none',
result_type = 'dict', # 回调函数的行情数据格式
callback = call_back # 指定一个自定义的函数接收行情,自定义的函数只能有一个位置参数
) for i in stock_list}
def call_back(data):
print(data)
获取N分钟周期K线数据
使用提示
获取历史N分钟数据前,需要先下载历史数据
1m以上,5m以下的数据,是通过1m数据合成的
5m以上,1d以下的数据,是通过5m数据合成的
1d以上的数据,是通过1d的数据合成的
python
#coding:gbk
import pandas as pd
import numpy as np
def init(C):
start_date = '20231001'# 格式"YYYYMMDD",开始下载的日期,date = ""时全量下载
start_date = '20231001'# 格式"YYYYMMDD",开始下载的日期,date = ""时增量下载
end_date = "" # 格式同上,下载结束时间
period = "3m" # 数据周期
need_download = 1 # 取数据是空值时,将need_download赋值为1,确保正确下载了历史数据
code_list = ["110052.SH"] # 可转债
code_list = ["rb2401.SF", "FG403.ZF"] # 期货列表
code_list = ["HO2310-P-2500.IF"] # 期权列表
code_list = ["000001.SZ", "600519.SH"] # 股票列表
判断要不要下载数据
if need_download:
my_download(code_list, period, start_date, end_date)
取数据
data = C.get_market_data_ex([],code_list,period = period, start_time = start_date, end_time = end_date,dividend_type = "back_ratio")
print(data)# 行情数据查看
print(C.get_instrumentdetail(code_list[0])) # 合约信息查看
def hanldebar(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("下载任务结束")
获取 Lv1 行情数据
本示例用于说明如何通过函数获取行情数据。
python
#coding:gbk
get_market_data_ex(subscribe=True)有订阅股票数量限制
即stock_list参数的数量不能超过500
get_market_data_ex(subscribe=False) 该模式下(非订阅模式),接口会从本地行情文件里获取数据,不会获取动态行情数,且不受订阅数限制,但需要提前下载数据
下载数据在 操作/数据管理/补充数据选项卡里,按照页面提示下载数据
get_market_data_ex(subscribe=True) 该模式下(订阅模式),受订阅数量上限限制,可以取到动态行情
建议每天盘后增量补充对应周期的行情
import time
def init(C):
C.stock = C.stockcode + '.' + C.market
获取指定时间的k线
price = C.get_market_data_ex(['open','high','low','close'], [C.stock], start_time='', end_time='',period='1d', subscribe=False)
print(price[C.stock].head())
def handlebar(C):
bar_timetag = C.get_bar_timetag(C.barpos)
bar_date = timetag_to_datetime(bar_timetag, '%Y%m%d%H%M%S')
print('获取截至到%s为止前5根k线的开高低收等字段:'%(bar_date))
获取截至今天为止前30根k线
price = C.get_market_data_ex(
[], [C.stock],
end_time=bar_date,
period=C.period,
subscribe=True,
count=5,
)
print(price[C.stock].to_dict('dict'))
获取 Lv2 数据(需要数据源支持)
方法1 - 查询LV2数据
使用该函数后,会定期查询最新数据,并进行数据返回。
python返回值
#coding:gbk
def init(C):
C.sub_nums = []
C.stock = C.stockcode+'.'+C.market
for field in ['l2transaction', 'l2order', 'l2transactioncount', 'l2quote']:
num = C.subscribe_quote(C.stock, period=field,
dividend_type='follow',
)
C.sub_nums.append(num)
def handlebar(C):
if not C.is_last_bar():
return
price = C.get_market_data_ex([],[C.stock],period='l2transaction',count=10)[C.stock]
price_dict = price.to_dict('index')
print(price_dict)
for pos, t in enumerate(price_dict):
print(f" 逐笔成交:{pos+1} 时间:{price_dict[t]['stime']}, 时间戳:{price_dict[t]['time']}, 成交价:{price_dict[t]['price']}, \
成交量:{price_dict[t]['volume']}, 成交额:{price_dict[t]['amount']} \
成交记录号:{price_dict[t]['tradeIndex']}, 买方委托号:{price_dict[t]['buyNo']},\
卖方委托号:{price_dict[t]['sellNo']}, 成交类型:{price_dict[t]['tradeType']}, \
成交标志:{price_dict[t]['tradeFlag']}, ")
price = C.get_market_data_ex([],[C.stock],period='l2quote',count=10)[C.stock]
price_dict = price.to_dict('index')
print(price_dict)
for pos, t in enumerate(price_dict):
print(f" 十档快照:{pos+1} 时间:{price_dict[t]['stime']}, 时间戳:{price_dict[t]['time']}, 最新价:{price_dict[t]['lastPrice']}, \
开盘价:{price_dict[t]['open']}, 最高价:{price_dict[t]['high']} 最低价:{price_dict[t]['low']}, 成交额:{price_dict[t]['amount']},\
成交总量:{price_dict[t]['volume']}, 原始成交总量:{price_dict[t]['pvolume']}, 证券状态:{price_dict[t]['stockStatus']}, 持仓量:{price_dict[t]['openInt']},\
成交笔数:{price_dict[t]['transactionNum']},前收盘价:{price_dict[t]['lastClose']},多档委卖价:{price_dict[t]['askPrice']},多档委卖量:{price_dict[t]['askVol']},\
多档委买价:{price_dict[t]['bidPrice']},多档委买量:{price_dict[t]['bidVol']}")
price = C.get_market_data_ex([],[C.stock],period='l2order',count=10)[C.stock]
price_dict = price.to_dict('index')
for pos, t in enumerate(price_dict):
print(f" 逐笔委托:{pos+1} 时间:{price_dict[t]['stime']}, 时间戳:{price_dict[t]['time']}, 委托价:{price_dict[t]['price']}, \
委托量:{price_dict[t]['volume']}, 委托号:{price_dict[t]['entrustNo']} \
委托类型:{price_dict[t]['entrustType']}, 委托方向:{price_dict[t]['entrustDirection']},\
")
委托类型: 0:未知 1: 买入,2: 卖出,3: 撤单
price = C.get_market_data_ex([],[C.stock],period='l2transactioncount',count=10)[C.stock]
price_dict = price.to_dict('index')
for pos, t in enumerate(price_dict):
print('大单统计:', price_dict[t])
def stop(C):
for num in C.sub_nums:
C.unsubscribe_quote(num)
方法2 - 订阅LV2数据
此方法在发起订阅后,会自动收到所订阅数据,订阅方需要记录订阅函数返回的订阅号,并在不需要订阅时调用unsubscribe_quote反订阅数据,释放资源。
python返回值
#coding:gbk
def l2_quote_callback(data):
for s in data:
print('lv2快照:',s, data[s])
def l2transaction_callback(data):
for s in data:
print('逐笔成交',s, data[s])
def l2order_callback(data):
for s in data:
print('逐笔委托',s, data[s])
def l2quoteaux_callback(data):
for s in data:
print('行情快照补充',s, data[s])
def l2transactioncount_callback(data):
for s in data:
print('大单统计',s, data[s])
def l2orderqueue_callback(data):
for s in data:
print('委买委卖队列',s, data[s])
def init(C):
C.stock = C.stockcode + '.' + C.market
Level2 逐笔快照
C.subscribe_quote(C.stock, 'l2quote', result_type='dict', callback=l2_quote_callback)
Level2 行情快照补充
C.subscribe_quote(C.stock, 'l2quoteaux', result_type='dict', callback=l2quoteaux_callback)
Level2 逐笔成交
C.subscribe_quote(C.stock, 'l2transaction', result_type='dict', callback=l2transaction_callback)
Level2 逐笔委托
C.subscribe_quote(C.stock, 'l2order', result_type='dict', callback=l2order_callback)
Level2大单统计
C.subscribe_quote(C.stock, 'l2transactioncount', result_type='dict', callback=l2transactioncount_callback)
Level2委买委卖队列
C.subscribe_quote(C.stock, 'l2orderqueue', result_type='dict', callback=l2orderqueue_callback)
def handlebar(C):
return
使用 Lv1 全推数据计算全市场涨幅
python
#coding:gbk
import time
class a():pass
A = a()
def init(C):
A.hsa = C.get_stock_list_in_sector('沪深A股') + C.get_stock_list_in_sector('京市A股')
print('股票池大小', len(A.hsa))
A.vol_dict = {}
for stock in A.hsa:
A.vol_dict[stock] = C.get_last_volume(stock)
C.run_time("f","3nSecond","2019-10-14 13:20:00")
def to_zw(a):
'''0.中文价格字符串'''
import numpy as np
if np.isnan(a):
return '问题数据'
if abs(a) < 1000:
print(a, str(round(int(a) / 1000.0, 2)) + "千")
return str(round(int(a) / 1000.0, 2)) + "千"
if abs(a) < 10000:
return str(int(a))[0] + "千"
if abs(a) < 100000000:
return str(int(a))[:-4] + "万" + str(int(a))[-4]
return f"{int(a / 100000000)}亿"
def f(C):
t0 = time.time()
full_tick = C.get_full_tick(A.hsa)
total_market_value = 0
total_ratio = 0
count = 0
total_amount = 0
ratio_list = []
for stock in A.hsa:
ratio = full_tick[stock]['lastPrice'] / full_tick[stock]['lastClose'] - 1
amount = full_tick[stock]['amount']
total_amount += amount
rise_price = round(full_tick[stock]['lastClose'] *1.2,2) if stock[0] == '3' or stock[:3] == '688' else round(full_tick[stock]['lastClose'] *1.1,2)
#如果要打印涨停品种
#if abs(full_tick[stock]['lastPrice'] - rise_price) <0.01:
print(f"涨停品种 {stock} {C.get_stock_name(stock)}")
market_value = full_tick[stock]['lastPrice'] * A.vol_dict[stock]
total_ratio += ratio * market_value
total_market_value += market_value
count += 1
ratio_list.append(ratio)
#print(count)
total_ratio /= total_market_value
total_ratio *= 100
middle = int(len(ratio_list) / 2)
middle_ratio = ratio_list[middle]
rise_num = len([i for i in ratio_list if i > 0])
down_num = len([i for i in ratio_list if i < 0])
print(f'A股加权涨幅 {round(total_ratio,2)}% 涨幅中位数 {round(middle_ratio,2)}% {rise_num}个上涨 {down_num}个下跌 成交金额 {to_zw(total_amount)} 耗时{round(time.time()- t0,5)}秒')
在行情回调函数里处理动态行情