From 045a5aa6434da6e83c3d850b17e7e58cd7b55ef5 Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期一, 15 五月 2023 15:46:32 +0800
Subject: [PATCH] 开盘啦板块影响交易逻辑

---
 output/code_info_output.py |  154 +++++++++++++++++----------------------------------
 1 files changed, 52 insertions(+), 102 deletions(-)

diff --git a/output/code_info_output.py b/output/code_info_output.py
index 2924830..8003c61 100644
--- a/output/code_info_output.py
+++ b/output/code_info_output.py
@@ -55,12 +55,17 @@
 
 
 def get_output_html(code):
-    def money_desc(money):
-        if money > 100000000:
-            return f"{round(money / 100000000, 2)}浜�"
-        else:
-            return f"{round(money / 10000, 2)}涓�"
+    return render(get_output_params(code))
 
+
+def money_desc(money):
+    if money > 100000000:
+        return f"{round(money / 100000000, 2)}浜�"
+    else:
+        return f"{round(money / 10000, 2)}涓�"
+
+
+def get_output_params(code):
     params = {
         "base_url": "http://192.168.3.252/kp/",
     }
@@ -111,7 +116,8 @@
         deal_indexes = trade.deal_big_money_manager.get_traded_indexes(code)
         deal_info = ""
         params["score_data"]["deal_big_money"] = {"score": score_list[8], "money": score_source_list[8][0] // 10000,
-                                                  "base_money": score_source_list[8][1] // 10000}
+                                                  "base_money": score_source_list[8][1] // 10000,
+                                                  "rate": round(score_source_list[8][0] / score_source_list[8][1], 2)}
         if deal_indexes:
             temps = []
             for index in deal_indexes:
@@ -135,28 +141,28 @@
         for k in range(0, len(score_source_list[3])):
             if k == 0:
                 if score_source_list[3][k][0]:
-                    k_source.append("娑ㄥ箙杩囬珮")
+                    k_source.append(("娑ㄥ箙杩囬珮", score_list[3][k]))
             elif k == 1:
                 if score_source_list[3][k][0]:
-                    k_source.append("绐佺牬鍓嶉珮")
+                    k_source.append(("绐佺牬鍓嶉珮", score_list[3][k]))
             elif k == 2:
                 if score_source_list[3][k][0]:
-                    k_source.append("瓒呰穼琛ユ定")
+                    k_source.append(("瓒呰穼琛ユ定", score_list[3][k]))
             elif k == 3:
                 if score_source_list[3][k][0]:
-                    k_source.append(f"閫艰繎鍓嶉珮-{score_source_list[3][k][1]}銆�")
+                    k_source.append((f"閫艰繎鍓嶉珮-{score_source_list[3][k][1]}銆�", score_list[3][k]))
             elif k == 4:
                 if score_source_list[3][k][0]:
-                    k_source.append("N瀛楀瀷")
+                    k_source.append(("N瀛楀瀷", score_list[3][k]))
             elif k == 5:
                 if score_source_list[3][k][0]:
-                    k_source.append("V瀛楀瀷")
+                    k_source.append(("V瀛楀瀷", score_list[3][k]))
             elif k == 6:
                 if not score_source_list[3][k][0]:
-                    k_source.append("涓嶆弧瓒充换浣曞舰鎬�")
+                    k_source.append(("涓嶆弧瓒充换浣曞舰鎬�", score_list[3][k]))
             elif k == 7:
                 if score_source_list[3][k][0]:
-                    k_source.append("澶╅噺澶ч槼")
+                    k_source.append(("澶╅噺澶ч槼", score_list[3][k]))
 
         params["score_data"]["k_form"] = {"score": k_score, "datas": k_source}
 
@@ -166,21 +172,27 @@
         for k in score_list[4]:
             nature_score += k
 
+        code_nature_datas = {"score": nature_score, "limit_up_count": score_source_list[4][0]}
+
         for n in range(0, len(score_source_list[4])):
             if n == 0:
                 nature_source.append(f"娑ㄥ仠娆℃暟銆恵score_source_list[4][n]}銆�")
             elif n == 1:
                 if score_source_list[4][n]:
                     nature_source.append(f"棣栨澘婧环鐜囥�恵round(score_source_list[4][n], 2)}銆�")
+                    code_nature_datas["first_limit_up_yijia"] = round(score_source_list[4][1], 2)
                 else:
                     nature_source.append(f"鏃犻鏉�")
