From ad615df734b4d82f9a83a7d1805ac9fabdf01a53 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期四, 21 八月 2025 18:27:39 +0800
Subject: [PATCH] 200元股价以下的不足4手算4手/撤单率设置为100%不计算L后后半段撤单

---
 huaxin_client/l1_client.py |  108 ++++++++++++++++++++++++++++++-----------------------
 1 files changed, 61 insertions(+), 47 deletions(-)

diff --git a/huaxin_client/l1_client.py b/huaxin_client/l1_client.py
index aaa608f..0ee112f 100644
--- a/huaxin_client/l1_client.py
+++ b/huaxin_client/l1_client.py
@@ -9,7 +9,8 @@
 from huaxin_client import socket_util, l1_subscript_codes_manager
 import xmdapi
 from huaxin_client import tool, constant
-from log_module.log import logger_system, logger_local_huaxin_l1, logger_l2_codes_subscript
+from log_module.log import logger_system, logger_local_huaxin_l1, logger_l2_codes_subscript, logger_debug
+from third_data import custom_block_in_money_manager
 from utils import tool as out_tool
 
 ################B绫�##################
@@ -121,32 +122,27 @@
             return
         if pMarketDataField.SecurityName.find("ST") >= 0:
             return
-        close_price = round(pMarketDataField.UpperLimitPrice / out_tool.get_limit_up_rate(pMarketDataField.SecurityID),
-                            2)
-        rate = round((pMarketDataField.LastPrice - close_price) * 100 / close_price, 2)
+        close_price = pMarketDataField.PreClosePrice
+        lastPrice = pMarketDataField.LastPrice
+        if pMarketDataField.BidPrice1:
+            lastPrice = pMarketDataField.BidPrice1
+        rate = round((lastPrice - close_price) * 100 / close_price, 2)
         if out_tool.get_limit_up_rate(pMarketDataField.SecurityID) > 1.1001:
             # 娑ㄥ仠鏉�20%浠ヤ笂鐨勬墦鎶�
             rate = rate / 2
-
-        # print(pMarketDataField.SecurityID, pMarketDataField.SecurityName, rate, pMarketDataField.Volume)
-
+        # (浠g爜, 鐜颁环, 娑ㄥ箙, 閲�, 褰撳墠鏃堕棿, 涔�1浠�, 涔�1閲�, 涔�2浠�, 涔�2閲�, 鏇存柊鏃堕棿, 鍗�1浠�, 鍗�1閲�)
         level1_data_dict[pMarketDataField.SecurityID] = (
             pMarketDataField.SecurityID, pMarketDataField.LastPrice, rate, pMarketDataField.Volume, time.time(),
-            pMarketDataField.BidPrice1, pMarketDataField.BidVolume1)
-        # print(
-        #     "SecurityID[%s] SecurityName[%s] LastPrice[%.2f] Volume[%d] Turnover[%.2f] BidPrice1[%.2f] BidVolume1[%d] AskPrice1[%.2f] AskVolume1[%d] UpperLimitPrice[%.2f] LowerLimitPrice[%.2f]"
-        #     % (pMarketDataField.SecurityID, pMarketDataField.SecurityName, pMarketDataField.LastPrice,
-        #        pMarketDataField.Volume,
-        #        pMarketDataField.Turnover, pMarketDataField.BidPrice1, pMarketDataField.BidVolume1,
-        #        pMarketDataField.AskPrice1,
-        #        pMarketDataField.AskVolume1, pMarketDataField.UpperLimitPrice, pMarketDataField.LowerLimitPrice))
+            pMarketDataField.BidPrice1, pMarketDataField.BidVolume1, pMarketDataField.BidPrice2,
+            pMarketDataField.BidVolume2, pMarketDataField.UpdateTime, pMarketDataField.AskPrice1,
+            pMarketDataField.AskVolume1)
 
 
 __latest_subscript_codes = set()
 
 
 def __upload_codes_info(queue_l1_w_strategy_r: multiprocessing.Queue, datas):
-    if not tool.is_trade_time():
+    if not tool.is_trade_time() and not tool.is_pre_trade_time():
         return
     # 涓婁紶鏁版嵁
     type_ = "set_target_codes"
@@ -165,16 +161,9 @@
         logger_local_huaxin_l1.info(f"({request_id})鏂板鍔犺闃呯殑浠g爜锛歿add_codes}")
 
 
-is_re_subscript = False
-
-
 # 閲嶆柊璁㈤槄浠g爜
 def re_subscript(spi: MdSpi):
     try:
-        global is_re_subscript
-        if is_re_subscript:
-            return
-        is_re_subscript = True
         codes_sh, codes_sz = l1_subscript_codes_manager.request_l1_subscript_target_codes()
         if len(codes_sh) > 100 and len(codes_sz) > 100:
             logger_local_huaxin_l1.info(f"閲嶆柊璁㈤槄 sh-{len(codes_sh)} sz-{len(codes_sz)}")
@@ -203,8 +192,38 @@
             time.sleep(1)
 
 
