From ba52d7ac92a36f413eacaa686f8535e859664ec6 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 28 八月 2023 09:45:11 +0800
Subject: [PATCH] bug修改

---
 l2/l2_data_manager_new.py |  184 ++++++++++++++++++++-------------------------
 1 files changed, 81 insertions(+), 103 deletions(-)

diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py
index 1411634..decc883 100644
--- a/l2/l2_data_manager_new.py
+++ b/l2/l2_data_manager_new.py
@@ -7,6 +7,7 @@
 import constant
 from db.redis_manager_delegate import RedisUtils
 from l2.huaxin import l2_huaxin_util, huaxin_delegate_postion_manager
+from log_module import async_log_util
 from third_data import kpl_data_manager, block_info
 from trade.deal_big_money_manager import DealComputeProgressManager
 from utils import global_util, ths_industry_util, tool
@@ -207,7 +208,6 @@
 class L2TradeDataProcessor:
     unreal_buy_dict = {}
     volume_rate_info = {}
-    l2BigNumForMProcessor = L2BigNumForMProcessor()
     __codeActualPriceProcessor = CodeActualPriceProcessor()
     __ths_l2_trade_queue_manager = trade_queue_manager.thsl2tradequeuemanager()
     __thsBuy1VolumnManager = trade_queue_manager.THSBuy1VolumnManager()
@@ -215,7 +215,8 @@
     __l2PlaceOrderParamsManagerDict = {}
     __last_buy_single_dict = {}
     __TradeBuyQueue = transaction_progress.TradeBuyQueue()
-    __latest_process_unique_keys = {}
+    __latest_process_order_unique_keys = {}
+    __latest_process_not_order_unique_keys = {}
     # 鍒濆鍖�
     __TradePointManager = l2_data_manager.TradePointManager()
     __SecondCancelBigNumComputer = SecondCancelBigNumComputer()
@@ -311,8 +312,9 @@
             # 鑾峰彇涓嬪崟浣嶇疆
             place_order_index = huaxin_delegate_postion_manager.get_l2_place_order_position(code, datas)
             if place_order_index:
-                logger_l2_process.info("code:{} 鑾峰彇鍒颁笅鍗曠湡瀹炰綅缃細{}", code, place_order_index)
                 cls.__DCancelBigNumComputer.set_real_order_index(code, place_order_index)
+                cls.__SecondCancelBigNumComputer.set_real_place_order_index(code, place_order_index)
+                async_log_util.info(logger_l2_process, "code:{} 鑾峰彇鍒颁笅鍗曠湡瀹炰綅缃細{}", code, place_order_index)
             __start_time = round(t.time() * 1000)
             if len(datas) > 0:
                 cls.process_add_datas(code, datas, 0, __start_time)
@@ -416,9 +418,10 @@
                     if l2.l2_data_util.L2DataUtil.is_same_time(now_time_str, latest_time):
                         cls.__process_not_order(code, start_index, end_index, capture_timestamp, is_first_code)
 
-            logger_l2_process.info("code:{} 澶勭悊鏁版嵁鑼冨洿: {}-{} 澶勭悊鏃堕棿:{} 鎴浘鏃堕棿鎴筹細{}", code, add_datas[0]["index"],
-                                   add_datas[-1]["index"], round(t.time() * 1000) - __start_time,
-                                   capture_timestamp)
+            async_log_util.info(logger_l2_process, "code:{} 澶勭悊鏁版嵁鑼冨洿: {}-{} 澶勭悊鏃堕棿:{} 鎴浘鏃堕棿鎴筹細{}", code,
+                                add_datas[0]["index"],
+                                add_datas[-1]["index"], round(t.time() * 1000) - __start_time,
+                                capture_timestamp)
             # __start_time = l2_data_log.l2_time(code, round(t.time() * 1000) - __start_time,
             #                                    "l2鏁版嵁澶勭悊鏃堕棿")
 
@@ -454,10 +457,10 @@
     def __process_order(cls, code, start_index, end_index, capture_time, is_first_code, new_add=True):
         # 澧炲姞鎺ㄥ嚭鏈哄埗
         unique_key = f"{start_index}-{end_index}"
-        if cls.__latest_process_unique_keys.get(code) == unique_key:
+        if cls.__latest_process_order_unique_keys.get(code) == unique_key:
             logger_l2_error.error(f"閲嶅澶勭悊鏁版嵁锛歝ode-{code} start_index-{start_index} end_index-{end_index}")
             return
