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()