-def run(queue_l1_w_strategy_r, queue_l1_r_strategy_w):
-    logger_local_huaxin_l1.info("杩愯l1璁㈤槄鏈嶅姟")
+def __run_subscript_task(spi):
+    """
+    杩愯璁㈤槄浠诲姟锛屽湪9:19鍒�9:29涔嬮棿寮�濮嬭闃�
+    @return:
+    """
+    is_re_subscript = False
+    while True:
+        try:
+            # 鍒ゆ柇鏄惁闇�瑕侀噸鏂拌闃�
+            if tool.is_pre_trade_time():
+                re_subscript(spi)
+                is_re_subscript = True
+            if is_re_subscript:
+                break
+        except:
+            pass
+        finally:
+            time.sleep(3)
+
+
+def run(queue_l1_w_strategy_r, queue_l1_r_strategy_w, fixed_codes=None):
+    """
+    杩愯l1璁㈤槄浠诲姟
+
+    @param queue_l1_w_strategy_r: L1鏂瑰啓锛岀瓥鐣ユ柟璇�
+    @param queue_l1_r_strategy_w: L1鏂硅锛岀瓥鐣ユ柟鍐�
+    @param fixed_codes: 鍥哄畾瑕佽繑鍥炴暟鎹殑浠g爜
+    @return:
+    """
+    if fixed_codes is None:
+        fixed_codes = set()
+    logger_local_huaxin_l1.info(f"杩愯l1璁㈤槄鏈嶅姟锛屽浐瀹氫唬鐮侊細{fixed_codes}")
     codes_sh = []
     codes_sz = []
     for i in range(15):
@@ -254,9 +273,12 @@
     #     "002292", 8.06, 9.96, 969500 * 100, time.time())
 
     threading.Thread(target=__read_from_strategy, args=(queue_l1_r_strategy_w,), daemon=True).start()
+
+    threading.Thread(target=__run_subscript_task, args=(spi,), daemon=True).start()
+
     # 绛夊緟绋嬪簭缁撴潫
     while True:
-        print("鏁伴噺", len(level1_data_dict))
+        # print("鏁伴噺", len(level1_data_dict))
         try:
             if len(level1_data_dict) < 1:
                 continue
@@ -265,42 +287,34 @@
             # (浠g爜,鐜颁环,娑ㄥ箙,閲�,鏃堕棿)
             list_ = [level1_data_dict[k] for k in level1_data_dict]
             flist = []
-            plist = []
             now_time_int = int(tool.get_now_time_str().replace(":", ""))
-            threshold_rate = constant.L1_MIN_RATE_PRE if now_time_int < int(
-                "094000") else constant.L1_MIN_RATE
+            threshold_rate = constant.L1_MIN_RATE
             for d in list_:
-                if d[2] >= threshold_rate:
-                    # 娑ㄥ箙灏忎簬5%鐨勯渶瑕佸垹闄�
+                if d[2] >= threshold_rate or d[0] in fixed_codes:
+                    # 娑ㄥ箙灏忎簬3%鐨勯渶瑕佸垹闄�
                     flist.append(d)
-                if d[0] in __position_codes:
-                    plist.append(d)
             flist.sort(key=lambda x: x[2], reverse=True)
+            # 灏嗗浐瀹氫唬鐮佺殑鎺掑湪鏈�鍓�
+            for code in fixed_codes:
+                if code in level1_data_dict:
+                    flist.insert(0, level1_data_dict[code])
             # 姝e紡浜ゆ槗涔嬪墠鍏堝鐞嗘瘮杈冨皯鐨勬暟鎹紝涓嶇劧澶勭悊鏃堕棿涔呴�犳垚鏁版嵁鎷ュ牭
-            MAX_COUNT = 1000
+            MAX_COUNT = 500
             if now_time_int < int("092600"):
-                MAX_COUNT = 100
-            elif now_time_int < int("092800"):
                 MAX_COUNT = 200
+            elif now_time_int < int("092800"):
+                MAX_COUNT = 300
+            elif now_time_int < int("092900"):
+                MAX_COUNT = 400
             datas = flist[:MAX_COUNT]
-            # 灏嗘寔浠撹偂鍔犲叆杩涘幓
-            datas.extend(plist)
             if len(datas) > 0:
                 logger_l2_codes_subscript.info("寮�濮�#鍗庨懌L1涓婁紶浠g爜锛氭暟閲�-{}", len(datas))
                 __upload_codes_info(queue_l1_w_strategy_r, datas)
         except Exception as e:
             logging.exception(e)
+            logger_debug.exception(e)
         finally:
             time.sleep(3)
-            try:
-                # 鍒ゆ柇鏄惁闇�瑕侀噸鏂拌闃�
-                if tool.is_pre_trade_time():
-                    re_subscript(spi)
-                else:
-                    global is_re_subscript
-                    is_re_subscript = False
-            except:
-                pass
 
     # 閲婃斁鎺ュ彛瀵硅薄
     api.Release()

--
Gitblit v1.8.0