| | |
| | | |
| | | |
| | | 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/", |
| | | } |
| | |
| | | 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: |
| | |
| | | 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} |
| | | |
| | |
| | | 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 |
| | |
| | | "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']} |
| | | |
| | | # 上板时间 |
| | |
| | | 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() |
| | |
| | | elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: |
| | | params["trade_data"]["trade_state"]["desc"] = "已成交" |
| | | |
| | | ##############################选股宝################################## |
| | | |
| | | params["xgb_code_infos"] = [] |
| | | |
| | | ##############################热门风口################################## |
| | | |
| | | params["xgb_infos"] = [] |
| | | |
| | | ##############################主动买,被动买################################## |
| | | # 返回主动买,被动买,不买的列表(代码, 名称, 得分, 是否涨停) |
| | | codes_score = __load_codes_scores() |
| | | params["initiative_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]}) |
| | | # 主动买与被动买不能超过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: |
| | |
| | | plate_info.reverse() |
| | | params["kpl_code_info"]["plate"] = plate_info |
| | | |
| | | # 获取代码的历史涨停数据 |
| | | params["kpl_code_info"]["code_records"] = KPLLimitUpDataRecordManager.get_latest_infos(code, 4) |
| | | # 获取代码的历史涨停数据,(涨停原因,日期,板块) |
| | | 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) |
| | | # 获取这几天的涨停代码 |
| | | 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]))) |
| | | # 获取今日代码的得分 |
| | | __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: |
| | | # 获取涨停代码信息 |
| | | 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(): |