Administrator
2023-04-26 d1bf04791ad095b17660a1f383b7a12f0a59b1d1
output/code_info_output.py
@@ -19,12 +19,15 @@
import log
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 third_data import kpl_data_manager, kpl_util
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
from jinja2 import Environment, FileSystemLoader
base_output_content = {}
__kplDataManager = kpl_data_manager.KPLDataManager()
def __get_base_html_content():
@@ -40,101 +43,26 @@
    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 = __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>"
        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 = ["买入意愿", "安全笔数", "动态M值", "买前大单", "成交进度", "买入信号", "买入执行位"]
        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)):
            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>"
    html += "\n"
    if codes_score[0]:
        html += "<b>-----主动买入-------</b><br>"
        html += "<table>"
        for i in range(0, len(codes_score[0])):
            if i % 3 == 0:
                html += "<tr>"
            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>\n"
    if codes_score[1]:
        html += "<b>-----被动买入-------</b><br>"
        html += "<table>"
        for i in range(0, len(codes_score[1])):
            if i % 3 == 0:
                html += "<tr>"
            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>\n"
    if codes_score[2] and False:
        html += "<b>-----不买入-------</b><br>"
        html += "<table>"
        for i in range(0, len(codes_score[2])):
            if i % 4 == 0:
                html += "<tr>"
            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>\n"
    if trade_info:
        html += "<b>-----今日挂撤记录-------</b><br>"
        html += "<br>今日是否炸板:"
        if trade_info[0] is not None:
            html += f"炸板-{trade_info[0]}"
        else:
            html += f"未炸板"
        if trade_info[1]:
            html += "<table>"
            for i in range(0, len(trade_info[1])):
                if i % 2 == 0:
                    html += "<tr>"
                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>\n"
    if xgb_infos:
        html += "<b><br>-----市场热度-------<br></b><table>"
        for info in xgb_infos:
            html += f"<tr><td>{info[0]}<br><div style=''>{info[1]}</div></td></tr>"
        html += "</table>"
    html += "<br><br>"
    html += "</body>"
    return html
def render(params):
    env = Environment(loader=FileSystemLoader('D:/workspace/trade/output'))
    css = env.get_template('css/index.css')
    params["css"] = css.render()
    template = env.get_template('index.html')
    html_content = template.render(params)
    return html_content
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)}万"
    params = {
        "base_url": "http://192.168.3.252/kp/",
    }
    day = tool.get_now_date_str()
    is_target_code = gpcode_manager.FirstCodeManager.is_in_first_record(code)
    code_extra_infos=[]
@@ -145,8 +73,8 @@
    # 获取白名单,黑名单
    if trade_manager. gpcode_manager.WantBuyCodesManager.is_in(code):
        code_extra_infos.append("想买单")
    params["code_name"] = f"{gpcode_manager.get_code_name(code)} {code}  ({','.join(code_extra_infos)})"
    code_info = [code, gpcode_manager.get_code_name(code),",".join(code_extra_infos)]
    score_info = None
    buy_params_info = None
    xgb_infos = None
@@ -155,6 +83,7 @@
        l2_data_util.load_l2_data(code)
        total_datas = l2_data_util.local_today_datas.get(code)
    if is_target_code:
        params["score_data"] = {}
        limit_up_price = gpcode_manager.get_limit_up_price(code)
        limit_up_time = limit_up_time_manager.get_limit_up_time(code)
        volume_rate, volume_info = code_volumn_manager.get_volume_rate(code, True)
