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

---
 output/code_info_output.py |  282 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 192 insertions(+), 90 deletions(-)

diff --git a/output/code_info_output.py b/output/code_info_output.py
index f688439..c22d906 100644
--- a/output/code_info_output.py
+++ b/output/code_info_output.py
@@ -6,7 +6,11 @@
 # 涓嬪崟鍙傛暟淇℃伅
 # 閫夎偂瀹�
 # 甯傚満鐑害
+import os
+import sys
+
 import code_volumn_manager
+import constant
 import global_data_loader
 import global_util
 import gpcode_manager
@@ -16,69 +20,82 @@
 import tool
 from l2 import l2_data_manager, l2_data_util, transaction_progress, l2_data_manager_new, code_price_manager
 from third_data import hot_block_data_process
-from trade import first_code_score_manager, l2_trade_factor
+from trade import first_code_score_manager, l2_trade_factor, trade_manager, l2_trade_util
 from trade.l2_trade_factor import L2TradeFactorUtil
 import trade.deal_big_money_manager
 
+base_output_content = {}
+
+
+def __get_base_html_content():
+    print("璺緞", sys.path[0])
+    if base_output_content.get('css') is None:
+        __base_html_content = ""
+        with open("./output/css/style.css", mode='r') as f:
+            lines = f.readlines()
+            for line in lines:
+                __base_html_content += line
+        base_output_content['css'] = __base_html_content
+
+    return f"<head><style>{base_output_content['css']}</style></head>"
+
 
 def __format_data(code_info, score_info, buy_params_info, xgb_code_info, xgb_infos, codes_score, trade_info):
-    html = ""
-    html += f"<h2>{code_info[1]} {code_info[0]}</h2><br>"
-
-
+    html = __get_base_html_content()
+    html += "<body>"
+    html += f"<h2>{code_info[1]} {code_info[0]}    ({code_info[2]})</h2><br>"
 
     if score_info:
         html += "<b>-----涔板墠璇勫垎-------</b><br>"
         score_types = ["鎹㈡墜閲忚兘", "绔炰环寮哄害", "璧勯噾鍔涘害", "鏃ョ嚎褰㈡��", "鍘嗗彶鑲℃��", "鏉垮潡鐑害", "涓婃澘鏃堕棿", "甯傚�煎ぇ灏�", "鑲′环澶у皬"]
-        html += "<table style='font-size:25px'>"
+        html += "<table>"
         for i in range(0, len(score_info[1])):
             html += f"<tr><td>{score_types[i]}</td><td>{score_info[1][i]}</td><td>{score_info[2][i]}</td></tr>"
         html += f"<tr><td><b>璇勫垎姹傚拰锛�</td><td>{score_info[0]}</b></td><td></td></tr>"
         html += f"</table><br>"
-
+    html += "\n"
     if buy_params_info:
         html += "<b><br>-----浜ゆ槗鍙傛暟-------<br></b><table>"
         titles = ["涔板叆鎰忔効", "瀹夊叏绗旀暟", "鍔ㄦ�丮鍊�", "涔板墠澶у崟", "鎴愪氦杩涘害", "涔板叆淇″彿", "涔板叆鎵ц浣�"]
         for i in range(0, len(titles)):
             html += f"<tr><td>{titles[i]}锛�</td><td>{buy_params_info[i]}</td></tr>"
         html += "</table><br>"
-
+    html += "\n"
     if xgb_code_info:
         html += "<b><br>-----閫夎偂瀹�---------<br></b>"
         xgb_code_info_dates = ["浠婂ぉ", "鏄ㄥぉ", "鍓嶅ぉ", "涔嬪墠"]
         for i in range(0, len(xgb_code_info)):
-            html += f"{xgb_code_info_dates[i]}锛�<br>"
             if xgb_code_info[i]:
