From a99df93c160cd4feb4fb9ee076a49672c5ee0d02 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期二, 14 五月 2024 00:40:55 +0800 Subject: [PATCH] 成交队列输出 --- output/output_util.py | 4 + output/l2_output_util.py | 83 +++++++++++++++++++++++++++++++++++++++++ trade/huaxin/huaxin_trade_server.py | 25 +++++++++++- 3 files changed, 109 insertions(+), 3 deletions(-) diff --git a/output/l2_output_util.py b/output/l2_output_util.py new file mode 100644 index 0000000..20810a5 --- /dev/null +++ b/output/l2_output_util.py @@ -0,0 +1,83 @@ +""" +L2鏁版嵁杈撳嚭宸ュ叿 +""" +from l2 import l2_data_util, l2_data_source_util +from l2.l2_data_util import L2DataUtil, local_today_canceled_buyno_map +from l2.l2_transaction_data_manager import HuaXinBuyOrderManager +from l2.transaction_progress import TradeBuyQueue + + +def __get_trade_queue(code, start_index, end_index, real_place_order_index, max_count, step=1): + fresults = [] + # 姝e湪鎴愪氦鐨勬暟鎹� + dealing_info = HuaXinBuyOrderManager.get_dealing_order_info(code) + total_datas = l2_data_util.local_today_datas.get(code) + for i in range(start_index, end_index, step): + data = total_datas[i] + val = data['val'] + if not L2DataUtil.is_limit_up_price_buy(val): + continue + if val["num"] * float(val['price']) < 5000 and real_place_order_index != i: + continue + left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i, + total_datas, + local_today_canceled_buyno_map.get( + code)) + if left_count > 0: + type_ = 0 + num = val['num'] + if dealing_info and str(total_datas[i]["val"]["orderNo"]) == str( + dealing_info[0]): + # 鍑忓幓褰撳墠姝e湪鎴愪氦鐨勬暟鎹腑宸茬粡鎴愪氦浜嗙殑鏁版嵁 + num -= dealing_info[1] // 100 + if i == real_place_order_index: + type_ = 1 + elif num * float(val['price']) >= 29900: + type_ = 2 + + fresults.append((val['num'], type_)) + if len(fresults) > max_count: + break + return fresults + + +def get_trade_queue_at_near_place_order(code, real_place_order_index, max_count): + """ + 鑾峰彇鐪熷疄涓嬪崟浣嶉檮杩戠殑鎴愪氦闃熷垪 + @param code: + @param real_place_order_index: + @param max_count: + @return: + """ + total_datas = l2_data_util.local_today_datas.get(code) + trade_index, is_default = TradeBuyQueue().get_traded_index(code) + if trade_index is None: + trade_index = 0 + threshold_before_count = max_count // 2 + + fresults = __get_trade_queue(code, real_place_order_index, trade_index - 1,real_place_order_index, threshold_before_count, -1) + fresults.reverse() + fresults.extend(__get_trade_queue(code, real_place_order_index+1, total_datas[-1]['index'] + 1, real_place_order_index, max_count - threshold_before_count, 1)) + return fresults + + +def get_trade_queue(code, real_place_order_index, max_count): + """ + 鑾峰彇鐪熷疄涓嬪崟浣嶉檮杩戠殑鎴愪氦闃熷垪 + @param code: + @param real_place_order_index: + @param max_count: + @return: + """ + total_datas = l2_data_util.local_today_datas.get(code) + trade_index, is_default = TradeBuyQueue().get_traded_index(code) + if trade_index is None: + trade_index = 0 + # 鍓嶉潰鏈�澶氬彇5鏉℃暟鎹� + fresults = [] + fresults.extend(__get_trade_queue(code, trade_index, total_datas[-1]['index'] + 1,real_place_order_index, max_count, 1)) + return fresults + + + + diff --git a/output/output_util.py b/output/output_util.py index 2cc5ce8..968c799 100644 --- a/output/output_util.py +++ b/output/output_util.py @@ -1,5 +1,5 @@ import time - +from l2 import l2_data_util def money_desc(money): if abs(money) > 100000000: @@ -12,3 +12,5 @@ if timestamp: return time.strftime("%H:%M:%S", time.localtime(int(timestamp))) return "" + + diff --git a/trade/huaxin/huaxin_trade_server.py b/trade/huaxin/huaxin_trade_server.py index 3cf48d4..2c4f42a 100644 --- a/trade/huaxin/huaxin_trade_server.py +++ b/trade/huaxin/huaxin_trade_server.py @@ -47,6 +47,7 @@ hx_logger_l2_orderdetail, hx_logger_l2_transaction, hx_logger_l2_market_data, logger_l2_g_cancel, logger_debug, \ logger_system, logger_trade, logger_trade_position_api_request, logger_request_api, \ logger_local_huaxin_l1_trade_info, logger_real_place_order_position, logger_l2_trade_buy +from output import l2_output_util from third_data import block_info, kpl_data_manager, kpl_util from third_data.code_plate_key_manager import KPLCodeJXBlockManager, CodePlateKeyBuyManager from third_data.history_k_data_util import JueJinApi, HistoryKDatasUtils @@ -1377,6 +1378,7 @@ if int(c["direction"]) != huaxin_util.TORA_TSTP_D_Buy: continue code = c["securityID"] + orderSysID = c.get("orderSysID") code_name = gpcode_manager.get_code_name(code) # 鑾峰彇涓嬪崟浣嶇疆淇℃伅 order_begin_pos = TradePointManager().get_buy_compute_start_data_cache(code) @@ -1553,7 +1555,7 @@ break except: pass - fdata = {"code_info": (code, code_name), "total_num": total_nums, + fdata = {"id":orderSysID, "code_info": (code, code_name), "total_num": total_nums, "finish_num": deal_or_cancel_num, "buy1_money": output_util.money_desc(buy1_money), "big_num_count": total_big_count, @@ -1574,13 +1576,24 @@ total_left_num * float(limit_up_price) * 100 * 100 / buy1_money, 2), # 鎴愪氦杩涘害姣斾緥 "limit_up_price": float(gpcode_manager.get_limit_up_price(code)), "is_near_big_order": is_near_big_order, - "block": '' + "block": '', + "trade_queue": [] } # 鑾峰彇褰撳墠鏉垮潡 try: can_buy_result = CodePlateKeyBuyManager.can_buy(code) if can_buy_result and can_buy_result[0]: fdata['block'] = ",".join(can_buy_result[0]) + except: + pass + + try: + real_place_order_index = SCancelBigNumComputer().get_real_place_order_index_cache(code) + if real_place_order_index is not None: + trade_queue = l2_output_util.get_trade_queue_at_near_place_order(code, + real_place_order_index, + 11) + fdata['trade_queue'] = trade_queue except: pass fdatas.append(fdata) @@ -1661,6 +1674,14 @@ # 淇浠诲姟 kpl_data_manager.PullTask.repaire_pull_task() self.send_response({"code": 0, "data": {}}, client_id, request_id) + elif ctype == "get_trade_queue": + code = data["code"] + real_place_order_index = SCancelBigNumComputer().get_real_place_order_index_cache(code) + if real_place_order_index is not None: + trade_queue = l2_output_util.get_trade_queue(code,real_place_order_index, 11) + self.send_response({"code": 0, "data": trade_queue}, client_id, request_id) + else: + raise Exception("娌¤幏鍙栧埌鐪熷疄涓嬪崟浣�") except Exception as e: logging.exception(e) self.send_response({"code": 1, "msg": f"鏁版嵁澶勭悊鍑洪敊锛歿e}"}, client_id, request_id) -- Gitblit v1.8.0