From 1f69a007aa50b04a55195083970c110954935dfd Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期三, 18 六月 2025 10:32:03 +0800
Subject: [PATCH] ‘功能完善

---
 strategy/data_analyzer.py        |   40 ++++++++++++++++++++++++++++++++++------
 strategy/time_series_backtest.py |   15 ++++++++++-----
 api/outside_api_callback.py      |    1 +
 3 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/api/outside_api_callback.py b/api/outside_api_callback.py
index bbbb142..b4b640f 100644
--- a/api/outside_api_callback.py
+++ b/api/outside_api_callback.py
@@ -144,6 +144,7 @@
             strategy_manager.low_suction_strtegy.load_data()
             return {"code": 0}
         except Exception as e:
+            logging.exception(e)
             return {"code": 1, "msg": str(e)}
 
     def OnCommonRequest(self, client_id, request_id, data):
diff --git a/strategy/data_analyzer.py b/strategy/data_analyzer.py
index 882999f..7971c9d 100644
--- a/strategy/data_analyzer.py
+++ b/strategy/data_analyzer.py
@@ -281,7 +281,7 @@
         @return:
         """
         return abs(close - cls.calculate_upper_limit_price(code,
-                                                        pre_close)) < 0.01
+                                                           pre_close)) < 0.01
 
     @classmethod
     def get_third_limit_up_days(cls, k_data, days):
@@ -298,11 +298,18 @@
             if i + 3 >= len(k_data):
                 continue
             # 鍒ゆ柇杩炵画涓夋棩娑ㄥ仠涓旂鍥涙棩闈炴定鍋�
-            if cls.__is_limit_up(k_data[i]["sec_id"], k_data[i]['close'], k_data[i]["pre_close"]):
-                if cls.__is_limit_up(k_data[i+1]["sec_id"], k_data[i+1]['close'], k_data[i+1]["pre_close"]):
-                    if cls.__is_limit_up(k_data[i+2]["sec_id"], k_data[i+2]['close'], k_data[i+2]["pre_close"]):
-                        if not cls.__is_limit_up(k_data[i+3]["sec_id"], k_data[i+3]['close'], k_data[i+3]["pre_close"]):
-                            count += 1
+            day_count = 3
+            for n in range(day_count + 1):
+                if n < day_count:
+                    if not cls.__is_limit_up(k_data[i + n]["sec_id"], k_data[i + n]['close'],
+                                             k_data[i + n]["pre_close"]):
+                        # 闈炴定鍋�
+                        break
+                else:
+                    if not cls.__is_limit_up(k_data[i + n]["sec_id"], k_data[i + n]['close'],
+                                             k_data[i + n]["pre_close"]):
+                        count += 1
+                        break
         return count
 
     @classmethod
@@ -414,6 +421,27 @@
                 count += 1
         return count
 
+    @classmethod
+    def is_too_high_and_not_relase_volume(cls, code, k_data):
+        """
+        闀垮緱澶珮涓旀病鏀鹃噺锛�30涓氦鏄撴棩鍐咃紝鍑虹幇杩囨渶浣庝环锛堟渶楂樹环涔嬪墠鐨勪氦鏄撴棩锛夊埌鏈�楂樹环涔嬮棿鐨勬定骞呪墺35%鐨勭エ锛屼笖浠婃棩璺濈鏈�楂樹环閭f棩鏃犳定鍋�/鏃犵偢鏉�
+        @param k_data: K绾挎暟鎹垪琛�(杩�150涓氦鏄撴棩锛屼笉鍖呭惈褰撳墠浜ゆ槗鏃ワ紝鏃堕棿鍊掑簭)
+        @return: 鍥涜穼鍋滃強浠ヤ笂澶╂暟
+        """
+        k_data = k_data[:30]
+        # 鑾峰彇鏈�楂樹环淇℃伅
+        max_high_price_data = max(k_data, key=lambda x: x["high"])
+        min_close_price_data = min([d for d in k_data if d['bob'] < max_high_price_data['bob']], key=lambda x: x["close"])
+        if (max_high_price_data['high'] - min_close_price_data['close'])/min_close_price_data['close'] < 0.35:
+            # 娑ㄥ箙灏忎簬35%
+            return False
+        k_data = [d for d in k_data if d['bob'] > max_high_price_data['bob']]
+        # 鍒ゆ柇鏄惁娑ㄥ仠杩�
+        if len([d for d in k_data if cls.__is_limit_up(code, d["high"], d["pre_close"])]) >0:
+            # 鏈�楂樹环涔嬪悗鏈夎繃娑ㄥ仠
+            return False
+        return True
+
 
 class K60SLineAnalyzer:
     """
diff --git a/strategy/time_series_backtest.py b/strategy/time_series_backtest.py
index 4c90d2a..b8902e4 100644
--- a/strategy/time_series_backtest.py
+++ b/strategy/time_series_backtest.py
@@ -1,3 +1,5 @@
+import logging
+
 import constant
 from code_attribute import gpcode_manager, code_nature_analyse
 from strategy.data_analyzer import KPLLimitUpDataAnalyzer
@@ -715,11 +717,14 @@
                     if block_in_datas:
                         stock_variables.璧勯噾娴佸叆鏉垮潡 = block_in_datas
 
-                    stock_variables.褰撳墠浠� =  big_order[1][4]
-                    compute_result = self.__run_backtest(code, stock_variables)
-                    # print(compute_result)
-                    self.__process_test_result(code, stock_variables, next_trade_day, big_order[1][4],
-                                               huaxin_util.convert_time(big_order[1][3]), compute_result)
+                    stock_variables.褰撳墠浠� = big_order[1][4]
+                    try:
+                        compute_result = self.__run_backtest(code, stock_variables)
+                        # print(compute_result)
+                        self.__process_test_result(code, stock_variables, next_trade_day, big_order[1][4],
+                                                   huaxin_util.convert_time(big_order[1][3]), compute_result)
+                    except Exception as e:
+                        logging.exception(e)
 
         print("鍙拱棰樻潗锛�", all_new_plates)
 

--
Gitblit v1.8.0