From 7effd6cbe7ba570c91fc47ff3971df6fb686759d Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期三, 30 七月 2025 11:23:51 +0800 Subject: [PATCH] bug修复 --- l2/l2_transaction_data_processor.py | 65 ++++++++++++++++++++++++++------ 1 files changed, 52 insertions(+), 13 deletions(-) diff --git a/l2/l2_transaction_data_processor.py b/l2/l2_transaction_data_processor.py index aac5019..2a62378 100644 --- a/l2/l2_transaction_data_processor.py +++ b/l2/l2_transaction_data_processor.py @@ -38,10 +38,17 @@ # 璁$畻鎴愪氦杩涘害 @classmethod - def __compute_latest_trade_progress(cls, code, fdatas): + def __compute_latest_trade_progress(cls, code, fdatas, buy_exec_index=None): + """ + 璁$畻鐪熷疄涓嬪崟浣嶇疆 + @param code: + @param fdatas: + @param buy_exec_index: + @return:鐪熷疄涓嬪崟浣嶇疆, 鏄惁鏄繎浼艰绠� + """ buyno_map = l2_data_util.local_today_buyno_map.get(code) if not buyno_map: - return None + return None, False buy_progress_index = None for i in range(len(fdatas) - 1, -1, -1): d = fdatas[i] @@ -51,7 +58,37 @@ if L2DataUtil.is_limit_up_price_buy(buyno_map[buy_no]["val"]): buy_progress_index = buyno_map[buy_no]["index"] break - return buy_progress_index + if buy_progress_index is None and buy_exec_index is not None and buy_exec_index >= 0: + # 娌℃湁鎵惧埌鐪熷疄鎴愪氦杩涘害浣嶄笖鏈変拱鍏ユ墽琛屼綅缃� + # 鏍规嵁鏈�杩戠殑鎴愪氦涔板崟鍙疯绠楃湡瀹炴垚浜や綅缃� + try: + latest_buy_order_no = fdatas[-1][0][6] + total_datas = l2_data_util.local_today_datas.get(code) + if tool.trade_time_sub(total_datas[-1]["val"]["time"], total_datas[buy_exec_index]["val"]["time"]) < 60: + # 涓嬪崟60s鍐呮墠杩欐牱璁$畻 + # 鍙栨渶鏂扮殑鎴愪氦涔板崟鍙凤紝鍦ㄤ袱涓定鍋滃鎵樹拱涔嬮棿鐨勫悗涓�涓暟鎹� + index_1 = None + max_index = total_datas[-1]["index"] + for i in range(max_index, -1, -1): + data = total_datas[i] + val = data['val'] + if not L2DataUtil.is_limit_up_price_buy(val): + continue + if val['orderNo'] < latest_buy_order_no: + index_1 = i + break + if index_1 is not None: + for i in range(index_1 + 1, max_index + 1): + data = total_datas[i] + val = data['val'] + if not L2DataUtil.is_limit_up_price_buy(val): + continue + if val['orderNo'] > latest_buy_order_no: + buy_progress_index = i + return buy_progress_index, True + except Exception as e: + async_log_util.info(logger_debug, f"璁$畻鐪熷疄鎴愪氦杩涘害浣嶅嚭閿欙細{str(e)}") + return buy_progress_index, False @classmethod def statistic_big_order_infos(cls, code, fdatas, order_begin_pos: OrderBeginPosInfo): @@ -251,12 +288,13 @@ # if big_money_count > 0: # LCancelRateManager.compute_big_num_deal_rate(code) - buy_progress_index = cls.__compute_latest_trade_progress(code, fdatas) + buy_progress_index, is_similar = cls.__compute_latest_trade_progress(code, fdatas, + order_begin_pos.buy_exec_index) if buy_progress_index is not None: buy_progress_index_changed = cls.__TradeBuyQueue.set_traded_index(code, buy_progress_index, total_datas) - l2_log.info(code, logger_l2_trade_buy_queue, "鑾峰彇鎴愪氦浣嶇疆鎴愬姛锛� code-{} index-{}", code, buy_progress_index) + l2_log.info(code, logger_l2_trade_buy_queue, "鑾峰彇鎴愪氦浣嶇疆鎴愬姛锛� code-{} index-{} is_similar-{}", code, buy_progress_index, is_similar) if is_placed_order: # NewGCancelBigNumComputer().set_trade_progress(code, order_begin_pos.buy_single_index, # buy_progress_index) @@ -339,18 +377,19 @@ # 缁熻娑ㄥ仠涓诲姩鍗栨垚浜わ紝涓轰簡F鎾ゅ噯澶囨暟鎹� HuaXinSellOrderStatisticManager.statistic_active_sell_deal_volume(code, fdatas, limit_up_price) # 璁$畻鎴愪氦杩涘害 - buy_progress_index = cls.__compute_latest_trade_progress(code, fdatas) - if buy_progress_index is not None: + _buy_progress_index, _is_similar = cls.__compute_latest_trade_progress(code, fdatas, + order_begin_pos.buy_exec_index) + if _buy_progress_index is not None: total_datas = l2_data_util.local_today_datas.get(code) - buy_progress_index_changed = cls.__TradeBuyQueue.set_traded_index(code, buy_progress_index, + buy_progress_index_changed = cls.__TradeBuyQueue.set_traded_index(code, _buy_progress_index, total_datas) - async_log_util.info(logger_l2_trade_buy_queue, "鑾峰彇鎴愪氦浣嶇疆鎴愬姛锛� code-{} index-{}", code, - buy_progress_index) + async_log_util.info(logger_l2_trade_buy_queue, "鑾峰彇鎴愪氦浣嶇疆鎴愬姛锛� code-{} index-{} similar-{}", code, + _buy_progress_index, _is_similar) if is_placed_order: LCancelBigNumComputer().set_trade_progress(code, order_begin_pos.buy_single_index, - buy_progress_index, + _buy_progress_index, total_datas) - cancel_result = FCancelBigNumComputer().need_cancel_for_deal_fast(code, buy_progress_index) + cancel_result = FCancelBigNumComputer().need_cancel_for_deal_fast(code, _buy_progress_index) if cancel_result[0]: L2TradeDataProcessor.cancel_buy(code, f"F鎾�:{cancel_result[1]}", cancel_type=trade_constant.CANCEL_TYPE_F) @@ -418,7 +457,7 @@ # 濡傛灉鏄鍔ㄤ拱灏辨洿鏂版垚浜よ繘搴� if not fdatas[-1][1]: - buy_progress_index = cls.__compute_latest_trade_progress(code, fdatas) + buy_progress_index, is_similar = cls.__compute_latest_trade_progress(code, fdatas) if buy_progress_index is not None: total_datas = l2_data_util.local_today_datas.get(code) cls.__TradeBuyQueue.set_traded_index(code, buy_progress_index, -- Gitblit v1.8.0