From 0ed2c53acd278d57a39390fd4db78c5aaf088e0a Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期五, 21 四月 2023 18:03:54 +0800
Subject: [PATCH] 开盘啦数据解析

---
 code_nature_analyse.py |   76 +++++++++++++++++++++++++++----------
 1 files changed, 55 insertions(+), 21 deletions(-)

diff --git a/code_nature_analyse.py b/code_nature_analyse.py
index 01b405b..8c9b59c 100644
--- a/code_nature_analyse.py
+++ b/code_nature_analyse.py
@@ -85,37 +85,40 @@
 
 
 # 鑾峰彇鑲℃��
-# 杩斿洖锛堟槸鍚︽定鍋滐紝棣栨澘婧环鐜囨槸鍚﹀ぇ浜�0.6锛�
+# 杩斿洖锛堟槸鍚︽定鍋滐紝棣栨澘婧环鐜囷紝棣栨澘鐐告澘婧环鐜囷級
 def get_nature(record_datas):
-    limit_up = is_have_limit_up(record_datas)
+    limit_up_count = get_first_limit_up_count(record_datas)
     premium_rate = get_limit_up_premium_rate(record_datas)
-    result = (limit_up, premium_rate >= 0.6, premium_rate)
-
+    open_premium_rate = get_open_limit_up_premium_rate(record_datas)
+    result = (limit_up_count, premium_rate, open_premium_rate)
     return result
 
 
+# 鑾峰彇娑ㄥ箙
 def get_lowest_price_rate(record_datas):
     datas = copy.deepcopy(record_datas)
     datas.sort(key=lambda x: x["bob"])
-    datas = datas[-15:]
-    low_price = datas[0]["close"]
-    date = None
+    datas = datas[-10:]
     for data in datas:
-        if low_price > data["close"]:
-            low_price = data["close"]
+        limit_up_price = float(gpcode_manager.get_limit_up_price_by_preprice(data["pre_close"]))
+        if abs(limit_up_price - data["high"]) < 0.01:
             date = data['bob'].strftime("%Y-%m-%d")
-    return (datas[-1]["close"] - low_price) / low_price, date
+            return round((datas[-1]["close"] - data["close"]) / data["close"], 4), date
+    return 0, ''
 
 
 # 鏄惁鏈夋定鍋�
-def is_have_limit_up(datas):
+def get_first_limit_up_count(datas):
     datas = copy.deepcopy(datas)
+    count = 0
     for i in range(len(datas)):
         item = datas[i]
-        limit_up_price = float(gpcode_manager.get_limit_up_price_by_preprice(item["pre_close"]))
-        if abs(limit_up_price - item["close"]) < 0.01:
-            return True, item['bob'].strftime("%Y-%m-%d")
-    return False, ''
+        # 鑾峰彇棣栨澘娑ㄥ仠娆℃暟
+        if __is_limit_up(item) and i>0 and not __is_limit_up(datas[i-1]):
+            # 棣栨澘娑ㄥ仠
+            count+=1
+
+    return count
 
 
 # 鏄惁鐮村墠楂�
@@ -255,6 +258,12 @@
     return max_volume, average_volume
 
 
+# 鏄惁娑ㄥ仠
+def __is_limit_up(data):
+    limit_up_price = float(gpcode_manager.get_limit_up_price_by_preprice(data["pre_close"]))
+    return abs(limit_up_price - data["close"]) < 0.001
+
+
 # 棣栨澘娑ㄥ仠婧环鐜�
 def get_limit_up_premium_rate(datas):
     datas = copy.deepcopy(datas)
@@ -263,13 +272,38 @@
     for i in range(0, len(datas)):
         item = datas[i]
         limit_up_price = float(gpcode_manager.get_limit_up_price_by_preprice(item["pre_close"]))
-        if abs(limit_up_price - item["close"]) < 0.001 and abs(
-                limit_up_price - datas[i - 1]["close"]) >= 0.001 and 0 < i < len(datas) - 1:
-            # 棣栨澘娑ㄥ仠
-            rate = (datas[i + 1]["high"] - datas[i + 1]["pre_close"]) / datas[i + 1]["pre_close"]
-            first_rate_list.append(rate)
+        if abs(limit_up_price - item["close"]) < 0.001:
+            if 0 < i < len(datas) - 1 and not __is_limit_up(datas[i - 1]):
+                # 棣栨澘娑ㄥ仠
+                rate = (datas[i + 1]["high"] - datas[i + 1]["pre_close"]) / datas[i + 1]["pre_close"]
+                first_rate_list.append(rate)
     if not first_rate_list:
-        return 0
+        return None
+    count = 0
+    for rate in first_rate_list:
+        if rate >= 0.01:
+            count += 1
+    return count / len(first_rate_list)
+
+
+# 棣栨澘鐐告澘婧环鐜�
+def get_open_limit_up_premium_rate(datas):
+    datas = copy.deepcopy(datas)
+    datas.sort(key=lambda x: x["bob"])
+    first_rate_list = []
+    for i in range(0, len(datas)):
+        item = datas[i]
+        limit_up_price = float(gpcode_manager.get_limit_up_price_by_preprice(item["pre_close"]))
+
+        if abs(limit_up_price - item["high"]) < 0.001 and abs(limit_up_price - item["close"]) > 0.001:
+            #
+            limit_up_price = float(gpcode_manager.get_limit_up_price_by_preprice(datas[i - 1]["pre_close"]))
+            if 0 < i < len(datas) - 1 and not __is_limit_up(datas[i - 1]):
+                # 鍓嶄竴澶╂湭娑ㄥ仠
+                rate = (datas[i + 1]["high"] - item["high"]) / item["high"]
+                first_rate_list.append(rate)
+    if not first_rate_list:
+        return None
     count = 0
     for rate in first_rate_list:
         if rate >= 0.01:

--
Gitblit v1.8.0