"""
|
华鑫LV2处理工具类
|
"""
|
|
|
# 处理逐笔委托
|
# item逐笔委托
|
# (data['SecurityID'], data['Price'], data['Volume'], data['Side'], data['OrderType'],
|
# data['OrderTime'],data['MainSeq'], data['SubSeq'], data['OrderNO'], data['OrderStatus'])
|
|
|
def __convert_order(item, limit_up_price):
|
time_str = f"{item[5]}"
|
if time_str.startswith("9"):
|
time_str = f"0{time_str}"
|
time_ = f"{time_str[0:2]}:{time_str[2:4]}:{time_str[4:6]}"
|
price = item["Price"]
|
if price <= 0:
|
# 深证的买撤无价格数据,需要去查找价格数据,暂时设置为涨停价
|
price = limit_up_price
|
|
limitPrice = 1 if abs(limit_up_price - price) < 0.001 else 0
|
operateType = 0
|
if item[''] == 'D':
|
if item[3] == '1':
|
# 买撤
|
operateType = 1
|
else:
|
# 卖撤
|
operateType = 3
|
else:
|
if item[3] == '1':
|
# 买
|
operateType = 0
|
else:
|
# 卖
|
operateType = 2
|
return {"time": time_, "price": price, "num": item[2] // 100, "limitPrice": limitPrice,
|
"operateType": operateType, "cancelTime": 0, "cancelTimeUnit": 0, "orderNo": item[8],
|
"mainSeq": item[6], "subSeq": item[7]}
|
|
|
# 处理l2数据
|
def __format_l2_data(origin_datas, code, limit_up_price):
|
datas = []
|
dataIndexs = {}
|
same_time_num = {}
|
for i in range(0, len(origin_datas)):
|
item = origin_datas[i]
|
# 解析数据
|
time = item["time"]
|
if time in same_time_num:
|
same_time_num[time] = same_time_num[time] + 1
|
else:
|
same_time_num[time] = 1
|
|
price = item["price"]
|
num = item["num"]
|
limitPrice = item["limitPrice"]
|
# 涨停价
|
if limit_up_price is not None:
|
if abs(price - limit_up_price) < 0.001:
|
limitPrice = 1
|
else:
|
limitPrice = 0
|
item["limitPrice"] = "{}".format(limitPrice)
|
operateType = item["operateType"]
|
# 不需要非涨停买与买撤
|
if int(item["limitPrice"]) != 1 and (int(operateType) == 0 or int(operateType) == 1):
|
continue
|
key = "{}-{}-{}".format(code, item["mainSeq"], item["subSeq"])
|
if key in dataIndexs:
|
# 数据重复次数+1
|
datas[dataIndexs[key]]['re'] = datas[dataIndexs[key]]['re'] + 1
|
else:
|
# 数据重复次数默认为1
|
datas.append({"key": key, "val": item, "re": 1})
|
dataIndexs.setdefault(key, len(datas) - 1)
|
return datas
|
|
|
def get_format_l2_datas(code, origin_datas, limit_up_price, start_index):
|
# 先转变数据格式
|
datas = [__convert_order(x, limit_up_price) for x in origin_datas]
|
fdatas = __format_l2_data(datas, code, limit_up_price)
|
for i in range(0, len(fdatas)):
|
fdatas[i]["index"] = start_index + i
|