+                html += f"{xgb_code_info_dates[i]}锛�<br>"
                 for info in xgb_code_info[i]:
                     if i == 0:
                         html += f"銆�<font color='red'>{info[0]}</font>銆戯紝鍏便��<font color='red'>{info[1]}</font>銆戝彧绁ㄦ定鍋�<br>绗��<font color='red'>{info[2]}</font>銆戞定鍋滐紝鐜颁环銆�<font color='red'>{info[3]}</font>銆戝厓锛屾定骞呫��<font color='red'>{info[4]}</font>銆�<br><br>"
                     else:
                         html += f"銆恵info[0]}銆戯紝鍏便�恵info[1]}銆戝彧绁ㄦ定鍋�<br>绗�恵info[2]}銆戞定鍋滐紝鐜颁环銆恵info[3]}銆戝厓锛屾定骞呫�恵info[4]}銆�<br><br>"
-            else:
-                html += f"鏃�<br>"
+    html += "\n"
     if codes_score[0]:
         html += "<b>-----涓诲姩涔板叆-------</b><br>"
         html += "<table>"
         for i in range(0, len(codes_score[0])):
-            if i % 4 == 0:
+            if i % 3 == 0:
                 html += "<tr>"
-            html += f"<td><font color='red'>{codes_score[0][i][1]}:{codes_score[0][i][2]}</font></td>"
-            if i % 4 == 3 or i == len(codes_score[0]) - 1:
+            html += f"<td><font color='red'>{'*' if codes_score[0][i][3] else ''}{codes_score[0][i][1]}({codes_score[0][i][0]}):{codes_score[0][i][2]}</font></td>"
+            if i % 3 == 2 or i == len(codes_score[0]) - 1:
                 html += "</tr>"
-        html += "</table><br>"
+        html += "</table><br>\n"
 
     if codes_score[1]:
         html += "<b>-----琚姩涔板叆-------</b><br>"
         html += "<table>"
         for i in range(0, len(codes_score[1])):
-            if i % 4 == 0:
+            if i % 3 == 0:
                 html += "<tr>"
-            html += f"<td><font color='#000080'>{codes_score[1][i][1]}:{codes_score[1][i][2]}</font></td>"
-            if i % 4 == 3 or i == len(codes_score[1]) - 1:
+            html += f"<td><font color='#000080'>{'*' if codes_score[1][i][3] else ''}{codes_score[1][i][1]}({codes_score[1][i][0]}):{codes_score[1][i][2]}</font></td>"
+            if i % 3 == 2 or i == len(codes_score[1]) - 1:
                 html += "</tr>"
-        html += "</table><br>"
+        html += "</table><br>\n"
 
-    if codes_score[2]:
+    if codes_score[2] and False:
         html += "<b>-----涓嶄拱鍏�-------</b><br>"
         html += "<table>"
         for i in range(0, len(codes_score[2])):
@@ -87,12 +104,12 @@
             html += f"<td>{codes_score[2][i][1]}:{codes_score[2][i][2]}</td>"
             if i % 4 == 3 or i == len(codes_score[1]) - 1:
                 html += "</tr>"
-        html += "</table><br>"
+        html += "</table><br>\n"
 
     if trade_info:
         html += "<b>-----浠婃棩鎸傛挙璁板綍-------</b><br>"
         html += "<br>浠婃棩鏄惁鐐告澘锛�"
-        if trade_info[0]:
+        if trade_info[0] is not None:
             html += f"鐐告澘-{trade_info[0]}"
         else:
             html += f"鏈偢鏉�"
@@ -101,28 +118,42 @@
             for i in range(0, len(trade_info[1])):
                 if i % 2 == 0:
                     html += "<tr>"
-                html += f"<td>绗瑊i + 1}娆′笅鍗� 璇勫垎{trade_info[1][i][1][0][0]} {trade_info[1][i][0]} </td>"
+                html += f"<td>{trade_info[1][i]}</td>"
                 if i % 2 == 1 or i == len(codes_score[0]) - 1:
                     html += "</tr>"
             html += "</table><br>"