-        cls.__latest_process_unique_keys[code] = unique_key
+        cls.__latest_process_order_unique_keys[code] = unique_key
 
         # S鎾�
         def s_cancel(_buy_single_index, _buy_exec_index):
@@ -539,14 +542,17 @@
         # 鑾峰彇涔板叆淇″彿璧峰鐐�
         buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos(
             code)
+        # 榛樿閲忎负0.2
+        if buy_volume_rate is None:
+            buy_volume_rate = 0.2
 
         # 渚濇澶勭悊
         cancel_data, cancel_msg = s_cancel(buy_single_index, buy_exec_index)
-        if not cancel_data:
-            cancel_data, cancel_msg = h_cancel(buy_single_index, buy_exec_index)
+        # if not cancel_data:
+        #     cancel_data, cancel_msg = h_cancel(buy_single_index, buy_exec_index)
         if not cancel_data:
             cancel_data, cancel_msg = l_cancel(buy_single_index, buy_exec_index)
-        l2_log.debug(code, "鎾ゅ崟璁$畻缁撴潫")
+        # l2_log.debug(code, "鎾ゅ崟璁$畻缁撴潫")
         # _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time,
         #                                   "宸蹭笅鍗�-鎾ゅ崟 鍒ゆ柇鏄惁闇�瑕佹挙鍗�")
         if cancel_data:
@@ -584,7 +590,7 @@
             if need_clear_data:
                 trade_result_manager.real_cancel_success(code, buy_single_index, buy_exec_index,
                                                          local_today_datas.get(code))
-            return
+            return False
         else:
             l2_log.debug(code, "鍙互涓嬪崟锛屽師鍥狅細{}", reason)
 
@@ -607,7 +613,9 @@
                 l2_log.debug(code, "鎵ц涔板叆寮傚父:{}", str(e))
                 pass
             finally:
-                l2_log.debug(code, "m鍊煎奖鍝嶅洜瀛愶細{}", l2_trade_factor.L2TradeFactorUtil.factors_to_string(code))
+                # l2_log.debug(code, "m鍊煎奖鍝嶅洜瀛愶細{}", l2_trade_factor.L2TradeFactorUtil.factors_to_string(code))
+                pass
+            return True
 
     # 鏄惁鍙互鍙栨秷
     @classmethod
@@ -835,29 +843,29 @@
                 float(open_limit_up_lowest_price) - price_pre_close) / price_pre_close < 0.05:
             return False, True, f"鐐告澘鍚庢渶浣庝环璺岃嚦5%浠ヤ笅"
 
-        limit_up_info = cls.__Buy1PriceManager.get_limit_up_info(code)
-        if limit_up_info[0] is None and False:
-            total_data = local_today_datas.get(code)
-            buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos(
-                code)
-            # 涔嬪墠娌℃湁娑ㄥ仠杩�
-            # 缁熻涔板叆淇″彿浣嶅埌褰撳墠浣嶇疆娌℃湁鎾ょ殑澶у崟閲戦
-            min_money_w = l2_data_util.get_big_money_val(float(total_data[buy_single_index]["val"]["price"])) // 10000
-            left_big_num = cls.__SecondCancelBigNumComputer.compute_left_big_num(code,
-                                                                                 buy_single_index,
-                                                                                 buy_exec_index,
-                                                                                 total_data[-1][
-                                                                                     "index"],
-                                                                                 total_data,
-                                                                                 0, min_money_w)
-            if left_big_num > 0:
-                # 閲嶆柊鑾峰彇鍒嗘暟涓庡垎鏁扮储寮�
-                limit_up_time = cls.__LimitUpTimeManager.get_limit_up_time_cache(code)
-                if limit_up_time is None:
-                    limit_up_time = tool.get_now_time_str()
-                score = first_code_score_manager.get_score(code, cls.volume_rate_info[code][0], limit_up_time, True,
-                                                           left_big_num)
-                cls.__l2PlaceOrderParamsManagerDict[code].set_score(score)
+        # limit_up_info = cls.__Buy1PriceManager.get_limit_up_info(code)
+        # if limit_up_info[0] is None and False:
+        #     total_data = local_today_datas.get(code)
+        #     buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos(
+        #         code)
+        #     # 涔嬪墠娌℃湁娑ㄥ仠杩�
+        #     # 缁熻涔板叆淇″彿浣嶅埌褰撳墠浣嶇疆娌℃湁鎾ょ殑澶у崟閲戦
+        #     min_money_w = l2_data_util.get_big_money_val(float(total_data[buy_single_index]["val"]["price"])) // 10000
+        #     left_big_num = cls.__SecondCancelBigNumComputer.compute_left_big_num(code,
+        #                                                                          buy_single_index,
+        #                                                                          buy_exec_index,
+        #                                                                          total_data[-1][
+        #                                                                              "index"],
+        #                                                                          total_data,
+        #                                                                          0, min_money_w)
+        #     if left_big_num > 0:
+        #         # 閲嶆柊鑾峰彇鍒嗘暟涓庡垎鏁扮储寮�
+        #         limit_up_time = cls.__LimitUpTimeManager.get_limit_up_time_cache(code)
+        #         if limit_up_time is None:
+        #             limit_up_time = tool.get_now_time_str()
+        #         score = first_code_score_manager.get_score(code, cls.volume_rate_info[code][0], limit_up_time, True,
+        #                                                    left_big_num)
+        #         cls.__l2PlaceOrderParamsManagerDict[code].set_score(score)
 
         # logger_place_order_score.info("code={},data='score_index':{},'score_info':{}", code,
         #                               cls.__l2PlaceOrderParamsManagerDict[code].score_index,
