Administrator
2025-06-12 4e5eed2226fae6a057c454155565211dbc9349e9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
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()