-        html += "<br>"
+        html += "<br>\n"
 
     if xgb_infos:
         html += "<b><br>-----甯傚満鐑害-------<br></b><table>"
         for info in xgb_infos:
-            html += f"<tr><td><font size='3'>{info[0]}</font><br><div style='margin-left:100px;'>{info[1]}</div></td></tr>"
-        html += "</tr>"
+            html += f"<tr><td>{info[0]}<br><div style=''>{info[1]}</div></td></tr>"
+        html += "</table>"
     html += "<br><br>"
+    html += "</body>"
     return html
 
 
 def get_output_html(code):
     day = tool.get_now_date_str()
     is_target_code = gpcode_manager.FirstCodeManager.is_in_first_record(code)
-    code_info = [code, gpcode_manager.get_code_name(code)]
+    code_extra_infos=[]
+    if l2_trade_util.BlackListCodeManager.is_in(code):
+        code_extra_infos.append("榛戝悕鍗�")
+    if l2_trade_util.WhiteListCodeManager.is_in(code):
+        code_extra_infos.append("鐧藉悕鍗�")
+    # 鑾峰彇鐧藉悕鍗�,榛戝悕鍗�
+    if trade_manager. gpcode_manager.WantBuyCodesManager.is_in(code):
+        code_extra_infos.append("鎯充拱鍗�")
+
+    code_info = [code, gpcode_manager.get_code_name(code),",".join(code_extra_infos)]
     score_info = None
     buy_params_info = None
     xgb_infos = None
+    total_datas = l2_data_util.local_today_datas.get(code)
+    if total_datas is None:
+        l2_data_util.load_l2_data(code)
+        total_datas = l2_data_util.local_today_datas.get(code)
     if is_target_code:
         limit_up_price = gpcode_manager.get_limit_up_price(code)
         limit_up_time = limit_up_time_manager.get_limit_up_time(code)
@@ -143,10 +174,7 @@
         # 绔炰环寮哄害
         score_list_new.append(score_list[2])
         score_source_list_new.append(f"寮�鐩樺暒浠婃棩濮斿仠銆恵score_source_list[2] if score_source_list[2] else 0}涓囥��")
-        total_datas = l2_data_util.local_today_datas.get(code)
-        if total_datas is None:
-            l2_data_util.load_l2_data(code)
-            total_datas = l2_data_util.local_today_datas.get(code)
+
         # 璧勯噾鍔涘害
         deal_indexes = trade.deal_big_money_manager.get_traded_indexes(code)
         deal_info = ""
@@ -205,12 +233,17 @@
 
         for n in range(0, len(score_source_list[4])):
             if n == 0:
-                if not score_source_list[4][n]:
-                    nature_source.append("鏃犳定鍋�")
+                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)}銆�")
                 else:
-                    nature_source.append("鏈夋定鍋�")
-            if n == 1:
-                nature_source.append(f"棣栨澘婧环鐜囥�恵round(score_source_list[4][2],2)}銆�")
+                    nature_source.append(f"鏃犻鏉�")
+            elif n == 2:
+                if score_source_list[4][n]:
+                    nature_source.append(f"棣栨澘鐐告澘婧环鐜囥�恵round(score_source_list[4][n], 2)}銆�")
+                else:
+                    nature_source.append(f"鏃犻鏉跨偢鏉�")
 
         score_list_new.append(nature_score)
         score_source_list_new.append(",".join(nature_source))
@@ -220,14 +253,37 @@
         hot_block_source = []
         for k in score_list[5]:
             hot_block_score += k
