From f2dfe1818b6286e4ff25e97c4d72a17bae4eea42 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 22 一月 2025 23:05:22 +0800
Subject: [PATCH] 辨识度修改/临时大单bug修改

---
 third_data/history_k_data_util.py                |    3 
 trade/buy_radical/radical_buy_data_manager.py    |   55 ++++++++++++++----
 l2_test.py                                       |   10 +++
 l2/huaxin/huaxin_delegate_postion_manager.py     |   55 ++++++++++++++++--
 trade/buy_radical/radical_buy_strategy.py        |    5 -
 constant.py                                      |    4 
 trade/buy_radical/block_special_codes_manager.py |   15 +++-
 l2/l2_data_manager_new.py                        |   13 ++-
 l2/l2_transaction_data_manager.py                |    3 
 9 files changed, 124 insertions(+), 39 deletions(-)

diff --git a/constant.py b/constant.py
index c010a0f..c0954fb 100644
--- a/constant.py
+++ b/constant.py
@@ -198,11 +198,11 @@
 MAX_SUBSCRIPT_CODE_PRICE = 100
 
 # 鎵叆浠锋牸鍖洪棿
-MAX_CODE_RADICAL_BUY_PRICE = 40
+MAX_CODE_RADICAL_BUY_PRICE = 50
 MIN_CODE_RADICAL_BUY_PRICE = 2
 
 # 鎵叆鐨勮嚜鐢辨祦閫氬競鍊煎尯闂达細[[(鑷敱娴侀�氭渶灏忓��,鑷敱娴侀�氭渶澶у��),(鑲′环鏈�灏忓��,鑲′环鏈�澶у��)]]
-RADICAL_BUY_ZYLTGB_AS_YI_RANGES = [[(5, 1000), (3, 40)], [(50, 1000), (2, 3)]]
+RADICAL_BUY_ZYLTGB_AS_YI_RANGES = [[(5, 1000), (3, 50)], [(50, 1000), (2, 3)]]
 
 # L2鏁版嵁鏄惁杞藉叆瀹屾垚
 L2_DATA_IS_LOADED = False
diff --git a/l2/huaxin/huaxin_delegate_postion_manager.py b/l2/huaxin/huaxin_delegate_postion_manager.py
index b13087d..e53683f 100644
--- a/l2/huaxin/huaxin_delegate_postion_manager.py
+++ b/l2/huaxin/huaxin_delegate_postion_manager.py
@@ -8,6 +8,7 @@
 from l2 import l2_data_util, l2_data_source_util
 from l2.huaxin import l2_huaxin_util
 from l2.l2_data_util import L2DataUtil
+from l2.transaction_progress import TradeBuyQueue
 from log_module import async_log_util
 from log_module.log import hx_logger_trade_debug, logger_real_place_order_position, logger_debug
 from trade.huaxin import huaxin_trade_record_manager
@@ -197,27 +198,37 @@
             if set(target_volumes) != set(volumes_list[i:i + len(target_volumes)]):
                 continue
             # 濮旀墭闂撮殧鏃堕棿涓嶈兘鐩稿樊100ms浠ヤ笂
+            # volumes_info_list:鐩爣閲忓垪琛�
             temp_volumes_info_list = volumes_info_list[i:i + len(target_volumes)]
             sub_time_list = []
+            sub_index_list = []
             for j in range(0, len(temp_volumes_info_list) - 1):
                 sub_ms = tool.trade_time_sub_with_ms(
                     L2DataUtil.get_time_with_ms(temp_volumes_info_list[j + 1][2]["val"]),
                     L2DataUtil.get_time_with_ms(temp_volumes_info_list[j][2]["val"]))
+                sub_index = temp_volumes_info_list[j + 1][2]["index"] - temp_volumes_info_list[j][2]["index"]
                 sub_time_list.append(abs(sub_ms))
+                sub_index_list.append(sub_index)
             max_sub_time = max(sub_time_list)
+            max_sub_index = max(sub_index_list)
             if max_sub_time > THRESHOLD_MS:
                 continue