@@ -162,22 +91,24 @@
                                                                                    True)
        ################################买前评分################################
        # ["换手量能", "竞价强度", "资金力度", "K线形态", "历史股性", "板块热度", "上板时间", "市值大小","股价大小"]
        score_list_new = []
        score_source_list_new = []
        # 换手量能
        score_list_new.append(score_list[6])
        # 获取当前量信息
        max_60, yest = code_volumn_manager.get_histry_volumn(code)
        today = code_volumn_manager.get_today_volumn(code)
        score_source_list_new.append(
            f"实时量【{round(int(today) / 1000000, 2)}万手】÷前高量【{round(max_60[0] / 1000000, 2)}万手-{max_60[1]}】=【{round(score_source_list[6] * 100, 2)}%】")
        params["score_data"]["volume"] = {"score": score_list[6], "now": f"{round(int(today) / 1000000, 2)}",
                                          "high": {"num": round(max_60[0] / 1000000, 2), "date": max_60[1]},
                                          "rate": round(score_source_list[6] * 100, 2)}
        # 竞价强度
        score_list_new.append(score_list[2])
        score_source_list_new.append(f"开盘啦今日委停【{score_source_list[2] if score_source_list[2] else 0}万】")
        params["score_data"]["bidding"] = {"score": score_list[2],
                                           "money": (score_source_list[2] if score_source_list[2] else 0)}
        # 资金力度
        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}
        if deal_indexes:
            temps = []
            for index in deal_indexes:
@@ -186,10 +117,11 @@
            start_index = temps[0]
            end_index = temps[-1]
            deal_info = f"【{total_datas[start_index]['val']['time']}&{total_datas[start_index]['val']['num']}手-{total_datas[end_index]['val']['time']}&{total_datas[end_index]['val']['num']}手】,"
            params["score_data"]["deal_big_money"]["start"] = {"time": total_datas[start_index]['val']['time'],
                                                               "num": total_datas[start_index]['val']['num']}
            params["score_data"]["deal_big_money"]["end"] = {"time": total_datas[end_index]['val']['time'],
                                                             "num": total_datas[end_index]['val']['num']}
        score_list_new.append(score_list[8])
        score_source_list_new.append(
            f"{deal_info}<br>累计金额【{score_source_list[8][0] // 10000}万】&固定m值【{score_source_list[8][1] // 10000}万】")
        # K线形态
        k_score = 0
        k_source = []
@@ -200,31 +132,31 @@
        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("涨幅过高")
            elif k == 1:
                if score_source_list[3][k][0]:
                    k_source.append("【突破前高】")
                    k_source.append("突破前高")
            elif k == 2:
                if score_source_list[3][k][0]:
                    k_source.append("【超跌补涨】")
                    k_source.append("超跌补涨")
            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]}】")
            elif k == 4:
                if score_source_list[3][k][0]:
                    k_source.append("【N字型】")
                    k_source.append("N字型")
            elif k == 5:
                if score_source_list[3][k][0]:
                    k_source.append("【V字型】")
                    k_source.append("V字型")
            elif k == 6:
                if not score_source_list[3][k][0]:
                    k_source.append("【不满足任何形态】")
                    k_source.append("不满足任何形态")
            elif k == 7:
                if score_source_list[3][k][0]:
                    k_source.append("【天量大阳】")
                    k_source.append("天量大阳")
        score_list_new.append(k_score)
        score_source_list_new.append("/".join(k_source))
        params["score_data"]["k_form"] = {"score": k_score, "datas": k_source}
        # 历史股性
        nature_score = 0
        nature_source = []
@@ -245,12 +177,10 @@
                else:
                    nature_source.append(f"无首板炸板")
        score_list_new.append(nature_score)
        score_source_list_new.append(",".join(nature_source))
        params["score_data"]["code_nature"] = {"score": nature_score, "data_desc": ",".join(nature_source)}
        # 板块热度
        hot_block_score = 0
        hot_block_source = []
        for k in score_list[5]:
            hot_block_score += k
        hot_block_source_data = score_source_list[5]