@@ -880,56 +888,29 @@
             # with open(f"{constant.get_path_prefix()}/logs/profile/{code}_can_buy_first.txt", 'w') as f:
             #     f.write(output.getvalue())
             # return results
-            return cls.can_buy_first(code, limit_up_price, score_index, score, score_info, cls.volume_rate_info[code])
-
+            return cls.can_buy_first(code, limit_up_price)
         else:
             return True, False, "鍦ㄦ兂涔板悕鍗曚腑"
 
     @classmethod
-    def can_buy_first(cls, code, limit_up_price, score_index, score, score_info, volume_rate_info):
-        def is_has_k_format(score_info):
-            # (15涓氦鏄撴棩娑ㄥ箙鏄惁澶т簬24.9%,鏄惁鐮村墠楂橈紝鏄惁瓒呰穼锛屾槸鍚︽帴杩戝墠楂橈紝鏄惁N,鏄惁V,鏄惁鏈夊舰鎬�,澶╅噺澶ч槼淇℃伅,鏄惁鍏锋湁杈ㄨ瘑搴�)
-
-            if score_info[1][3][6][0] and not score_info[1][3][3][0]:
-                return True
-            if score_info[1][3][7][0]:
-                return True
-            return False
-
-        if float(limit_up_price) >= constant.MAX_CODE_PRICE:
-            return False, True, f"鑲′环澶т簬{constant.MAX_CODE_PRICE}鍧�"
-
-        # 9:35涔嬪墠涔板ぇ甯傚��(>=80浜�)绁�
-        if int(tool.get_now_date_str("%Y%m%d")) < int("093500"):
-            zyltgb = global_util.zyltgb_map.get(code)
-            if zyltgb is None:
-                global_data_loader.load_zyltgb()
-                zyltgb = global_util.zyltgb_map.get(code)
-            if zyltgb >= 80 * 100000000:
-                return True, False, "{9:30:00-9:35:00}鑷敱甯傚�尖墺80浜�"
+    def can_buy_first(cls, code, limit_up_price):
         # 鍒ゆ柇鏉垮潡
-        yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes()
-        plate_can_buy, msg = CodePlateKeyBuyManager.can_buy(code,
-                                                            kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas,
-                                                            kpl_data_manager.KPLLimitUpDataRecordManager.total_datas,
-                                                            yesterday_codes,
-                                                            block_info.get_before_blocks_dict())
-        if not plate_can_buy:
-            return False, True, msg
-        return True, False, msg
+        can_buy_result = CodePlateKeyBuyManager.can_buy(code)
+        if can_buy_result is None:
+            logger_debug.warning("娌℃湁鑾峰彇鍒版澘鍧楃紦瀛橈紝灏嗚幏鍙栨澘鍧�")
+            yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes()
+            CodePlateKeyBuyManager.update_can_buy_blocks(code,
+                                                         kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas,
+                                                         kpl_data_manager.KPLLimitUpDataRecordManager.total_datas,
+                                                         yesterday_codes,
+                                                         block_info.get_before_blocks_dict())
+            can_buy_result = CodePlateKeyBuyManager.can_buy(code)
 