-            # 鏈�澶х殑鏃堕棿宸�
-            match_list.append((max_sub_time, temp_volumes_info_list[0][2]))
+            # 鏈�澶х殑鏃堕棿宸�,鏈�澶х殑绱㈠紩宸�, 鏁版嵁
+            match_list.append((max_sub_time, max_sub_index, temp_volumes_info_list[0][2]))
         if not match_list:
             # 娌℃湁鎵惧埌鐪熷疄涓嬪崟浣�
             return None
+        # 鏈�鍚堥�傜殑鏄椂闂寸浉宸负0锛岀储寮曠浉宸负1
+        for m in match_list:
+            if m[0] == 0 and m[1] == 1:
+                return m[2]
+
         # 鑾峰彇鏃堕棿宸渶灏忕殑鏁版嵁
         real_place_order_info = match_list[0]
         for x in match_list:
             if x[0] < real_place_order_info[0]:
                 real_place_order_info = x
-        return real_place_order_info[1]
+        return real_place_order_info[2]
 
     @classmethod
     def compute_l2_place_order_position(cls, code, add_datas):
@@ -259,17 +270,47 @@
             return None, order_info, None
 
     @classmethod
-    def recompute_for_slow_time(cls, code, order_info, real_place_index, compute_type):
+    def recompute_l2_place_order_position(cls, code, order_info, real_place_index, compute_type):
         """
-        鍥犱负L2鏁版嵁寤惰繜闂鑰岄噸鏂拌绠楃湡瀹炰笅鍗曚綅
+        閲嶆柊璁$畻鐪熷疄涓嬪崟浣�
         @param code:
         @param order_info:
         @param real_place_index:
         @param compute_type:
         @return:
         """
-        # TODO 閲嶆柊璁$畻, 鏍规嵁瀹為檯璁㈠崟鏉ヨ绠�
-        pass
+        # 閲嶆柊璁$畻, 鏍规嵁瀹為檯璁㈠崟鏉ヨ绠�
+        # 濡傛灉鐪熷疄涓嬪崟浣嶅湪瀹為檯鎴愪氦浣嶇疆涔嬪悗灏遍渶瑕佺煫姝�
+        trade_index, is_default = TradeBuyQueue().get_traded_index(code)
+        if is_default:
+            return None
+        # if real_place_index >= trade_index:
+        #     return None
+        current_delegates = huaxin_trade_record_manager.DelegateRecordManager().list_current_delegates(code)
+        if not current_delegates:
+            return None
+        accept_time = current_delegates[0]["acceptTime"]
+        accept_time = int(accept_time.replace(":", ""))
+        # 浠庣湡瀹炰笅鍗曚綅缃紑濮嬶紝鍒板鎵樻椂闂存埅姝�
+        total_datas = l2_data_util.local_today_datas.get(code)
+        end_index = None
+        for i in range(trade_index + 1, total_datas[-1]["index"]):
+            data = total_datas[i]
+            val = data["val"]
+            if int(val["time"].replace(":", "")) > accept_time:
+                end_index = data["index"]
+                break
+        if end_index is None:
+            return None
+
+        order_info_list = order_info[0]  # [(閲�,浠锋牸, order_ref)]
+        exec_data = order_info[1]
+        place_order_data = cls.__compute_real_place_order_position(code, exec_data, order_info_list,
+                                                                   total_datas[trade_index + 1:end_index])
+        if not place_order_data:
+            return None
+        real_place_index_info = place_order_data["index"], RELIABILITY_TYPE_REAL
+        return real_place_index_info[0]
 
     @classmethod
     def get_place_order_position(cls, code):
diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py
index 89bc69d..f9f1910 100644
--- a/l2/l2_data_manager_new.py
+++ b/l2/l2_data_manager_new.py
@@ -1,6 +1,7 @@
 import copy
 import logging
 import threading
+import time
 import time as t
 
 from cancel_strategy.s_l_h_cancel_strategy import HourCancelBigNumComputer, LCancelRateManager
@@ -392,10 +393,10 @@
 
     @classmethod
     def __recompute_real_order_index(cls, code, pre_real_order_index, order_info, compute_type):