@@ -271,38 +201,26 @@
                # 高位版信息
                "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))
        params["score_data"]["hot_block"] = {"score": hot_block_score,"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'],
                                             "open_limit_up_count": hot_block_source_data['break_size']}
        # 上板时间
        score_list_new.append(score_list[7])
        score_source_list_new.append(f"上板时间【{score_source_list[7]}】")
        params["score_data"]["limit_up_time"] = {"score": score_list[7], "time": score_source_list[7]}
        # 市值大小
        score_list_new.append(score_list[0])
        score_source_list_new.append(f"自由市值【{round(score_source_list[0] / 100000000, 2)}亿】")
        params["score_data"]["zyltgb"] = {"score": score_list[0], "value": round(score_source_list[0] / 100000000, 2)}
        # 股价大小
        score_list_new.append(score_list[1])
        score_source_list_new.append(f"现价【{score_source_list[1]}】元")
        params["score_data"]["limit_up_price"] = {"score": score_list[1], "price": score_source_list[1]}
        score_info = (score, score_list_new, score_source_list_new)
        params["score_data"]["total_score"] = score
        # zyltgb, limit_price, bidding, k_form, code_nature, hot_block, volume_rate, limit_up_time,
        # deal_big_money
        ###############################下单信息###############################
        params["score_data"]["trade_data"] = {}
        # 获取买入意愿
        volume_rate = score_source_list[6]
        __L2PlaceOrderParamsManager = l2_trade_factor.L2PlaceOrderParamsManager(code, True, volume_rate,
@@ -316,26 +234,23 @@
                                                                                         volume_rate),
                                                                                     ((score, score_list),
                                                                                      score_source_list))
        buy_params_info = []
        if -1 < __L2PlaceOrderParamsManager.score_index < 3:
            temp = "<font color='red'>【主动买入】"
            params["score_data"]["trade_data"]["start"] = {"desc": "主动买入"}
            if __L2PlaceOrderParamsManager.score_index == 0:
                temp += "***"
                params["score_data"]["trade_data"]["start"]["count"] = 3
            elif __L2PlaceOrderParamsManager.score_index == 1:
                temp += "**"
                params["score_data"]["trade_data"]["start"]["count"] = 2
            else:
                temp += "*"
            temp += "</font>"
            buy_params_info.append(temp)
                params["score_data"]["trade_data"]["start"]["count"] = 1
        elif __L2PlaceOrderParamsManager.score_index < 0:
            buy_params_info.append("【不执行买入】")
            params["score_data"]["trade_data"]["start"] = {"desc": "不执行买入", "count": 0}
        else:
            buy_params_info.append("【被动买入】")
            params["score_data"]["trade_data"]["start"] = {"desc": "被动买入", "count": 0}
        # 安全笔数
        safe_count = __L2PlaceOrderParamsManager.get_safe_count()
        base_safe_count, min_count, max_count = L2TradeFactorUtil.get_safe_buy_count(code, True)
        buy_params_info.append(f"固定安全笔数【{base_safe_count}】笔,衰减后安全笔数【{safe_count}】笔")
        params["score_data"]["trade_data"]["safe_count"] = {"base": base_safe_count, "now": safe_count}
        # 动态M值
        m = __L2PlaceOrderParamsManager.get_m_val()
        zyltgb = global_util.zyltgb_map.get(code)
