From 4a96c448feb8caf33c8b252309b30cc8d87672e9 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 19 十一月 2024 10:52:59 +0800
Subject: [PATCH] L2测试

---
 huaxin_client/l2_client_test.py |   75 +++++++++++++++++++++++++++----------
 1 files changed, 54 insertions(+), 21 deletions(-)

diff --git a/huaxin_client/l2_client_test.py b/huaxin_client/l2_client_test.py
index c821ae2..72caebb 100644
--- a/huaxin_client/l2_client_test.py
+++ b/huaxin_client/l2_client_test.py
@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
 import logging
+import multiprocessing
 import queue
 import time
 import lev2mdapi
@@ -44,6 +45,8 @@
         self.__big_buy_orders = []
         self.__latest_sell_order = None
         self.__big_sell_orders = []
+        self.big_buy_order_queue = queue.Queue()
+        self.big_sell_order_queue = queue.Queue()
 
     def get_big_buy_orders(self):
         return self.__big_buy_orders
@@ -61,25 +64,37 @@
         #         "ExecType": pTransaction['ExecType'].decode()}
         money = round(item[2] * item[3])
         volume = item[3]
+        order_time = data["OrderTime"]
         if not self.__latest_buy_order:
-            self.__latest_buy_order = [item[0], 0, 0]
+            self.__latest_buy_order = [item[0], 0, 0, order_time]
         if self.__latest_buy_order[0] == item[0]:
             self.__latest_buy_order[1] += volume
             self.__latest_buy_order[2] += money
+            self.__latest_buy_order[3] = order_time
         else:
             if self.__latest_buy_order[2] > 1e6:
-                self.__big_buy_orders.append((self.__latest_buy_order[0],self.__latest_buy_order[1], self.__latest_buy_order[2]))
-            self.__latest_buy_order = [item[0],volume,  money]
+                d = (self.__latest_buy_order[0], self.__latest_buy_order[1], self.__latest_buy_order[2], self.__latest_buy_order[3])
+                self.__big_buy_orders.append(d)
+                self.big_buy_order_queue.put_nowait(d)
+
+            self.__latest_buy_order = [item[0], volume, money, order_time]
 
         if not self.__latest_sell_order:
-            self.__latest_sell_order = [item[1], 0, 0]
+            self.__latest_sell_order = [item[1], 0, 0, order_time]
         if self.__latest_sell_order[0] == item[1]:
             self.__latest_sell_order[1] += volume
             self.__latest_sell_order[2] += money
+            self.__latest_sell_order[3] = order_time
         else:
             if self.__latest_sell_order[2] > 1e6:
-                self.__big_sell_orders.append((self.__latest_sell_order[0],self.__latest_sell_order[1], self.__latest_sell_order[2]))
-            self.__latest_sell_order = [item[1], volume,  money]
+                d = (self.__latest_sell_order[0], self.__latest_sell_order[1], self.__latest_sell_order[2], self.__latest_sell_order[3])
+                self.__big_sell_orders.append(d)
+                self.big_sell_order_queue.put_nowait(d)
+            self.__latest_sell_order = [item[1], volume, money, order_time]
+
+
+# 涔板叆鐨勫ぇ鍗曡鍗曞彿
+l2_transaction_data_dict = {}
 
 
 class Lev2MdSpi(lev2mdapi.CTORATstpLev2MdSpi):
@@ -90,9 +105,6 @@
     subscripted_codes = set()
     # 浠g爜鐨勪笂娆℃垚浜ょ殑璁㈠崟鍞竴绱㈠紩
     __last_transaction_keys_dict = {}
-
-    # 涔板叆鐨勫ぇ鍗曡鍗曞彿
-    __l2_transaction_data_dict = {}
 
     def __init__(self, api, codes):
         lev2mdapi.CTORATstpLev2MdSpi.__init__(self)
@@ -209,9 +221,9 @@
                     "SubSeq": pTransaction['SubSeq'], "BuyNo": pTransaction['BuyNo'],
                     "SellNo": pTransaction['SellNo'],
                     "ExecType": pTransaction['ExecType'].decode()}
-            if item["SecurityID"] not in self.__l2_transaction_data_dict:
-                self.__l2_transaction_data_dict[item["SecurityID"]] = L2TransactionDataManager(item["SecurityID"])
-            self.__l2_transaction_data_dict[item["SecurityID"]].add_transaction_data(item)
+            if item["SecurityID"] not in l2_transaction_data_dict:
+                l2_transaction_data_dict[item["SecurityID"]] = L2TransactionDataManager(item["SecurityID"])
+            l2_transaction_data_dict[item["SecurityID"]].add_transaction_data(item)
 
     def OnRtnNGTSTick(self, pTick):
         """
@@ -228,9 +240,9 @@
                         "SubSeq": pTick['SubSeq'], "BuyNo": pTick['BuyNo'],
                         "SellNo": pTick['SellNo'],
                         "ExecType": '1'}
-                if item["SecurityID"] not in self.__l2_transaction_data_dict:
-                    self.__l2_transaction_data_dict[item["SecurityID"]] = L2TransactionDataManager(item["SecurityID"])
-                self.__l2_transaction_data_dict[item["SecurityID"]].add_transaction_data(item)
+                if item["SecurityID"] not in l2_transaction_data_dict:
+                    l2_transaction_data_dict[item["SecurityID"]] = L2TransactionDataManager(item["SecurityID"])
+                l2_transaction_data_dict[item["SecurityID"]].add_transaction_data(item)
         except Exception as e:
             logger_local_huaxin_l2_subscript.exception(e)
 
@@ -269,17 +281,38 @@
     api.Init()
 
 
-def run(codes) -> None:
+def run(codes, _queue: multiprocessing.Queue) -> None:
     try:
         log.close_print()
+
         __init_l2(codes)
         logger_system.info(f"L2璁㈤槄鏈嶅姟鍚姩鎴愬姛:")
     except Exception as e:
         logger_system.exception(e)
     while True:
-        time.sleep(2)
+        try:
+            for code in l2_transaction_data_dict:
+                l2_transaction_data_manager: L2TransactionDataManager = l2_transaction_data_dict[code]
+                try:
+                    while True:
+                        result = l2_transaction_data_manager.big_buy_order_queue.get(block=False)
+                        if result:
+                            _queue.put_nowait((code, 0, result))
+                        else:
+                            break
+                except:
+                    pass
+                try:
+                    while True:
+                        result = l2_transaction_data_manager.big_sell_order_queue.get(block=False)
+                        if result:
+                            _queue.put_nowait((code, 1, result))
+                        else:
+                            break
+                except:
+                    pass
+        except:
+            pass
+        finally:
+            time.sleep(1)
 
-
-if __name__ == "__main__":
-    run({"000009", "601618"})
-    input()

--
Gitblit v1.8.0