From 6b77c1709908133c040778f5f775432c4ce7efd7 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期五, 09 六月 2023 19:08:44 +0800 Subject: [PATCH] 优化L2卡位分配/增加想买单第一时间加入L2卡位 --- third_data/data_server.py | 94 +++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 87 insertions(+), 7 deletions(-) diff --git a/third_data/data_server.py b/third_data/data_server.py index 5b99222..62d68d5 100644 --- a/third_data/data_server.py +++ b/third_data/data_server.py @@ -10,10 +10,12 @@ import global_util import gpcode_manager +import juejin import log import log_analyse import tool -from l2 import code_price_manager +from l2 import code_price_manager, l2_data_util +from l2.cancel_buy_strategy import HourCancelBigNumComputer from output.limit_up_data_filter import IgnoreCodeManager from third_data import kpl_util, kpl_data_manager, kpl_api from third_data.code_plate_key_manager import RealTimeKplMarketData, KPLPlateForbiddenManager @@ -22,7 +24,7 @@ from third_data.kpl_util import KPLDataType, KPLPlatManager import urllib.parse as urlparse from urllib.parse import parse_qs -from output import code_info_output, limit_up_data_filter, output_util +from output import code_info_output, limit_up_data_filter, output_util, kp_client_msg_manager from trade import bidding_money_manager, trade_manager from trade.l2_trade_util import BlackListCodeManager @@ -290,10 +292,9 @@ code = ps_dict['code'] name = ps_dict.get('name') - data = code_info_output.get_output_params(code,self.__jingxuan_cache_dict,self.__industry_cache_dict) + data = code_info_output.get_output_params(code, self.__jingxuan_cache_dict, self.__industry_cache_dict) if data["code_name"].find("None") > -1 and name: data["code_name"] = f"{name} {code}" - self.__history_plates_dict[code] = (time.time(), data["kpl_code_info"]["code_records"]) if "plate" in data["kpl_code_info"]: @@ -364,13 +365,88 @@ for d in now_limit_up_codes_info: if d[5] != plate: continue - codes_info.append([d[0],d[1],0]) + codes_info.append([d[0], d[1], 0]) # 鏌ヨ鏄惁涓烘兂涔板崟 want_codes = gpcode_manager.WantBuyCodesManager.list_code() for code_info in codes_info: code_info[2] = 1 if code_info[0] in want_codes else 0 - response_data = json.dumps({"code": 0,"data":codes_info}) + response_data = json.dumps({"code": 0, "data": codes_info}) + elif url.path == "/get_h_cancel_data": + ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()]) + code = ps_dict["code"] + if code: + 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_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 or trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: + hcancel_datas_dict, cancel_indexes_set = HourCancelBigNumComputer.get_watch_index_dict(code) + # 鏍规嵁鏃ュ織璇诲彇瀹炴椂鐨勮绠楁暟鎹� + h_cancel_latest_compute_info = log.get_h_cancel_compute_info(code) + if hcancel_datas_dict: + temp_list = [(k, hcancel_datas_dict[k][0]) for k in hcancel_datas_dict] + canceled_indexs = set([int(k.split("-")[0]) for k in cancel_indexes_set]) + temp_list.sort(key=lambda x: x[0]) + fdata = { + "computed_info": list( + h_cancel_latest_compute_info) if h_cancel_latest_compute_info else None, + "datas": []} + for i in range(0, len(temp_list)): + temp = temp_list[i] + val = total_datas[temp[0]]["val"] + canceled = temp[0] in canceled_indexs + fdata["datas"].append( + (val["time"], val["num"], + code_info_output.money_desc(val["num"] * float(val["price"]) * 100), + (1 if canceled else 0))) + response_data = json.dumps({"code": 0, "data": fdata}) + else: + response_data = json.dumps({"code": 1, "msg": "鏃燞鎾ゆ暟鎹�"}) + else: + response_data = json.dumps({"code": 1, "msg": "鏃燞鎾ゆ暟鎹�"}) + else: + response_data = json.dumps({"code": 1, "msg": "璇蜂笂浼燾ode"}) + + elif url.path == "/get_last_trade_day_reasons": + # 鑾峰彇涓婁釜浜ゆ槗鏃ョ殑鐩稿悓娑ㄥ仠鍘熷洜鐨勪唬鐮佷俊鎭� + ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()]) + code = ps_dict["code"] + day = juejin.JueJinManager.get_previous_trading_date(tool.get_now_date_str()) + # 鑾峰彇娑ㄥ仠鏁版嵁 + + # 鑾峰彇浠g爜鐨勫師鍥� + reasons = kpl_data_manager.KPLLimitUpDataRecordManager.list_by_code(code, day) + if reasons: + reasons = list(reasons) + reasons.sort(key=lambda x: x[9]) + reason = reasons[-1][2] + datas = self.__kplDataManager.get_from_file(kpl_util.KPLDataType.LIMIT_UP, day) + # (浠g爜,鍚嶇О,棣栨娑ㄥ仠鏃堕棿,鏈�杩戞定鍋滄椂闂�,鍑犳澘,娑ㄥ仠鍘熷洜,鏉垮潡,瀹為檯娴侀��,涓诲姏鍑�棰�,娑ㄥ仠鍘熷洜浠g爜,娑ㄥ仠鍘熷洜浠g爜鏁伴噺) + result_list = [] + for d in datas: + if d[5] == reason and d[0] != code: + # (浠g爜,鍚嶇О) + result_list.append((d[0], d[1])) + response_data = json.dumps({"code": 0, "data": {"reason": reason, "data": result_list}}) + else: + response_data = json.dumps({"code": 1, "msg": "鏄ㄦ棩鏈定鍋�"}) + + elif url.path == "/pull_kp_client_msg": + # 鎷夊彇瀹㈡埛绔秷鎭� + ps_dict = dict([(k, v[0]) for k, v in parse_qs(url.query).items()]) + client = ps_dict["client"] + msg = kp_client_msg_manager.read_msg(client) + if msg: + response_data = json.dumps({"code": 0, "data": msg}) + else: + response_data = json.dumps({"code": 1, "msg": "鏆傛棤娑堟伅"}) + elif url.path == "/list_kp_client_msg": + msg_list = kp_client_msg_manager.list_msg_from_local() + msg_list.reverse() + msg_list = [f"{msg.split('|')[0]}{msg.split('|')[-1].split('-')[1].strip()}" for msg in msg_list] + response_data = json.dumps({"code": 0, "data": msg_list}) self.send_response(200) # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁 @@ -471,13 +547,17 @@ params = json.loads(_str) return params + class ThreadedHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer): pass + def run(addr, port): + # 杩愯鐪嬬洏娑堟伅閲囬泦 + kp_client_msg_manager.run_capture() handler = DataServer # httpd = socketserver.TCPServer((addr, port), handler) - httpd =ThreadedHTTPServer((addr, port), handler) + httpd = ThreadedHTTPServer((addr, port), handler) print("HTTP server is at: http://%s:%d/" % (addr, port)) httpd.serve_forever() -- Gitblit v1.8.0