-        # 鍥犱负鏁版嵁鎱㈢殑闂閲嶆柊璁$畻
-        real_order_index = huaxin_delegate_postion_manager.recompute_for_slow_time(code, order_info,
-                                                                                   pre_real_order_index, compute_type)
-        if real_order_index:
+        # 1s涔嬪悗閲嶆柊璁$畻
+        time.sleep(1)
+        real_order_index = huaxin_delegate_postion_manager.RealDelegateOrderPositionManager().recompute_l2_place_order_position(code, order_info, pre_real_order_index, compute_type)
+        if real_order_index and pre_real_order_index!=real_order_index:
             try:
                 exec_index = order_info[6]
                 order_begin_pos = cls.__get_order_begin_pos(
@@ -1907,7 +1908,9 @@
                     return False, None, "璺濈涓婃缁熻澶у崟鏃堕棿杩囧幓60s", set()
 
             if lack_money == 0:
-                min_num = int(5000 / limit_up_price)
+                if not tool.is_sh_code(code):
+                    # 闈炰笂璇佺殑绁ㄧ湅50w
+                    min_num = int(5000 / limit_up_price)
             # 闇�瑕佺洃鍚殑澶у崟
             watch_indexes = set()
             # 鎬诲鎵樺ぇ鍗曢噾棰�
diff --git a/l2/l2_transaction_data_manager.py b/l2/l2_transaction_data_manager.py
index 9a5efdb..ad2d8ac 100644
--- a/l2/l2_transaction_data_manager.py
+++ b/l2/l2_transaction_data_manager.py
@@ -230,7 +230,8 @@
                     cls.__dealing_order_info_dict[code][4] = data[3]
                     cls.__dealing_order_info_dict[code][5] = data[1]
                     cls.__dealing_order_info_dict[code][6] = data[7]
-                    cls.__dealing_order_info_dict[code][7] += money
+                    if is_limit_up:
+                        cls.__dealing_order_info_dict[code][7] += money
                 else:
                     # 淇濆瓨涓婁竴鏉℃暟鎹�
                     async_log_util.info(hx_logger_l2_transaction_desc, f"{code}#{cls.__dealing_order_info_dict[code]}")
diff --git a/l2_test.py b/l2_test.py
index 60914b8..07d0a4a 100644
--- a/l2_test.py
+++ b/l2_test.py
@@ -57,7 +57,15 @@
             code = ps_dict.get('code')
             money_info = CodeInMoneyManager().get_money_info(code)
             response_data = json.dumps({"code": 0, "data": money_info})
-
+        elif url.path == "/get_codes_money_info":
+            ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()])
+            codes_str = ps_dict.get('codes')
+            codes = json.loads(codes_str)
+            fresults = {}
+            for code in codes:
+                money_info = CodeInMoneyManager().get_money_info(code)
+                fresults[code] = money_info
+            response_data = json.dumps({"code": 0, "data": fresults})
         self.send_response(200)
         # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁
         self.send_header('Content-type', 'application/json')
diff --git a/third_data/history_k_data_util.py b/third_data/history_k_data_util.py
index aada0ae..a054626 100644
--- a/third_data/history_k_data_util.py
+++ b/third_data/history_k_data_util.py
@@ -242,7 +242,6 @@
             except Exception as e:
                 logger_debug.exception(e)
 
-
     @classmethod
     def get_gp_current_info(cls, codes):
         return JueJinApi.get_gp_current_info(codes)
@@ -372,10 +371,10 @@
         latest_trading_date = tool.get_now_date_str()
     return latest_trading_date
 
+
 if __name__ == "__main__":
     print(HistoryKDatasUtils.get_previous_trading_date("2024-12-31"))
     print(HistoryKDatasUtils.get_history_tick_n("000095", 10))
-
 
     # now_day = tool.get_now_date_str()
     # results = JueJinApi.get_history_instruments(JueJinApi.get_juejin_code_list_with_prefix(["600265"]),
