From 045a5aa6434da6e83c3d850b17e7e58cd7b55ef5 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 15 五月 2023 15:46:32 +0800 Subject: [PATCH] 开盘啦板块影响交易逻辑 --- output/code_info_output.py | 154 +++++++++++++++++---------------------------------- 1 files changed, 52 insertions(+), 102 deletions(-) diff --git a/output/code_info_output.py b/output/code_info_output.py index 2924830..8003c61 100644 --- a/output/code_info_output.py +++ b/output/code_info_output.py @@ -55,12 +55,17 @@ 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/", } @@ -111,7 +116,8 @@ 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: @@ -135,28 +141,28 @@ 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} @@ -166,21 +172,27 @@ 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 @@ -208,6 +220,7 @@ "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']} # 涓婃澘鏃堕棿 @@ -262,7 +275,7 @@ 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() @@ -315,14 +328,7 @@ elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: params["trade_data"]["trade_state"]["desc"] = "宸叉垚浜�" - ##############################閫夎偂瀹�################################## - - params["xgb_code_infos"] = [] - - ##############################鐑棬椋庡彛################################## - - params["xgb_infos"] = [] - + ##############################涓诲姩涔帮紝琚姩涔�################################## # 杩斿洖涓诲姩涔�,琚姩涔�,涓嶄拱鐨勫垪琛�(浠g爜, 鍚嶇О, 寰楀垎, 鏄惁娑ㄥ仠) codes_score = __load_codes_scores() params["initiative_buy_codes"] = [] @@ -334,12 +340,23 @@ 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: @@ -347,85 +364,18 @@ plate_info.reverse() params["kpl_code_info"]["plate"] = plate_info - # 鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹� - params["kpl_code_info"]["code_records"] = KPLLimitUpDataRecordManager.get_latest_infos(code, 4) + # 鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹�,(娑ㄥ仠鍘熷洜,鏃ユ湡,鏉垮潡) + 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) - # 鑾峰彇杩欏嚑澶╃殑娑ㄥ仠浠g爜 - 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]))) - # 鑾峰彇浠婃棩浠g爜鐨勫緱鍒� - __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: - # 鑾峰彇娑ㄥ仠浠g爜淇℃伅 - 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(): -- Gitblit v1.8.0