From c8b740733f0f9fcf438fc4606eea317011ebd8bd Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 28 四月 2023 16:42:47 +0800 Subject: [PATCH] 看盘页面及相关接口修改 --- output/code_info_output.py | 178 +++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 125 insertions(+), 53 deletions(-) diff --git a/output/code_info_output.py b/output/code_info_output.py index 61dd105..2924830 100644 --- a/output/code_info_output.py +++ b/output/code_info_output.py @@ -8,6 +8,7 @@ # 甯傚満鐑害 import os import sys +import time import code_volumn_manager import constant @@ -19,7 +20,8 @@ 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 kpl_data_manager, kpl_util +from third_data import kpl_data_manager, kpl_util, kpl_api, block_info +from third_data.kpl_data_manager import KPLLimitUpDataRecordManager, KPLDataManager 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 @@ -73,6 +75,7 @@ # 鑾峰彇鐧藉悕鍗�,榛戝悕鍗� if trade_manager.gpcode_manager.WantBuyCodesManager.is_in(code): code_extra_infos.append("鎯充拱鍗�") + params["code"] = code params["code_name"] = f"{gpcode_manager.get_code_name(code)} {code} 锛坽','.join(code_extra_infos)}锛�" score_info = None @@ -201,7 +204,8 @@ # 楂樹綅鐗堜俊鎭� "high_block_infos": [], } - params["score_data"]["hot_block"] = {"score": hot_block_score,"limit_up_index":hot_block_source_data['limit_up_index']+1, + 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']} @@ -219,7 +223,7 @@ # deal_big_money ###############################涓嬪崟淇℃伅############################### - params["score_data"]["trade_data"] = {} + params["trade_data"] = {} # 鑾峰彇涔板叆鎰忔効 volume_rate = score_source_list[6] @@ -235,22 +239,22 @@ ((score, score_list), score_source_list)) if -1 < __L2PlaceOrderParamsManager.score_index < 3: - params["score_data"]["trade_data"]["start"] = {"desc": "涓诲姩涔板叆"} + params["trade_data"]["star"] = {"desc": "涓诲姩涔板叆"} if __L2PlaceOrderParamsManager.score_index == 0: - params["score_data"]["trade_data"]["start"]["count"] = 3 + params["trade_data"]["star"]["count"] = 3 elif __L2PlaceOrderParamsManager.score_index == 1: - params["score_data"]["trade_data"]["start"]["count"] = 2 + params["trade_data"]["star"]["count"] = 2 else: - params["score_data"]["trade_data"]["start"]["count"] = 1 + params["trade_data"]["star"]["count"] = 1 elif __L2PlaceOrderParamsManager.score_index < 0: - params["score_data"]["trade_data"]["start"] = {"desc": "涓嶆墽琛屼拱鍏�", "count": 0} + params["trade_data"]["star"] = {"desc": "涓嶆墽琛屼拱鍏�", "count": 0} else: - params["score_data"]["trade_data"]["start"] = {"desc": "琚姩涔板叆", "count": 0} + params["trade_data"]["star"] = {"desc": "琚姩涔板叆", "count": 0} # 瀹夊叏绗旀暟 safe_count = __L2PlaceOrderParamsManager.get_safe_count() base_safe_count, min_count, max_count = L2TradeFactorUtil.get_safe_buy_count(code, True) - params["score_data"]["trade_data"]["safe_count"] = {"base": base_safe_count, "now": safe_count} + params["trade_data"]["safe_count"] = {"base": base_safe_count, "now": safe_count} # 鍔ㄦ�丮鍊� m = __L2PlaceOrderParamsManager.get_m_val() zyltgb = global_util.zyltgb_map.get(code) @@ -258,11 +262,11 @@ global_data_loader.load_zyltgb() zyltgb = global_util.zyltgb_map.get(code) base_m = L2TradeFactorUtil.get_base_safe_val(zyltgb) - params["score_data"]["trade_data"]["m"] = {"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() - params["score_data"]["trade_data"]["big_num"] = {"base": base_big_num, "now": big_num} + params["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: @@ -270,8 +274,8 @@ pass else: data = total_datas[trade_progress] - params["score_data"]["trade_data"]["trade_progress"] = {"time": data['val']['time'], - "num": data['val']['num'], "money": round( + params["trade_data"]["trade_progress"] = {"time": data['val']['time'], + "num": data['val']['num'], "money": round( data['val']['num'] * float(data['val']['price']) * 100 / 10000, 1)} # 涔板叆淇″彿 @@ -283,18 +287,33 @@ pass else: data = total_datas[buy_single_index] - 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)} + params["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("鏈笅鍗�") pass else: data = total_datas[buy_exec_index] - 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)} + params["trade_data"]["buy_exec"] = {"time": data['val']['time'], "num": data['val']['num'], + "money": round(data['val']['num'] * float( + data['val']['price']) * 100 / 10000, 1)} + params["trade_data"]["trade_state"] = {} + trade_state = trade_manager.get_trade_state(code) + if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED: + params["trade_data"]["trade_state"]["order"] = True + params["trade_data"]["trade_state"]["desc"] = "宸蹭笅鍗�" + else: + params["trade_data"]["trade_state"]["order"] = False + if trade_state == trade_manager.TRADE_STATE_NOT_TRADE: + params["trade_data"]["trade_state"]["desc"] = "鏈氦鏄�" + elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_ING: + params["trade_data"]["trade_state"]["desc"] = "鎾ゅ崟涓�" + elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_SUCCESS: + params["trade_data"]["trade_state"]["desc"] = "鎾ゅ崟鎴愬姛" + elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: + params["trade_data"]["trade_state"]["desc"] = "宸叉垚浜�" ##############################閫夎偂瀹�################################## @@ -320,39 +339,91 @@ 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) - # (浠g爜,鍚嶇О,寮哄害,娑ㄥ箙,鐑棬鏉垮潡,鎵�鏈夋澘鍧�) - 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: - # 甯傚満椋庡彛 - # (浠g爜,鍚嶇О,娑ㄥ箙,涓诲姏鍑�棰�,椋庡彛姒傚康) - 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: - # 椋庡悜鏍� - # (浠g爜, 鍚嶇О, 鐜颁环, 娑ㄥ箙, 鏉垮潡, 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]}) + params["kpl_code_info"] = {} + # 鑾峰彇寮�鐩樺暒鏉垮潡 + plate_info = kpl_api.getStockIDPlate(code) + if plate_info: + plate_info.sort(key=lambda x: x[2]) + plate_info.reverse() + params["kpl_code_info"]["plate"] = plate_info - if rank_infos: - for r in rank_infos: - params["kpl_industry_rank"].append({"name": r[1], "money": money_desc(r[2]), "rate": r[3]}) + # 鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹� + params["kpl_code_info"]["code_records"] = KPLLimitUpDataRecordManager.get_latest_infos(code, 4) + + # 鑾峰彇浠婃棩鏉垮潡 + 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])) + + 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) @@ -476,7 +547,8 @@ "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"} + "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%"}, -- Gitblit v1.8.0