diff --git a/trade/buy_radical/block_special_codes_manager.py b/trade/buy_radical/block_special_codes_manager.py
index e40993e..c4044bc 100644
--- a/trade/buy_radical/block_special_codes_manager.py
+++ b/trade/buy_radical/block_special_codes_manager.py
@@ -121,9 +121,9 @@
         鑾峰彇鏉垮潡鏈夎鲸璇嗗害鐨勪唬鐮�
         @return:
         """
-        trading_dates = HistoryKDatasUtils.get_latest_trading_date(15)
+        trading_dates = HistoryKDatasUtils.get_latest_trading_date(8)
         max_day = trading_dates[-1]
-        min_day = tool.date_sub(max_day, 365)
+        min_day = tool.date_sub(max_day, 180)
 
         block_map = self.__get_block_map()
         # [(鏉垮潡鍚嶇О,浠g爜, 鍦ㄦ澘鍧椾腑鐨勬定鍋滄鏁�)]
@@ -185,10 +185,15 @@
                     # 闈炴甯哥エ
                     continue
 
-                if juejin_result_dict[code][2] < 3 or juejin_result_dict[code][2] > 40:
-                    # 灏忎簬3鍧�/澶т簬40鍧�
+                if juejin_result_dict[code][2] < 3 or juejin_result_dict[code][2] > 50:
+                    # 灏忎簬3鍧�/澶т簬50鍧�
                     continue
+
+                if int(float(limit_up_info_map[code][2])) < 50:
+                    continue
+
                 index += 1
+                # [(鏉垮潡, 浠g爜鍚嶇О, 浠g爜, 娑ㄥ仠娆℃暟, 鑷敱甯傚��)]
                 fdatas.append(
                     (b, limit_up_info_map[code][1], code, code_block_dict[code][b],
                      int(float(limit_up_info_map[code][2]))))
@@ -208,4 +213,4 @@
 
 if __name__ == "__main__":
     # print(datas)
-    print( BlockSpecialCodesManager().get_code_blocks("002582"))
+    print(BlockSpecialCodesManager().get_code_blocks("002582"))
diff --git a/trade/buy_radical/radical_buy_data_manager.py b/trade/buy_radical/radical_buy_data_manager.py
index 6d85777..a07e982 100644
--- a/trade/buy_radical/radical_buy_data_manager.py
+++ b/trade/buy_radical/radical_buy_data_manager.py
@@ -4,6 +4,7 @@
 import json
 import logging
 import time
+import urllib
 
 import requests
 
@@ -126,12 +127,13 @@
         pre_limit_up_price_money_list = []
         deal_order_list = BigOrderDealManager().get_total_buy_data_list(code)
         deal_order_ids = set()
-        for x in deal_order_list:
-            if opened_time and int(opened_time.replace(":", "")) > int(
-                    l2_huaxin_util.convert_time(x[3]).replace(":", "")):
-                # 寮�鏉挎椂闂翠箣鍓�
-                continue
-            deal_order_ids.add(x[0])
+        if deal_order_list:
+            for x in deal_order_list:
+                if opened_time and int(opened_time.replace(":", "")) > int(
+                        l2_huaxin_util.convert_time(x[3]).replace(":", "")):
+                    # 寮�鏉挎椂闂翠箣鍓�
+                    continue
+                deal_order_ids.add(x[0])
         for info in buy_money_list:
             if info[1] != limit_up_price:
                 continue
@@ -264,21 +266,30 @@
             return False
         return True
 
-    def set_temp_deal_big_orders(self, code, money_list):
+    def set_temp_deal_big_orders(self, code, money_info_list):
         """
         璁剧疆涓存椂澶у崟
         @param code:
-        @param money_list: 鎴愪氦鐨勫ぇ涔板崟
+        @param money_info_list: 鎴愪氦鐨勫ぇ涔板崟:[(璁㈠崟鍙凤紝鎬昏偂鏁帮紝鎴愪氦閲戦,鎴愪氦寮�濮嬫椂闂�,鎴愪氦缁撴潫鏃堕棿, 鏈�杩戠殑鎴愪氦浠锋牸, 鏈�杩戠殑鍗栧崟鍙�, 娑ㄥ仠浠锋垚浜ら噾棰�)]
         @return:
         """
         if code in self.__temp_big_order_threshold:
             return
-        if not money_list or len(money_list) < 2:
+        if not money_info_list or len(money_info_list) < 2:
             return
+        fmoney_list = []
+        min_money = l2_data_util.get_big_money_val(gpcode_manager.get_limit_up_price_as_num(code), tool.is_ge_code(code))
+        for info in money_info_list:
+            if info[7] >= min_money:
+                # 娑ㄥ仠浠锋垚浜ら儴鍒嗘槸澶у崟
+                fmoney_list.append((info[7], info[0]))
+        if len(fmoney_list) < 2:
+            return
+        money_list = [x[0] for x in fmoney_list]
         # 璁$畻澶у崟: 鍓�2涓ぇ鍗曠殑鍧囧��
         self.__temp_big_order_threshold[code] = int(sum(money_list[:2]) // 2)
         async_log_util.info(logger_l2_radical_buy_data,
-                            f"棣栨涓婃澘涓存椂涔板ぇ鍗曪細{code}-{self.__temp_big_order_threshold[code]}-{money_list[:2]}")
+                            f"棣栨涓婃澘涓存椂涔板ぇ鍗曪細{code}-{self.__temp_big_order_threshold[code]}-{fmoney_list[:2]}")
 
     def get_temp_deal_big_order_threshold(self, code):
         return self.__temp_big_order_threshold.get(code)
@@ -522,7 +533,9 @@
         @param code:
         @return:
         """