-        for n in range(0, len(score_source_list[5])):
-            if n == 1:
-                hot_block_source.append(f"銆恵score_source_list[5][0]}銆戝叡{score_source_list[5][n]}涓定鍋�")
-            elif n == 2:
-                hot_block_source.append(f"鍏眥score_source_list[5][n]}涓偢鏉�")
-            elif n == 4:
-                if score_source_list[5][n]:
-                    hot_block_source.append(f"銆恵score_source_list[5][n][0][0]}銆憑score_source_list[5][n][1]}")
+        hot_block_source_data = score_source_list[5]
+        for k in hot_block_source_data:
+            hot_block = {
+                # 鐩爣鏉垮潡淇℃伅锛堟澘鍧楀悕绉�,鏉垮潡娑ㄥ箙,鍘嗗彶鏉垮潡鍑虹幇娆℃暟锛�
+                "target_block_info": ("鏃犳澘鍧�", 0, 0),
+                # 娑ㄥ仠椤哄簭
+                "limit_up_index": 0,
+                # 娑ㄥ仠浠g爜鏁伴噺
+                "limit_up_codes_count": 0,
+                # 鏉垮潡浠g爜娑ㄥ箙淇℃伅
+                "block_codes_rates_info": (0, 0),
+                # 鐐告澘浠g爜鏁伴噺
+                "break_size": 0,
+                # 鐐告澘鍥炲皝鏁伴噺
+                "re_limit_up_size": 0,
+                # 楂樹綅鐗堜俊鎭�
+                "high_block_infos": [],
+            }
+            if k == "block_codes_rates_info":
+                hot_block_source.append(f"骞冲潎娑ㄥ箙:銆恵round(hot_block_source_data[k][0]/hot_block_source_data[k][1],2)}%銆�")
+            elif k == "limit_up_codes_count":
+                hot_block_source.append(f"鏉垮潡娑ㄥ仠鏁伴噺:銆恵hot_block_source_data[k]}銆�")
+            elif k == "target_block_info":
+                hot_block_source.append(f"鏉垮潡娑ㄥ箙:銆恵hot_block_source_data[k][1]}%銆�")
+            elif k == "limit_up_index":
+                hot_block_source.append(f"绗�恵hot_block_source_data[k]+1}銆戝彧娑ㄥ仠")
+            elif k == "high_block_infos":
+                for info in hot_block_source_data[k]:
+                    hot_block_source.append(f"{info[0][1]}{info[1]}")
+            if k == "target_block_info":
+                hot_block_source.append(f"銆恵hot_block_source_data[k][0]}銆戞蹇靛嚭鐜般�恵hot_block_source_data[k][2]}銆戞")
         score_list_new.append(hot_block_score)
         score_source_list_new.append(",".join(hot_block_source))
 
@@ -262,7 +318,16 @@
                                                                                       score_source_list))
         buy_params_info = []
         if -1 < __L2PlaceOrderParamsManager.score_index < 3:
-            buy_params_info.append("<font color='red'>銆愪富鍔ㄤ拱鍏ャ��</font>")
+            temp = "<font color='red'>銆愪富鍔ㄤ拱鍏ャ��"
+            if __L2PlaceOrderParamsManager.score_index == 0:
+                temp += "***"
+            elif __L2PlaceOrderParamsManager.score_index == 1:
+                temp += "**"
+            else:
+                temp += "*"
+            temp += "</font>"
+            buy_params_info.append(temp)
+
         elif __L2PlaceOrderParamsManager.score_index < 0:
             buy_params_info.append("銆愪笉鎵ц涔板叆銆�")
         else:
@@ -365,8 +430,8 @@
             # 鑾峰彇鏉垮潡涓殑浠g爜
             block_codes_set = set()
             for d in block[2]:
-                code = d[0][1].split(".")[0]
-                block_codes_set.add(code)
+                _code = d[0][1].split(".")[0]
+                block_codes_set.add(_code)
 
             if codes:
                 codes_data_html = "<table><tr>"
@@ -376,7 +441,7 @@
                         # 涓嶆槸璇ユ澘鍧楁暟鎹�
                         continue
                     count += 1