-        # if volume_rate_info[0] < 0.4:
-        #     return False, True, f"閲忓ぇ浜�40%鎵嶄笅鍗�,閲忔瘮锛歿volume_rate_info[0]}"
-
-        # 鏄惁鏈塊绾垮舰鎬�(鏈塊绾垮舰鎬佹垨鑰呭ぉ閲忓ぇ闃�),10鐐瑰悗鎵嶉渶瑕佸垽鏂槸鍚︽湁K绾垮舰鎬佷笌鍒嗗��
-        # if int(tool.get_now_time_str().replace(":", "")) > int("100000"):
-        #     has_k_format = score_info[1][3][6][0] or score_info[1][3][7][0]
-        #     if not has_k_format:
-        #         return False, True, f"鏃燢绾垮舰鎬�"
-        #
-        #     if score_index < 0:
-        #         return False, True, f"鍒嗗�硷細{score}鏈揪鍒伴渶瑕佷拱鍏ョ殑鍒嗘暟绾�"
-        # return True, False, ""
+        if can_buy_result is None:
+            return False, True, "灏氭湭鑾峰彇鍒版澘鍧椾俊鎭�"
+        if not can_buy_result[0]:
+            return False, True, can_buy_result[1]
+        return True, False, can_buy_result[1]
 
     @classmethod
     def __cancel_buy(cls, code):
@@ -985,11 +966,18 @@
                             new_add=True):
         if compute_end_index < compute_start_index:
             return
+
+        unique_key = f"{compute_start_index}-{compute_end_index}"
+        if cls.__latest_process_not_order_unique_keys.get(code) == unique_key:
+            logger_l2_error.error(f"閲嶅澶勭悊鏁版嵁锛歝ode-{code} start_index-{compute_start_index} end_index-{compute_end_index}")
+            return
+        cls.__latest_process_not_order_unique_keys[code] = unique_key
+
         _start_time = tool.get_now_timestamp()
         total_datas = local_today_datas[code]
         # 澶勭悊瀹夊叏绗旀暟