-
+        if 1 > 0:
+            # 澶у崟瓒冲鏆傛椂涓嶅仛澶勭悊
+            return
         # 濡傛灉鍔犵豢浜嗗氨鐩存帴鎷夌櫧
         if gpcode_manager.GreenListCodeManager().is_in_cache(code):
             if gpcode_manager.WhiteListCodeManager().is_in_cache(code):
@@ -1641,7 +1654,9 @@
     """
     # 鍘熷洜涓嬮潰鐨勪唬鐮佷釜鏁�
     deal_reason_codes = {}
-
+    # 鍔犳兂涓嶇鏉垮潡鏄惁鎴愪氦
+    if gpcode_manager.WantBuyCodesManager().is_in_cache(code):
+        return radical_buy_blocks
     for dc in deal_codes:
         # 鑾峰彇娑ㄥ仠鍘熷洜
         reasons = __get_deal_reasons(dc)
@@ -1741,7 +1756,6 @@
                 logger_debug.exception(e)
 
 
-
 def get_l2_big_order_deal_info(code_):
     """
     鑾峰彇鎴愪氦澶у崟淇℃伅
@@ -1758,6 +1772,21 @@
     return None
 
 
+def list_l2_big_order_deal_info(codes):
+    """
+    鑾峰彇鎴愪氦澶у崟淇℃伅
+    @param code_:
+    @return:(鍑�娴佸叆閲戦, (澶у崟涔伴噾棰�, 澶у崟涔版暟閲�), (澶у崟鍗栭噾棰�, 澶у崟鍗栨暟閲�))
+    """
+    response_data = requests.get(
+        "http://127.0.0.1:9005/get_codes_money_info?codes=" + urllib.parse.quote(json.dumps(list(codes))))
+    r_str = response_data.text
+    response_data = json.loads(r_str)
+    if response_data["code"] == 0:
+        datas = response_data["data"]
+        return datas
+    return None
+
 def is_first_limit_up_buy(code):
     """
     鏄惁鏄灏佷笅鍗�: 锛堜笅鍗曟鏁颁负0+娌″湪娑ㄥ仠浠g爜涓級 鎴栬�� 锛堝浜庝笅鍗曠姸鎬� + 涓嬪崟娆℃暟涓�1锛屼笖涓嬪崟涓洪娆′笅鍗曪級
diff --git a/trade/buy_radical/radical_buy_strategy.py b/trade/buy_radical/radical_buy_strategy.py
index a5d48de..7649883 100644
--- a/trade/buy_radical/radical_buy_strategy.py
+++ b/trade/buy_radical/radical_buy_strategy.py
@@ -127,9 +127,8 @@
     # 鍒濇涓婃澘闇�瑕佽绠椾复鏃跺ぇ鍗�
     if radical_buy_data_manager.is_first_limit_up_buy(code):
         # 棣栧皝涓嬪崟
-        money_list = BigOrderDealManager().get_total_buy_money_list(code)
-        radical_buy_data_manager.BeforeSubDealBigOrderManager().set_temp_deal_big_orders(code, money_list)
-
+        money_info_list = BigOrderDealManager().get_total_buy_data_list(code)
+        radical_buy_data_manager.BeforeSubDealBigOrderManager().set_temp_deal_big_orders(code, money_info_list)
 
     price = transaction_datas[-1][1]
     huaxin_timestamp = transaction_datas[-1][3]

--
Gitblit v1.8.0