-                    codes_data_html += "<td>"
+                    codes_data_html += "<td style = 'text-decoration锛歶nderline;'>"
                     # 濡傛灉浠g爜娑ㄥ仠鏃堕棿鎴栬�呮病鏈夊湪鏈�鏂扮殑浠g爜涓�
                     if (len(code_data[2]) < 6 or code_data[0] not in block_codes_set) and len(code_data[3]) > 6:
                         # 鐐告澘
@@ -390,38 +455,57 @@
                     if count % 4 == 0:
                         codes_data_html += "</tr><tr>"
                 codes_data_html += "</tr></table>"
-                xgb_infos.append((f"***銆恵block[0]}銆戯紝娑ㄥ箙銆恵block[1]}銆戯紝鍏便�恵limit_up_count}銆戜釜娑ㄥ仠", codes_data_html))
+                _info = (f"***銆恵block[0]}銆戯紝娑ㄥ箙銆恵block[1]}銆戯紝鍏便�恵limit_up_count}銆戜釜娑ㄥ仠", codes_data_html)
+                is_target_block = False
+                if xgb_code_info:
+                    for _code_info in xgb_code_info[0]:
+                        if len(_code_info) > 0 and _code_info[0] == block[0]:
+                            is_target_block = True
+                            break
+                if is_target_block:
+                    xgb_infos.insert(0, _info)
+                else:
+                    xgb_infos.append(_info)
+
     codes_score = __load_codes_scores()
-    trade_info = __load_trade_record(code)
+    trade_info = __load_trade_record(code, total_datas)
     return __format_data(code_info, score_info, buy_params_info, xgb_code_info, xgb_infos, codes_score, trade_info)
 
 
 def __load_codes_scores():
     # 鑾峰彇鎵�鏈夌洃鍚腑鐨勪唬鐮�
     codes = gpcode_manager.get_first_gp_codes()
-    scores = l2_data_manager_new.L2TradeDataProcessor.get_code_scores()
+    scores = {}  # l2_data_manager_new.L2TradeDataProcessor.get_code_scores()
     for code in codes:
         if code not in scores:
             # 鑾峰彇鍒嗘暟
-            limit_up_time = limit_up_time_manager.get_limit_up_time(code)
-            if limit_up_time is None:
-                continue
-            volume_rate, volume_info = code_volumn_manager.get_volume_rate(code, True)
-            (score, score_list), score_source_list = first_code_score_manager.get_score(code, volume_rate,
-                                                                                        limit_up_time,
-                                                                                        True)
-            scores[code] = score
+            try:
+                limit_up_time = limit_up_time_manager.get_limit_up_time(code)
+                volume_rate, volume_info = code_volumn_manager.get_volume_rate(code, True)
+                (score, score_list), score_source_list = first_code_score_manager.get_score(code, volume_rate,
+                                                                                            limit_up_time,
+                                                                                            True)
+                scores[code] = score
+            except:
+                pass
     # 绛涢��180鍒嗕互涓婄殑浠g爜
     scores_list = []
     for code in scores:
         code_name = gpcode_manager.get_code_name(code)
-        scores_list.append((code, code_name, scores[code]))
+        # 鑾峰彇鐜颁环锛屽垽鏂槸鍚︽定鍋�
+        current_price_info = global_util.cuurent_prices.get(code)
+        is_limit_up = True
+        if current_price_info is not None and not current_price_info[1]:
+            is_limit_up = False
+        else:
+            is_limit_up = True
+        scores_list.append((code, code_name, scores[code], is_limit_up))
     scores_list.sort(key=lambda x: x[2], reverse=True)
     fscores_list = [[], [], []]
     for score in scores_list:
-        if score[2] >= 180:
+        if score[2] >= constant.BUY_SCORE_RANK_1:
             fscores_list[0].append(score)
-        elif score[2] >= 100:
+        elif score[2] >= constant.BUY_SCORE_RANK_0:
             fscores_list[1].append(score)
         else:
             fscores_list[2].append(score)