@@ -343,133 +258,103 @@
            global_data_loader.load_zyltgb()
            zyltgb = global_util.zyltgb_map.get(code)
        base_m = L2TradeFactorUtil.get_base_safe_val(zyltgb)
        buy_params_info.append(f"固定M值【{base_m / 10000}万】,动态M值【{m[0] / 10000}万】   ")
        params["score_data"]["trade_data"]["m"] = {"base": base_m // 10000, "now": m[0] // 10000},
        # 买前大单
        big_num = __L2PlaceOrderParamsManager.get_big_num_count()
        base_big_num = __base_L2PlaceOrderParamsManager.get_big_num_count()
        buy_params_info.append(f"固定买前大单【{base_big_num}】笔,衰减后买前大单【{big_num}】笔")
        params["score_data"]["trade_data"]["big_num"] = {"base": base_big_num, "now": big_num}
        # 成交进度
        trade_progress, is_default = transaction_progress.TradeBuyQueue().get_traded_index(code)
        if trade_progress is None or trade_progress < 0 or is_default:
            buy_params_info.append("未识别")
            # buy_params_info.append("未识别")
            pass
        else:
            data = total_datas[trade_progress]
            buy_params_info.append(
                f"【{data['val']['time']}】、【{data['val']['num']}手】、【{round(data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}万】")
            params["score_data"]["trade_data"]["trade_progress"] = {"time": data['val']['time'],
                                                                    "num": data['val']['num'], "money": round(
                    data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}
        # 买入信号
        buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate = l2_data_manager.TradePointManager.get_buy_compute_start_data(
            code)
        if buy_single_index is None:
            buy_params_info.append("无信号")
            # buy_params_info.append("无信号")
            pass
        else:
            data = total_datas[buy_single_index]
            buy_params_info.append(
                f"【{data['val']['time']}】、【{data['val']['num']}手】、【{round(data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}万】")
            params["score_data"]["trade_data"]["buy_single"] = {"time": data['val']['time'], "num": data['val']['num'],
                                                                "money": round(data['val']['num'] * float(
                                                                    data['val']['price']) * 100 / 10000, 1)}
        if buy_exec_index is None or buy_exec_index < 0:
            buy_params_info.append("未下单")
            # buy_params_info.append("未下单")
            pass
        else:
            data = total_datas[buy_exec_index]
            buy_params_info.append(
                f"【{data['val']['time']}】、【{data['val']['num']}手】、【{round(data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)}万】")
            params["score_data"]["trade_data"]["buy_exec"] = {"time": data['val']['time'], "num": data['val']['num'],
                                                              "money": round(data['val']['num'] * float(
                                                                  data['val']['price']) * 100 / 10000, 1)}
    ##############################选股宝##################################
    xgb_code_info = []
    for i in range(0, 4):
        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
        xgb_code_info.append(datas)
        day = juejin.JueJinManager.get_previous_trading_date(day)
    params["xgb_code_infos"] = []
    ##############################热门风口##################################
    xgb_infos = []
    xgb_latest_datas = hot_block_data_process.XGBHotBlockDataManager.latest_datas
    if not xgb_latest_datas:
        xgb_infos.append('暂未获取到数据')
    else:
        # 获取今日的所有数据
        datas_record = hot_block_data_process.XGBHotBlockDataManager.list_all(tool.get_now_date_str())
        datas_record_dict = {}
        for data in datas_record:
            block = data[2]
            if block not in datas_record_dict:
                datas_record_dict[block] = []
            # 代码,代码名称,涨停时间,首次涨停时间
            datas_record_dict[block].append((data[3], data[9], data[4], data[8], block))
        for block in xgb_latest_datas:
            limit_up_count = 0
            codes = datas_record_dict.get(block[0])
            for code_data in block[2]:
                if len(code_data[4]) > 6:
                    limit_up_count += 1
            # 获取板块中的代码
            block_codes_set = set()
            for d in block[2]:
                _code = d[0][1].split(".")[0]
                block_codes_set.add(_code)
    params["xgb_infos"] = []
            if codes:
                codes_data_html = "<table><tr>"
                count = 0
                for code_data in codes:
                    if code_data[4] != block[0]:
                        # 不是该板块数据
                        continue
                    count += 1
                    codes_data_html += "<td style = 'text-decoration:underline;'>"
                    # 如果代码涨停时间或者没有在最新的代码中
                    if (len(code_data[2]) < 6 or code_data[0] not in block_codes_set) and len(code_data[3]) > 6:
                        # 炸板
                        codes_data_html += f"<font color='#000080'>{code_data[1]}:{code_data[0]}&nbsp;&nbsp;</font>"
                    elif len(code_data[2]) > 6:
                        # 涨停
                        codes_data_html += f"<font color='#FF3232'>{code_data[1]}:{code_data[0]}&nbsp;&nbsp;</font>"
                    else:
                        codes_data_html += f"{code_data[1]}:{code_data[0]}&nbsp;&nbsp;"
                    codes_data_html += "</td>"
                    if count % 4 == 0:
                        codes_data_html += "</tr><tr>"
                codes_data_html += "</tr></table>"
                _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()
    params["initiative_buy_codes"] = []
    for d in codes_score[0]:
        params["initiative_buy_codes"].append(
            {"name": d[1], "code": d[0], "score": d[2], "limit_up": d[3], "open_limit_up": d[4]})
    params["passive_buy_codes"] = []
    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]})
    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)
    params["trade_record"] = {"open_limit_up": trade_info[0], "records": trade_info[2]}
    ##############################开盘啦相关信息##################################
    params["kpl_industry_rank"] = []
    params["kpl_best_feng_kou"] = []
    params["kpl_feng_kou"] = []
    params["kpl_feng_xiang"] = []
    best_fengkou = __kplDataManager.get_data(kpl_util.KPLDataType.BEST_FENG_KOU)
    fengkou = __kplDataManager.get_data(kpl_util.KPLDataType.FENG_KOU)
    fengxiang = __kplDataManager.get_data(kpl_util.KPLDataType.FENG_XIANG)
    rank_infos = __kplDataManager.get_data(kpl_util.KPLDataType.INDUSTRY_RANK)
    # (代码,名称,强度,涨幅,热门板块,所有板块)
    if best_fengkou:
        for r in best_fengkou:
            hot_block = "、".join(r[4].split("、")[:2])
            params["kpl_best_feng_kou"].append(
                {"name": r[1], "weight": r[2], "money": money_desc(r[2]), "rate": r[3], "hot_block": hot_block,
                 "hot_block_all": r[5]})
    if fengkou:
        fengkou = fengkou[:30]
        for r in fengkou:
            # 市场风口
            # (代码,名称,涨幅,主力净额,风口概念)
            params["kpl_feng_kou"].append(
                {"name": r[1], "money": money_desc(r[3]), "rate": r[2], "block": r[4]})
    if fengxiang:
        for r in fengxiang:
            # 风向标
            # (代码, 名称, 现价, 涨幅, 板块, 300万大单净额, 主力净额, 自由市值)
            params["kpl_feng_xiang"].append(
                {"name": r[1], "money_300w": money_desc(r[5]), "money_main": money_desc(r[6]), "rate": r[3],
                 "block": r[4]})
    if rank_infos:
        for r in rank_infos:
            params["kpl_industry_rank"].append({"name": r[1], "money": money_desc(r[2]), "rate": r[3]})
    return render(params)
