From bd3b7881d06dbae315f6c39a4aaa95968af4eefa Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 03 十二月 2024 13:34:57 +0800
Subject: [PATCH] L2订阅的目标代码修改

---
 trade/current_price_process_manager.py |   96 ++++++++++++++++++++++++++++++++++++------------
 1 files changed, 72 insertions(+), 24 deletions(-)

diff --git a/trade/current_price_process_manager.py b/trade/current_price_process_manager.py
index 22ac7be..4baa5aa 100644
--- a/trade/current_price_process_manager.py
+++ b/trade/current_price_process_manager.py
@@ -7,9 +7,12 @@
 
 from l2.huaxin import huaxin_target_codes_manager
 from log_module import async_log_util
-from log_module.log import logger_l2_codes_subscript
+from log_module.log import logger_l2_codes_subscript, logger_debug
 import constant
 from code_attribute import gpcode_manager
+from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager
+from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
+from trade.buy_radical.radical_buy_data_manager import RadicalBuyBlockManager
 from utils import tool, import_util
 from trade import trade_manager, l2_trade_util, trade_constant
 from trade.trade_data_manager import CodeActualPriceProcessor
@@ -21,11 +24,65 @@
 latest_add_codes = set()
 
 
-def accept_prices(prices, request_id=None):
-    print("鎬讳环鏍间唬鐮佹暟閲忥細", len(prices))
-    now_str = tool.get_now_time_str()
-    # 鑾峰彇鎯充拱鍗�
-    want_codes = gpcode_manager.WantBuyCodesManager().list_code_cache()
+def __compute_code_order(code, top_in_blocks=None, yesterday_limit_up_codes=None):
+    """
+    璁$畻浠g爜鐨勬帓搴�
+    @param code:
+    @param top_in_blocks: 鍑�娴佸叆鍓嶅嚑
+    @return: 鎺掑簭鍊硷紝鑻ヤ负璐熷�间笉璁㈤槄
+    """
+    # 鎯充拱鍗�/闅斿鍗曟帓搴忎綅
+    if yesterday_limit_up_codes is None:
+        yesterday_limit_up_codes = set()
+    if top_in_blocks is None:
+        top_in_blocks = []
+    # 鎯充拱鍗�
+    if gpcode_manager.WantBuyCodesManager().is_in_cache(code):
+        return 0
+    # 闅斿鍗曟媿涓�
+    if gpcode_manager.BuyOpenLimitUpCodeManager().is_in_cache(code):
+        return 0
+
+    trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code)
+    # 濡傛灉褰撳墠娓呭崟澶勪簬濮旀墭鐘舵�佸氨涓嶈兘绉婚櫎
+    if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED:
+        return 0
+    # 楂樹綅鏉�
+    if code in yesterday_limit_up_codes:
+        return -1
+    # 榛戝悕鍗�
+    if l2_trade_util.is_in_forbidden_trade_codes(code):
+        return -1
+    # 鏉垮潡
+    blocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code)
+    if not blocks:
+        return -1
+    for b in blocks:
+        if b in top_in_blocks:
+            index = top_in_blocks.index(b)
+            # 鏌ヨ鍦ㄦ澘鍧椾腑鐨勬帓搴�
+            info = RadicalBuyBlockManager().get_history_index(code, b, yesterday_limit_up_codes)
+            if info[0] < 4:
+                return index + 1
+            elif info[0] < 6:
+                # 鍒ゆ柇鏄惁鍏锋湁杈ㄨ瘑搴�
+                special_codes = BlockSpecialCodesManager().get_block_codes(b)
+                if special_codes and code in special_codes:
+                    return index + 1
+    return 10000
+
+
+def accept_prices(prices, request_id=None, top_in_blocks=None, yesterday_limit_up_codes=None):
+    """
+    鎺ユ敹浠锋牸锛屽鐞嗚闃�
+    @param yesterday_limit_up_codes: 鏄ㄦ棩娑ㄥ仠鏁版嵁
+    @param history_limit_up_datas: 鍘嗗彶娑ㄥ仠鏁版嵁
+    @param prices:
+    @param request_id:
+    @param top_in_blocks: 鍑�娴佸叆鍓嶅嚑鐨勪唬鐮�
+    @return:
+    """
+    logger_debug.debug(f"鎺ユ敹L1鏁版嵁娴嬭瘯锛氭祦鍏ュ墠20-{top_in_blocks}")
     if True:
         _code_list = []
         _delete_list = []
@@ -37,24 +94,14 @@
             pricePre = gpcode_manager.CodePrePriceManager.get_price_pre_cache(code)
             if pricePre is not None:
                 # 鏄惁鏄兂涔板崟
-                is_want_buy = code in want_codes
-                trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code)
-                # 濡傛灉褰撳墠娓呭崟澶勪簬濮旀墭鐘舵�佸氨涓嶈兘绉婚櫎
-                if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED:
-                    is_want_buy = True
-
-                if gpcode_manager.BuyOpenLimitUpCodeManager().is_in_cache(code):
-                    is_want_buy = True
+                order_index = __compute_code_order(code, top_in_blocks, yesterday_limit_up_codes)
 
                 rate = round((price - pricePre) * 100 / pricePre, 2)
                 if tool.is_ge_code(code):
                     # 鍒涗笟鏉跨殑娑ㄥ箙闇�瑕佹墦鎶�
                     rate = rate / 2
-                if rate >= 0:
-                    # 鏆傚瓨娑ㄥ箙涓烘鐨勪唬鐮�
-                    _code_list.append((rate, code, 1 if is_want_buy else 0))
-                elif is_want_buy:
-                    _code_list.append((rate, code, 1 if is_want_buy else 0))
+                if order_index >= 0:
+                    _code_list.append((rate, code, order_index))
                 else:
                     # 鏆傚瓨娑ㄥ箙涓鸿礋鐨勪唬鐮�
                     _delete_list.append((rate, code, 0))
@@ -69,7 +116,8 @@
         gpcode_manager.set_prices(temp_prices)
         # -------------------------------澶勭悊浜ゆ槗浣嶇疆鍒嗛厤---------------------------------
         # 鎺掑簭
-        new_code_list = sorted(_code_list, key=lambda e: (e.__getitem__(2), e.__getitem__(0)), reverse=True)
+        new_code_list = sorted(_code_list, key=lambda e: (e[2], -e[0]))
+        logger_debug.debug(f"鎺ユ敹L1鏁版嵁娴嬭瘯锛氭帓搴忚繃鍚庣殑浠g爜-{new_code_list[:75]}")
         # -------------------------------澶勭悊L2鐩戝惉---------------------------------
         max_count = constant.HUAXIN_L2_MAX_CODES_COUNT
 
@@ -78,10 +126,10 @@
             if l2_trade_util.is_in_forbidden_trade_codes(
                     item[1]) or item[0] < 0:
                 # 鍦紙榛戝悕鍗曪級/锛堟定骞呭皬浜庯級鐨勬暟鎹�
-                if trade_manager.CodesTradeStateManager().get_trade_state_cache(
-                        item[1]) != trade_constant.TRADE_STATE_BUY_SUCCESS:
-                    # 娌℃垚浜ゆ墠浼氬姞鍏ュ垹闄�
-                    _delete_list.append(item)
+                # if trade_manager.CodesTradeStateManager().get_trade_state_cache(
+                #         item[1]) != trade_constant.TRADE_STATE_BUY_SUCCESS:
+                # 娌℃垚浜ゆ墠浼氬姞鍏ュ垹闄�
+                _delete_list.append(item)
 
         for item in _delete_list:
             new_code_list.remove(item)

--
Gitblit v1.8.0