@@ -429,37 +513,55 @@
     return fscores_list
 
 
-def __load_trade_record(code):
+def __load_trade_record(code, total_datas):
+    def format_l2_data(item):
+        return f"{item['val']['time']}#{item['val']['num']}鎵�#{round(item['val']['num'] * float(item['val']['price']) * 100 / 10000, 1)}涓�"
+
     # 鑾峰彇鐐告澘淇℃伅
     limit_up_info = code_price_manager.Buy1PriceManager.get_limit_up_info(code)
     break_time = limit_up_info[1]
-    records = log.load_buy_score_recod(code)
-    return break_time, records
+    records =[]
+    try:
+        records = log.load_buy_score_recod(code)
+    except:
+        pass
+    records_new = []
+    index = 0
+    if records:
+        try:
+            for record in records:
+                time_ = record[0]
+                type = record[1]
+                data = record[2]
+                if type == '涓嬪崟':
+                    index += 1
+                    temp = f"绗瑊index}娆′笅鍗曪細銆恵time_}銆�&銆恵data['score']}鍒嗐��,{data.get('desc')}"
+                    records_new.append(temp)
+                elif type == 'S鎾�':
+                    # index':378 , 'rate':0.51 , 'target_rate':0.49
+                    pass
+                elif type == 'S鎾よ寖鍥�':
+                    start = format_l2_data(total_datas[data['start_index']])
+                    end = format_l2_data(total_datas[data['end_index']])
+                    range_seconds = data['range_seconds']
+                    temp = f"绗瑊index}娆℃挙鍗曪細S鎾ゅ泭鎷寖鍥达細銆愯捣濮嬩綅:{start}銆戣嚦銆愭埅姝綅:{end}銆戝泭鎷椂闂淬�恵range_seconds}銆戠"
+                elif type == 'H鎾よ寖鍥�':
+                    start = format_l2_data(total_datas[data['start_index']])
+                    end = format_l2_data(total_datas[data['end_index']])
+                    count = data['count']
+                    temp = f"H鎾ゅ泭鎷寖鍥达細銆愯捣濮嬩綅:{start}銆戣嚦銆愭埅姝綅:{end}銆戠墿鐞嗙瑪鏁板叡銆恵count}銆戠瑪"
+                elif type == 'H鎾�':
+                    # 'start_index':339,'end_index':464, 'count':17
+                    pass
+                elif type == '鎾ゅ崟':
+                    temp = f"绗瑊index}娆℃挙鍗曪細銆恵time_}銆憑data['msg']}"
+                    records_new.append(temp)
+        except:
+            pass
+
+    return break_time, records_new
 
 
 if __name__ == '__main__':
-    code = "002410"
-    day = '2023-03-27'
-    xgb_datas = hot_block_data_process.XGBHotBlockDataManager.list_by_code(code, day)
-    datas = []
-    if xgb_datas:
-        for data in xgb_datas:
-            block = data[2]
-            block_datas = hot_block_data_process.XGBHotBlockDataManager.list_by_block(block, day)
-            block_datas = list(block_datas)
-            limit_up_count = 0
-            limit_up_time = None
-            for d in block_datas:
-                if len(d[4]) > 6:
-                    limit_up_count += 1
-                    if d[3] == code:
-                        limit_up_time = d[4]
-
-            # 鏍规嵁娑ㄥ仠鏃堕棿鎺掑簭
-            block_datas.sort(key=lambda d: (d[4] if len(d[4]) > 6 else '15:00:00'))
-
-            for i in range(len(block_datas)):
-                if block_datas[i][3] == code:
-                    datas.append((block, limit_up_count, (i + 1) if limit_up_time is not None else (limit_up_count + 1),
-                                  block_datas[i][5], block_datas[i][6]))
-                    break
+    st="8澶�3鏉�"
+    print(st[-2:-1])

--
Gitblit v1.8.0