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