+                    code_nature_datas["first_limit_up_yijia"] = "鏃犻鏉�"
             elif n == 2:
                 if score_source_list[4][n]:
                     nature_source.append(f"棣栨澘鐐告澘婧环鐜囥�恵round(score_source_list[4][n], 2)}銆�")
+                    code_nature_datas["first_open_limit_up_yijia"] = round(score_source_list[4][2], 2)
                 else:
                     nature_source.append(f"鏃犻鏉跨偢鏉�")
+                    code_nature_datas["first_open_limit_up_yijia"] = "鏃犻鏉跨偢鏉�"
 
-        params["score_data"]["code_nature"] = {"score": nature_score, "data_desc": ",".join(nature_source)}
+        params["score_data"]["code_nature"] = code_nature_datas
 
         # 鏉垮潡鐑害
         hot_block_score = 0
@@ -208,6 +220,7 @@
                                              "limit_up_index": hot_block_source_data['limit_up_index'] + 1,
                                              "block_name": hot_block_source_data['target_block_info'][0],
                                              "limit_up_count": hot_block_source_data['limit_up_codes_count'],
+                                             "block_history_count": hot_block_source_data['target_block_info'][2],
                                              "open_limit_up_count": hot_block_source_data['break_size']}
 
         # 涓婃澘鏃堕棿
@@ -262,7 +275,7 @@
             global_data_loader.load_zyltgb()
             zyltgb = global_util.zyltgb_map.get(code)
         base_m = L2TradeFactorUtil.get_base_safe_val(zyltgb)