-        cls.__buyL2SafeCountManager.compute_left_rate(code, compute_start_index, compute_end_index, total_datas,
-                                                      local_today_num_operate_map.get(code))
+        # cls.__buyL2SafeCountManager.compute_left_rate(code, compute_start_index, compute_end_index, total_datas,
+        #                                               local_today_num_operate_map.get(code))
 
         # 鑾峰彇涔板叆淇″彿璁$畻璧峰浣嶇疆
         buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos(
@@ -1016,8 +1004,6 @@
                 count = 0
                 l2_log.debug(code, "鑾峰彇鍒颁拱鍏ヤ俊鍙疯捣濮嬬偣锛歿} ,璁$畻鑼冨洿锛歿}-{} 锛岄噺姣旓細{}锛屾暟鎹細{}", buy_single_index, compute_start_index,
                              compute_end_index, cls.volume_rate_info[code], total_datas[buy_single_index])
-                # 濡傛灉鏄粖澶╃涓�娆℃湁涓嬪崟寮�濮嬩俊鍙凤紝闇�瑕佽缃ぇ鍗曡捣濮嬬偣
-                cls.l2BigNumForMProcessor.set_begin_pos(code, buy_single_index)
 
         # _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time, "涓嬪崟淇″彿璁$畻鏃堕棿")
 
@@ -1029,11 +1015,6 @@
         start_process_index = max(buy_single_index, compute_start_index)
         if new_get_single:
             start_process_index = buy_single_index
-
-        # 璁$畻m鍊煎ぇ鍗�
-        cls.l2BigNumForMProcessor.process(code, start_process_index,
-                                          compute_end_index,
-                                          gpcode_manager.get_limit_up_price(code))
 
         # _start_time = l2_data_log.l2_time(code, tool.get_now_timestamp() - _start_time, "璁$畻m鍊煎ぇ鍗�")
 
@@ -1068,17 +1049,19 @@
             cls.__save_order_begin_data(code, buy_single_index, compute_index, compute_index,
                                         buy_nums, buy_count, max_num_set_new,
                                         cls.volume_rate_info[code][0])
-            l2_log.debug(code, "__save_order_begin_data")
             cls.__LimitUpTimeManager.save_limit_up_time(code, total_datas[compute_index]["val"]["time"])
-            l2_log.debug(code, "save_limit_up_time")
             cls.__TradePointManager.delete_buy_cancel_point(code)
             l2_log.debug(code, "delete_buy_cancel_point")
             # 鐩存帴涓嬪崟
-            cls.__buy(code, capture_time, total_datas[compute_index], compute_index, is_first_code)
+            ordered = cls.__buy(code, capture_time, total_datas[compute_index], compute_index, is_first_code)
 
             # 鏁版嵁鏄惁澶勭悊瀹屾瘯
             if compute_index < compute_end_index:
-                cls.__process_order(code, compute_index + 1, compute_end_index, capture_time, is_first_code, False)
+                if ordered:
+                    cls.__process_order(code, compute_index + 1, compute_end_index, capture_time, is_first_code, False)
+                else:
+                    cls.__start_compute_buy(code, compute_index + 1, compute_end_index, threshold_money, capture_time,
+                                            is_first_code)
         else:
             # 鏈揪鍒颁笅鍗曟潯浠讹紝淇濆瓨绾拱棰濓紝璁剧疆绾拱棰�
             # 璁板綍涔板叆淇″彿浣嶇疆
@@ -1093,7 +1076,6 @@
     def __get_order_begin_pos(cls, code):
         buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate = cls.__TradePointManager.get_buy_compute_start_data_cache(
             code)
-        logger_debug.info(f"鑾峰彇涔板叆鎵ц浣嶇疆淇℃伅{code}:{buy_single_index}-{buy_exec_index}-{compute_index}-{num}-{count}")
         return buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate
 
     # 淇濆瓨涓嬪崟璧峰淇″彿
@@ -1173,10 +1155,6 @@
     @classmethod
     def __sum_buy_num_for_order_3(cls, code, compute_start_index, compute_end_index, origin_num, origin_count,
                                   threshold_money, buy_single_index, max_num_set):
-        def get_threshold_count():
-            count = threshold_count
-            return count
-
         _start_time = t.time()
         total_datas = local_today_datas[code]
         # is_first_code = gpcode_manager.FirstCodeManager().is_in_first_record_cache(code)
@@ -1234,9 +1212,9 @@
                     # 鍙粺璁�59涓囦互涓婄殑閲戦
                     buy_nums += int(_val["num"]) * int(total_datas[i]["re"])
                     buy_count += int(total_datas[i]["re"])
-                    if buy_nums >= threshold_num and buy_count >= get_threshold_count():
-                        logger_l2_trade_buy.info(
-                            f"{code}鑾峰彇鍒颁拱鍏ユ墽琛岀偣锛歿i} 缁熻绾拱鎵嬫暟锛歿buy_nums} 鐩爣绾拱鎵嬫暟锛歿threshold_num} 缁熻绾拱鍗曟暟锛歿buy_count} 鐩爣绾拱鍗曟暟锛歿get_threshold_count()}, 澶у崟鏁伴噺锛歿len(max_buy_num_set)}")
+                    if buy_nums >= threshold_num and buy_count >= threshold_count:
+                        async_log_util.info(logger_l2_trade_buy,
+                                            f"{code}鑾峰彇鍒颁拱鍏ユ墽琛岀偣锛歿i} 缁熻绾拱鎵嬫暟锛歿buy_nums} 鐩爣绾拱鎵嬫暟锛歿threshold_num} 缁熻绾拱鍗曟暟锛歿buy_count} 鐩爣绾拱鍗曟暟锛歿threshold_count}, 澶у崟鏁伴噺锛歿len(max_buy_num_set)}")
             elif L2DataUtil.is_limit_up_price_buy_cancel(_val):
                 if _val["num"] >= bigger_num:
                     # 鍙粺璁�59涓囦互涓婄殑閲戦
@@ -1275,13 +1253,13 @@
             for i in max_buy_num_set:
                 max_buy_num_set_count += total_datas[i]["re"]
             # 鏈夋挙鍗曚俊鍙凤紝涓斿皬浜庨槇鍊�
-            if buy_nums >= threshold_num and buy_count >= get_threshold_count() and trigger_buy and max_buy_num_set_count >= big_num_count:
+            if buy_nums >= threshold_num and buy_count >= threshold_count and trigger_buy and max_buy_num_set_count >= big_num_count:
                 return i, buy_nums, buy_count, None, max_buy_num_set
 
         l2_log.buy_debug(code, "灏氭湭鑾峰彇鍒颁拱鍏ユ墽琛岀偣锛岃捣濮嬭绠椾綅缃細{} 缁熻绾拱鎵嬫暟锛歿} 鐩爣绾拱鎵嬫暟锛歿}  缁熻绾拱鍗曟暟锛歿} 鐩爣绾拱鍗曟暟锛歿} 澶у崟鏁伴噺锛歿} 鐩爣澶у崟鏁伴噺锛歿}",
                          compute_start_index,
                          buy_nums,
-                         threshold_num, buy_count, get_threshold_count(), max_buy_num_set_count, big_num_count)
+                         threshold_num, buy_count, threshold_count, max_buy_num_set_count, big_num_count)
 
         return None, buy_nums, buy_count, None, max_buy_num_set
 

--
Gitblit v1.8.0