def __load_codes_scores():
@@ -494,12 +379,14 @@
        code_name = gpcode_manager.get_code_name(code)
        # 获取现价,判断是否涨停
        current_price_info = global_util.cuurent_prices.get(code)
        limit_up_info = code_price_manager.Buy1PriceManager.get_limit_up_info(code)
        is_limit_up = True
        open_limit_up = limit_up_info[0] and limit_up_info[1]
        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.append((code, code_name, scores[code], is_limit_up, open_limit_up))
    scores_list.sort(key=lambda x: x[2], reverse=True)
    fscores_list = [[], [], []]
    for score in scores_list:
@@ -526,6 +413,7 @@
    except:
        pass
    records_new = []
    records_new_data = []
    index = 0
    if records:
        try:
@@ -537,6 +425,7 @@
                    index += 1
                    temp = f"第{index}次下单:【{time_}】&【{data['score']}分】,{data.get('desc')}"
                    records_new.append(temp)
                    records_new_data.append({"type": 1, "index": index, "time": time_, "score": data['score']})
                elif type == 'S撤':
                    # index':378 , 'rate':0.51 , 'target_rate':0.49
                    pass
@@ -556,12 +445,64 @@
                elif type == '撤单':
                    temp = f"第{index}次撤单:【{time_}】{data['msg']}"
                    records_new.append(temp)
                    records_new_data.append({"type": 0, "time": time_, "desc": data['msg']})
        except:
            pass
    return break_time, records_new
    return break_time, records_new, records_new_data