-        params["trade_data"]["m_val"] = {"base": base_m // 10000, "now": m[0] // 10000},
+        params["trade_data"]["m_val"] = {"base": base_m // 10000, "now": m[0] // 10000}
         # 涔板墠澶у崟
         big_num = __L2PlaceOrderParamsManager.get_big_num_count()
         base_big_num = __base_L2PlaceOrderParamsManager.get_big_num_count()
@@ -315,14 +328,7 @@
             elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS:
                 params["trade_data"]["trade_state"]["desc"] = "宸叉垚浜�"
 
-    ##############################閫夎偂瀹�##################################
-
-    params["xgb_code_infos"] = []
-
-    ##############################鐑棬椋庡彛##################################
-
-    params["xgb_infos"] = []
-
+    ##############################涓诲姩涔帮紝琚姩涔�##################################
     # 杩斿洖涓诲姩涔�,琚姩涔�,涓嶄拱鐨勫垪琛�(浠g爜, 鍚嶇О, 寰楀垎, 鏄惁娑ㄥ仠)
     codes_score = __load_codes_scores()
     params["initiative_buy_codes"] = []
@@ -334,12 +340,23 @@
     for d in codes_score[1]:
         params["passive_buy_codes"].append(
             {"name": d[1], "code": d[0], "score": d[2], "limit_up": d[3], "open_limit_up": d[4]})
+    # 涓诲姩涔颁笌琚姩涔颁笉鑳借秴杩�11琛�
+    initiative_count = len(params["initiative_buy_codes"])
+    passive_count = len(params["passive_buy_codes"])
+    buy_row = 0
+    buy_row += initiative_count // 3
+    if initiative_count % 3 > 0:
+        buy_row += 1
+    max_passive_count = (10 - buy_row) * 3
+    if max_passive_count < 0:
+        max_passive_count = 0
+    params["passive_buy_codes"] = params["passive_buy_codes"][:max_passive_count]
 
     trade_info = __load_trade_record(code, total_datas)
     params["trade_record"] = {"open_limit_up": trade_info[0], "records": trade_info[2]}
 
     ##############################寮�鐩樺暒鐩稿叧淇℃伅##################################
-    params["kpl_code_info"] = {}
+    params["kpl_code_info"] = {"industry":global_util.code_industry_map.get(code)}
     # 鑾峰彇寮�鐩樺暒鏉垮潡
     plate_info = kpl_api.getStockIDPlate(code)
     if plate_info:
@@ -347,85 +364,18 @@
         plate_info.reverse()
         params["kpl_code_info"]["plate"] = plate_info
 
-    # 鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹�
-    params["kpl_code_info"]["code_records"] = KPLLimitUpDataRecordManager.get_latest_infos(code, 4)
+    # 鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹�,(娑ㄥ仠鍘熷洜,鏃ユ湡,鏉垮潡)
+    params["kpl_code_info"]["code_records"] = KPLLimitUpDataRecordManager.get_latest_infos(code, 4, False)[:2]
 
-    # 鑾峰彇浠婃棩鏉垮潡
-    block = block_info.get_target_block(code, False)
-    if block is None:
-        block = "鏃犳澘鍧�"
-    # 鑾峰彇鏈�杩戠殑4涓氦鏄撴棩
-    today = tool.get_now_date_str()
-    days = []
-    day = today
-    for i in range(3):
-        day = juejin.JueJinManager.get_previous_trading_date(day)
-        days.append(day)
-    days.insert(0, today)
-    # 鑾峰彇杩欏嚑澶╃殑娑ㄥ仠浠g爜
-    kpl_record_datas = {}
-    for d in days:
-        tem_datas = KPLLimitUpDataRecordManager.list_by_block(block, d)
-        tem_datas = list(tem_datas)
-        # 鏍规嵁娑ㄥ仠鏃堕棿鎺掑簭
-        tem_datas.sort(key=lambda x: int(x[5]))
+    if not KPLLimitUpDataRecordManager.total_datas:
+        KPLLimitUpDataRecordManager.load_total_datas()
+    for d in KPLLimitUpDataRecordManager.total_datas:
+        if d[3] == code:
+            # 鑾峰彇浠婃棩
+            params["kpl_code_info"]["today"] = (d[2], d[1], d[6])
+            break
 
-        kpl_record_datas[d] = {"codes": [], "hot_block": block, "index": -1, "limit_up_count": 0}
-        for i in range(len(tem_datas)):
-            temp = tem_datas[i]
-            __code = temp[3]
-            kpl_record_datas[d]["codes"].append(
-                {"name": temp[4], "code": __code, "limit_up": False, "open_limit_up": False,"ss":(__code.find("00")==0 or __code.find("60")==0) })
-            if __code == code:
-                kpl_record_datas[d]["blocks"] = temp[6].split("銆�")
-                kpl_record_datas[d]["index"] = i + 1
-                kpl_record_datas[d]["limit_up_time"] = time.strftime("%H:%M:%S", time.localtime(int(temp[5])))
-    # 鑾峰彇浠婃棩浠g爜鐨勫緱鍒�
-    __score_dict = {}
-    for fs in codes_score:
-        for s in fs:
-            # (寰楀垎,鏄惁娑ㄥ仠)
-            __score_dict[s[0]] = (s[2], s[3])
-    # 鑾峰彇鍒嗗��
-    for d in kpl_record_datas[today]["codes"]:
-        __code = d["code"]
-        if __code in __score_dict:
-            d["score"] = __score_dict[__code][0]
-    # 鑾峰彇鏄惁娑ㄥ仠,缁熻娑ㄥ仠鏁伴噺
-    for d in kpl_record_datas:
-        # 鑾峰彇娑ㄥ仠浠g爜淇℃伅
-        limit_up_datas = __kplDataManager.get_from_file(kpl_util.KPLDataType.LIMIT_UP, d)
-        if limit_up_datas is None:
-            limit_up_datas = []
-        limit_up_codes = set([x[0] for x in limit_up_datas])
-        limit_up_count = 0
-        for code_info in kpl_record_datas[d]["codes"]:
-            __code = code_info["code"]
-            if __code in limit_up_codes:
-                code_info["limit_up"] = True
-                code_info["open_limit_up"] = False
-                limit_up_count += 1
-            else:
-                code_info["limit_up"] = False
-                code_info["open_limit_up"] = True
-        kpl_record_datas[d]["limit_up_count"] = limit_up_count
-
-    block_records = [[key, kpl_record_datas[key]] for key in kpl_record_datas]
-    block_records.sort(key=lambda x: x[0])
-    block_records.reverse()
-    for i in range(len(block_records)):
-        if i == 0:
-            block_records[i][0] = "浠婂ぉ"
-        elif i == 1:
-            block_records[i][0] = "鏄ㄥぉ"
-        elif i == 2:
-            block_records[i][0] = "鍓嶅ぉ"
-        elif i == 3:
-            block_records[i][0] = "涔嬪墠"
-
-    params["kpl_code_info"]["block_records"] = block_records
-
-    return render(params)
+    return params
 
 
 def __load_codes_scores():

--
Gitblit v1.8.0