from log_module import async_log_util, log_export
|
from log_module.log import hx_logger_l2_transaction_big_buy_order, hx_logger_l2_transaction_big_sell_order
|
from utils import tool
|
|
|
@tool.singleton
|
class L2TransactionDataManager:
|
def __init__(self):
|
self.__latest_buy_order = {}
|
self.__big_buy_orders = {}
|
self.__latest_sell_order = {}
|
self.__big_sell_orders = {}
|
self.__load_data()
|
|
def __load_data(self):
|
self.__big_buy_orders = log_export.load_huaxin_transaction_big_buy_order_infos()
|
self.__big_sell_orders = log_export.load_huaxin_transaction_big_sell_order_infos()
|
|
def get_big_buy_orders(self, code):
|
"""
|
获取成交的大买单
|
:param code:
|
:return: [(买单号, 量, 金额, 时间, 最新成交价格)]
|
"""
|
return self.__big_buy_orders.get(code)
|
|
def get_dealing_buy_order(self, code):
|
"""
|
获取正在成交的买单
|
:param code:
|
:return: (买单号, 量, 金额, 时间, 最新成交价格)
|
"""
|
return self.__latest_buy_order.get(code)
|
|
def get_big_sell_orders(self, code):
|
"""
|
获取成交的卖单
|
:param code:
|
:return: [(买单号, 量, 金额, 时间, 最新成交价格)]
|
"""
|
return self.__big_sell_orders.get(code)
|
|
def get_dealing_sell_order(self, code):
|
"""
|
获取正在成交的卖单
|
:param code:
|
:return: (卖单号, 量, 金额, 时间, 最新成交价格)
|
"""
|
return self.__latest_sell_order.get(code)
|
|
def add_transaction_data(self, code, data):
|
"""
|
|
:param data:(data['SecurityID'], data['TradePrice'], data['TradeVolume'],
|
data['OrderTime'], data['MainSeq'], data['SubSeq'], data['BuyNo'],
|
data['SellNo'], data['ExecType'])
|
:return:
|
"""
|
# 买单号, 卖单号, 成交价格, 成交量
|
item = (data[6], data[7], data[1], data[2])
|
money = round(item[2] * item[3])
|
volume = item[3]
|
price = item[2]
|
order_time = data[3]
|
if code not in self.__latest_buy_order:
|
# (买单号, 量, 金额, 时间, 最新成交价格)
|
self.__latest_buy_order[code] = [item[0], 0, 0, order_time, price]
|
if self.__latest_buy_order[code][0] == item[0]:
|
self.__latest_buy_order[code][1] += volume
|
self.__latest_buy_order[code][2] += money
|
self.__latest_buy_order[code][3] = order_time
|
self.__latest_buy_order[code][4] = price
|
else:
|
if self.__latest_buy_order[code][2] >= 5e5:
|
d = (
|
self.__latest_buy_order[code][0], self.__latest_buy_order[code][1],
|
self.__latest_buy_order[code][2],
|
self.__latest_buy_order[code][3], self.__latest_buy_order[code][4])
|
if code not in self.__big_buy_orders:
|
self.__big_buy_orders[code] = []
|
self.__big_buy_orders[code].append(d)
|
async_log_util.info(hx_logger_l2_transaction_big_buy_order, f"{code}#{d}")
|
|
self.__latest_buy_order[code] = [item[0], volume, money, order_time, price]
|
|
if code not in self.__latest_sell_order:
|
self.__latest_sell_order[code] = [item[1], 0, 0, order_time, price]
|
if self.__latest_sell_order[code][0] == item[1]:
|
self.__latest_sell_order[code][1] += volume
|
self.__latest_sell_order[code][2] += money
|
self.__latest_sell_order[code][3] = order_time
|
self.__latest_sell_order[code][4] = price
|
else:
|
if self.__latest_sell_order[code][2] > 5e5:
|
d = (
|
self.__latest_sell_order[code][0], self.__latest_sell_order[code][1],
|
self.__latest_sell_order[code][2],
|
self.__latest_sell_order[code][3], self.__latest_sell_order[code][4])
|
if code not in self.__big_sell_orders:
|
self.__big_sell_orders[code] = []
|
self.__big_sell_orders[code].append(d)
|
async_log_util.info(hx_logger_l2_transaction_big_sell_order, f"{code}#{d}")
|
self.__latest_sell_order[code] = [item[1], volume, money, order_time, price]
|
|
|
if __name__ == "__main__":
|
L2TransactionDataManager()
|