if __name__ == '__main__':
    st="8天3板"
    print(st[-2:-1])
    datas = {
        "base_url": "http://192.168.3.122/kp/",
        "code_name": "天域生态 002255",
        "score_data": {"volume": {"score": 20, "now": "12", "high": {"num": "56", "date": "2023-04-13"}},
                       "bidding": {"score": 10, "money": "4563"},
                       "deal_big_money": {"score": 10, "money": 0, "base_money": 456.5,
                                          "start": {"time": "09:00:00", "num": 1456},
                                          "end": {"time": "09:00:00", "num": 1456}},
                       "k_form": {"score": 10, "datas": ["破前高", "超跌补涨", "涨幅过高"]},
                       "code_nature": {"score": 10, "data_desc": "涨停次数2次"},
                       "hot_block": {"score": 10, "block_name": "影视", "limit_up_count": 10, "open_limit_up_count": 2},
                       "limit_up_time": {"score": 10, "time": "09:56:00"},
                       "zyltgb": {"score": 10, "value": "12.5"},
                       "limit_up_price": {"score": 10, "price": "6.35"},
                       "total_score": "210"
                       },
        "trade_data": {"star": {"desc": "被动买入", "count": 0},
                       "safe_count": {"base": 12, "now": 2},
                       "m": {"base": 1200, "now": 1000},
                       "big_num": {"base": 10, "now": 2},
                       "trade_progress": {"time": "09:12:12", "num": 1111, "money": "12.56"},
                       "buy_single": {"time": "09:12:12", "num": 1111, "money": "12.56"},
                       "buy_exec": {"time": "09:12:12", "num": 1111, "money": "12.56"}
                       },
        "xgb_code_infos": [{"date": "今天", "blocks": [
            {"name": "影视", "limit_up_count": 2, "index": 1, "price": "12.00", "rate": "+10.00%"},
            {"name": "文旅", "limit_up_count": 3, "index": 2, "price": "12.00", "rate": "+10.00%"},
        ]}],
        "initiative_buy_codes": [
            {"name": "测试1", "code": "000123", "score": 125, "limit_up": True, "open_limit_up": True},
            {"name": "测试2", "code": "000123", "score": 125, "limit_up": False, "open_limit_up": True},
            {"name": "测试2", "code": "000123", "score": 125, "limit_up": False, "open_limit_up": True},
            {"name": "测试2", "code": "000123", "score": 125, "limit_up": False, "open_limit_up": False}
        ],
        "passive_buy_codes": [{"name": "测试1", "code": "000123", "score": 125},
                              {"name": "测试2", "code": "000123", "score": 125},
                              {"name": "测试2", "code": "000123", "score": 125},
                              {"name": "测试2", "code": "000123", "score": 125}
                              ],
        "trade_record": {"open_limit_up": "10:00:03", "records": [
            {"type": 1, "index": 1, "time": "11:00:00", "score": 12},
            {"type": 0, "time": "11:26:00", "desc": "H撤撤单"}
        ]},
        "xgb_infos": [{"block": {"name": "测试1", "rate": "+12.00%", "limit_up_count": 10},
                       "codes": [
                           {"limit_up": True, "name": "测试代码", "code": "000654"},
                           {"limit_up": True, "name": "测试代码", "code": "000654"},
                           {"limit_up": True, "name": "测试代码", "code": "000654"},
                           {"limit_up": False, "name": "测试代码", "code": "000654"},
                       ]}]
    }
    print(render(datas))