| | |
| | | from third_data import hot_block_data_process |
| | | from trade import first_code_score_manager, l2_trade_factor |
| | | from trade.l2_trade_factor import L2TradeFactorUtil |
| | | import trade.deal_big_money_manager |
| | | |
| | | |
| | | def __format_data(code_info, score_info, buy_params_info, xgb_code_info, xgb_infos): |
| | | html = "" |
| | | html += f"<h2>{code_info[1]} {code_info[0]}</h2><br>" |
| | | if score_info: |
| | | html += "-----买前评分-------<br>" |
| | | html += "<b>-----买前评分-------</b><br>" |
| | | score_types = ["换手量能", "竞价强度", "资金力度", "日线形态", "历史股性", "板块热度", "上板时间", "市值大小", "股价大小"] |
| | | html += "<table style='font-size:25px'>" |
| | | for i in range(0, len(score_info[1])): |
| | |
| | | html += f"</table>" |
| | | |
| | | if buy_params_info: |
| | | html += "<br>-----交易参数-------<br><table>" |
| | | 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>" |
| | | |
| | | if xgb_code_info: |
| | | html += "<br>-----选股宝---------<br>" |
| | | 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>" |
| | |
| | | else: |
| | | html += f"无<br>" |
| | | if xgb_infos: |
| | | html += "<br>-----市场热度-------<br><table>" |
| | | html += "<b><br>-----市场热度-------<br></b><table>" |
| | | for info in xgb_infos: |
| | | html += f"<tr><td>{info}</td></tr>" |
| | | html += f"<tr><td><font size='3'>{info[0]}</font><br><div style='margin-left:100px;'>{info[1]}</div></td></tr>" |
| | | html += "</tr>" |
| | | html += "<br><br>" |
| | | return html |
| | | |
| | | |
| | |
| | | # 获取当前量信息 |
| | | 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)}%】") |
| | | 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)}%】") |
| | | # 竞价强度 |
| | | 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 = "" |
| | | if deal_indexes: |
| | | temps = [] |
| | | for index in deal_indexes: |
| | | temps.append(int(index)) |
| | | temps.sort() |
| | | 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']}手】," |
| | | |
| | | score_list_new.append(score_list[8]) |
| | | score_source_list_new.append(f"累计金额【{score_source_list[8][0] // 10000}万】&固定m值【{score_source_list[8][1] // 10000}万】") |
| | | 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 = [] |
| | |
| | | __L2PlaceOrderParamsManager = l2_trade_factor.L2PlaceOrderParamsManager(code, True, volume_rate, |
| | | code_volumn_manager.get_volume_rate_index( |
| | | volume_rate), |
| | | ((score, score_list),score_source_list)) |
| | | ( |
| | | (score, score_list), |
| | | score_source_list)) |
| | | __base_L2PlaceOrderParamsManager = l2_trade_factor.L2PlaceOrderParamsManager(code, False, volume_rate, |
| | | code_volumn_manager.get_volume_rate_index( |
| | | volume_rate), |
| | | ((score, score_list),score_source_list)) |
| | | ((score, score_list), |
| | | score_source_list)) |
| | | buy_params_info = [] |
| | | if -1 < __L2PlaceOrderParamsManager.score_index < 3: |
| | | buy_params_info.append("<font color='red'>【主动买入】</font>") |
| | |
| | | base_big_num = __base_L2PlaceOrderParamsManager.get_big_num_count() |
| | | buy_params_info.append(f"固定买前大单【{base_big_num}】笔,衰减后买前大单【{big_num}】笔") |
| | | # 成交进度 |
| | | 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) |
| | | 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("未识别") |
| | |
| | | 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 |
| | | xgb_infos.append(f"【{block[0]}】,涨幅【{block[1]}】,共【{limit_up_count}】个涨停") |
| | | # 获取板块中的代码 |
| | | block_codes_set = set() |
| | | for d in block[2]: |
| | | code = d[0][1].split(".")[0] |
| | | block_codes_set.add(code) |
| | | |
| | | 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>" |
| | | # 如果代码涨停时间或者没有在最新的代码中 |
| | | 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]} </font>" |
| | | elif len(code_data[2]) > 6: |
| | | # 涨停 |
| | | codes_data_html += f"<font color='#FF3232'>{code_data[1]}:{code_data[0]} </font>" |
| | | else: |
| | | codes_data_html += f"{code_data[1]}:{code_data[0]} " |
| | | codes_data_html += "</td>" |
| | | 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)) |
| | | |
| | | return __format_data(code_info, score_info, buy_params_info, xgb_code_info, xgb_infos) |
| | | |