From ba52d7ac92a36f413eacaa686f8535e859664ec6 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期一, 28 八月 2023 09:45:11 +0800 Subject: [PATCH] bug修改 --- l2/l2_data_manager_new.py | 153 +++++++++++++++++++++----------------------------- 1 files changed, 65 insertions(+), 88 deletions(-) diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py index d168421..decc883 100644 --- a/l2/l2_data_manager_new.py +++ b/l2/l2_data_manager_new.py @@ -7,6 +7,7 @@ import constant from db.redis_manager_delegate import RedisUtils from l2.huaxin import l2_huaxin_util, huaxin_delegate_postion_manager +from log_module import async_log_util from third_data import kpl_data_manager, block_info from trade.deal_big_money_manager import DealComputeProgressManager from utils import global_util, ths_industry_util, tool @@ -214,7 +215,8 @@ __l2PlaceOrderParamsManagerDict = {} __last_buy_single_dict = {} __TradeBuyQueue = transaction_progress.TradeBuyQueue() - __latest_process_unique_keys = {} + __latest_process_order_unique_keys = {} + __latest_process_not_order_unique_keys = {} # 鍒濆鍖� __TradePointManager = l2_data_manager.TradePointManager() __SecondCancelBigNumComputer = SecondCancelBigNumComputer() @@ -310,8 +312,9 @@ # 鑾峰彇涓嬪崟浣嶇疆 place_order_index = huaxin_delegate_postion_manager.get_l2_place_order_position(code, datas) if place_order_index: - logger_l2_process.info("code:{} 鑾峰彇鍒颁笅鍗曠湡瀹炰綅缃細{}", code, place_order_index) cls.__DCancelBigNumComputer.set_real_order_index(code, place_order_index) + cls.__SecondCancelBigNumComputer.set_real_place_order_index(code, place_order_index) + async_log_util.info(logger_l2_process, "code:{} 鑾峰彇鍒颁笅鍗曠湡瀹炰綅缃細{}", code, place_order_index) __start_time = round(t.time() * 1000) if len(datas) > 0: cls.process_add_datas(code, datas, 0, __start_time) @@ -415,9 +418,10 @@ if l2.l2_data_util.L2DataUtil.is_same_time(now_time_str, latest_time): cls.__process_not_order(code, start_index, end_index, capture_timestamp, is_first_code) - logger_l2_process.info("code:{} 澶勭悊鏁版嵁鑼冨洿: {}-{} 澶勭悊鏃堕棿:{} 鎴浘鏃堕棿鎴筹細{}", code, add_datas[0]["index"], - add_datas[-1]["index"], round(t.time() * 1000) - __start_time, - capture_timestamp) + async_log_util.info(logger_l2_process, "code:{} 澶勭悊鏁版嵁鑼冨洿: {}-{} 澶勭悊鏃堕棿:{} 鎴浘鏃堕棿鎴筹細{}", code, + add_datas[0]["index"], + add_datas[-1]["index"], round(t.time() * 1000) - __start_time, + capture_timestamp) # __start_time = l2_data_log.l2_time(code, round(t.time() * 1000) - __start_time, # "l2鏁版嵁澶勭悊鏃堕棿") @@ -453,10 +457,10 @@ def __process_order(cls, code, start_index, end_index, capture_time, is_first_code, new_add=True): # 澧炲姞鎺ㄥ嚭鏈哄埗 unique_key = f"{start_index}-{end_index}" - if cls.__latest_process_unique_keys.get(code) == unique_key: + if cls.__latest_process_order_unique_keys.get(code) == unique_key: logger_l2_error.error(f"閲嶅澶勭悊鏁版嵁锛歝ode-{code} start_index-{start_index} end_index-{end_index}") return - cls.__latest_process_unique_keys[code] = unique_key + cls.__latest_process_order_unique_keys[code] = unique_key # S鎾� def s_cancel(_buy_single_index, _buy_exec_index): @@ -544,8 +548,8 @@ # 渚濇澶勭悊 cancel_data, cancel_msg = s_cancel(buy_single_index, buy_exec_index) - if not cancel_data: - cancel_data, cancel_msg = h_cancel(buy_single_index, buy_exec_index) + # if not cancel_data: + # cancel_data, cancel_msg = h_cancel(buy_single_index, buy_exec_index) if not cancel_data: cancel_data, cancel_msg = l_cancel(buy_single_index, buy_exec_index) # l2_log.debug(code, "鎾ゅ崟璁$畻缁撴潫") @@ -839,29 +843,29 @@ float(open_limit_up_lowest_price) - price_pre_close) / price_pre_close < 0.05: return False, True, f"鐐告澘鍚庢渶浣庝环璺岃嚦5%浠ヤ笅" - limit_up_info = cls.__Buy1PriceManager.get_limit_up_info(code) - if limit_up_info[0] is None and False: - total_data = local_today_datas.get(code) - buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos( - code) - # 涔嬪墠娌℃湁娑ㄥ仠杩� - # 缁熻涔板叆淇″彿浣嶅埌褰撳墠浣嶇疆娌℃湁鎾ょ殑澶у崟閲戦 - min_money_w = l2_data_util.get_big_money_val(float(total_data[buy_single_index]["val"]["price"])) // 10000 - left_big_num = cls.__SecondCancelBigNumComputer.compute_left_big_num(code, - buy_single_index, - buy_exec_index, - total_data[-1][ - "index"], - total_data, - 0, min_money_w) - if left_big_num > 0: - # 閲嶆柊鑾峰彇鍒嗘暟涓庡垎鏁扮储寮� - limit_up_time = cls.__LimitUpTimeManager.get_limit_up_time_cache(code) - if limit_up_time is None: - limit_up_time = tool.get_now_time_str() - score = first_code_score_manager.get_score(code, cls.volume_rate_info[code][0], limit_up_time, True, - left_big_num) - cls.__l2PlaceOrderParamsManagerDict[code].set_score(score) + # limit_up_info = cls.__Buy1PriceManager.get_limit_up_info(code) + # if limit_up_info[0] is None and False: + # total_data = local_today_datas.get(code) + # buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos( + # code) + # # 涔嬪墠娌℃湁娑ㄥ仠杩� + # # 缁熻涔板叆淇″彿浣嶅埌褰撳墠浣嶇疆娌℃湁鎾ょ殑澶у崟閲戦 + # min_money_w = l2_data_util.get_big_money_val(float(total_data[buy_single_index]["val"]["price"])) // 10000 + # left_big_num = cls.__SecondCancelBigNumComputer.compute_left_big_num(code, + # buy_single_index, + # buy_exec_index, + # total_data[-1][ + # "index"], + # total_data, + # 0, min_money_w) + # if left_big_num > 0: + # # 閲嶆柊鑾峰彇鍒嗘暟涓庡垎鏁扮储寮� + # limit_up_time = cls.__LimitUpTimeManager.get_limit_up_time_cache(code) + # if limit_up_time is None: + # limit_up_time = tool.get_now_time_str() + # score = first_code_score_manager.get_score(code, cls.volume_rate_info[code][0], limit_up_time, True, + # left_big_num) + # cls.__l2PlaceOrderParamsManagerDict[code].set_score(score) # logger_place_order_score.info("code={},data='score_index':{},'score_info':{}", code, # cls.__l2PlaceOrderParamsManagerDict[code].score_index, @@ -885,55 +889,28 @@ # f.write(output.getvalue()) # return results return cls.can_buy_first(code, limit_up_price) - else: return True, False, "鍦ㄦ兂涔板悕鍗曚腑" @classmethod def can_buy_first(cls, code, limit_up_price): - # def is_has_k_format(score_info): - # # (15涓氦鏄撴棩娑ㄥ箙鏄惁澶т簬24.9%,鏄惁鐮村墠楂橈紝鏄惁瓒呰穼锛屾槸鍚︽帴杩戝墠楂橈紝鏄惁N,鏄惁V,鏄惁鏈夊舰鎬�,澶╅噺澶ч槼淇℃伅,鏄惁鍏锋湁杈ㄨ瘑搴�) - # - # if score_info[1][3][6][0] and not score_info[1][3][3][0]: - # return True - # if score_info[1][3][7][0]: - # return True - # return False - - if float(limit_up_price) >= constant.MAX_CODE_PRICE: - return False, True, f"鑲′环澶т簬{constant.MAX_CODE_PRICE}鍧�" - - # 9:35涔嬪墠涔板ぇ甯傚��(>=80浜�)绁� - if int(tool.get_now_date_str("%Y%m%d")) < int("093500"): - zyltgb = global_util.zyltgb_map.get(code) - if zyltgb is None: - global_data_loader.load_zyltgb() - zyltgb = global_util.zyltgb_map.get(code) - if zyltgb >= 80 * 100000000: - return True, False, "{9:30:00-9:35:00}鑷敱甯傚�尖墺80浜�" # 鍒ゆ柇鏉垮潡 - yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes() - plate_can_buy, msg = CodePlateKeyBuyManager.can_buy(code, - kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas, - kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, - yesterday_codes, - block_info.get_before_blocks_dict()) - if not plate_can_buy: - return False, True, msg - return True, False, msg + can_buy_result = CodePlateKeyBuyManager.can_buy(code) + if can_buy_result is None: + logger_debug.warning("娌℃湁鑾峰彇鍒版澘鍧楃紦瀛橈紝灏嗚幏鍙栨澘鍧�") + yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes() + CodePlateKeyBuyManager.update_can_buy_blocks(code, + kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas, + kpl_data_manager.KPLLimitUpDataRecordManager.total_datas, + yesterday_codes, + block_info.get_before_blocks_dict()) + can_buy_result = CodePlateKeyBuyManager.can_buy(code) - # if volume_rate_info[0] < 0.4: - # return False, True, f"閲忓ぇ浜�40%鎵嶄笅鍗�,閲忔瘮锛歿volume_rate_info[0]}" - - # 鏄惁鏈塊绾垮舰鎬�(鏈塊绾垮舰鎬佹垨鑰呭ぉ閲忓ぇ闃�),10鐐瑰悗鎵嶉渶瑕佸垽鏂槸鍚︽湁K绾垮舰鎬佷笌鍒嗗�� - # if int(tool.get_now_time_str().replace(":", "")) > int("100000"): - # has_k_format = score_info[1][3][6][0] or score_info[1][3][7][0] - # if not has_k_format: - # return False, True, f"鏃燢绾垮舰鎬�" - # - # if score_index < 0: - # return False, True, f"鍒嗗�硷細{score}鏈揪鍒伴渶瑕佷拱鍏ョ殑鍒嗘暟绾�" - # return True, False, "" + if can_buy_result is None: + return False, True, "灏氭湭鑾峰彇鍒版澘鍧椾俊鎭�" + if not can_buy_result[0]: + return False, True, can_buy_result[1] + return True, False, can_buy_result[1] @classmethod def __cancel_buy(cls, code): @@ -989,11 +966,18 @@ new_add=True): if compute_end_index < compute_start_index: return + + unique_key = f"{compute_start_index}-{compute_end_index}" + if cls.__latest_process_not_order_unique_keys.get(code) == unique_key: + logger_l2_error.error(f"閲嶅澶勭悊鏁版嵁锛歝ode-{code} start_index-{compute_start_index} end_index-{compute_end_index}") + return + cls.__latest_process_not_order_unique_keys[code] = unique_key + _start_time = tool.get_now_timestamp() total_datas = local_today_datas[code] # 澶勭悊瀹夊叏绗旀暟 - cls.__buyL2SafeCountManager.compute_left_rate(code, compute_start_index, compute_end_index, total_datas, - local_today_num_operate_map.get(code)) + # cls.__buyL2SafeCountManager.compute_left_rate(code, compute_start_index, compute_end_index, total_datas, + # local_today_num_operate_map.get(code)) # 鑾峰彇涔板叆淇″彿璁$畻璧峰浣嶇疆 buy_single_index, buy_exec_index, buy_compute_index, num, count, max_num_set, buy_volume_rate = cls.__get_order_begin_pos( @@ -1065,9 +1049,7 @@ cls.__save_order_begin_data(code, buy_single_index, compute_index, compute_index, buy_nums, buy_count, max_num_set_new, cls.volume_rate_info[code][0]) - l2_log.debug(code, "__save_order_begin_data") cls.__LimitUpTimeManager.save_limit_up_time(code, total_datas[compute_index]["val"]["time"]) - l2_log.debug(code, "save_limit_up_time") cls.__TradePointManager.delete_buy_cancel_point(code) l2_log.debug(code, "delete_buy_cancel_point") # 鐩存帴涓嬪崟 @@ -1094,7 +1076,6 @@ def __get_order_begin_pos(cls, code): buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate = cls.__TradePointManager.get_buy_compute_start_data_cache( code) - logger_debug.info(f"鑾峰彇涔板叆鎵ц浣嶇疆淇℃伅{code}:{buy_single_index}-{buy_exec_index}-{compute_index}-{num}-{count}") return buy_single_index, buy_exec_index, compute_index, num, count, max_num_set, volume_rate # 淇濆瓨涓嬪崟璧峰淇″彿 @@ -1174,10 +1155,6 @@ @classmethod def __sum_buy_num_for_order_3(cls, code, compute_start_index, compute_end_index, origin_num, origin_count, threshold_money, buy_single_index, max_num_set): - def get_threshold_count(): - count = threshold_count - return count - _start_time = t.time() total_datas = local_today_datas[code] # is_first_code = gpcode_manager.FirstCodeManager().is_in_first_record_cache(code) @@ -1235,9 +1212,9 @@ # 鍙粺璁�59涓囦互涓婄殑閲戦 buy_nums += int(_val["num"]) * int(total_datas[i]["re"]) buy_count += int(total_datas[i]["re"]) - if buy_nums >= threshold_num and buy_count >= get_threshold_count(): - logger_l2_trade_buy.info( - f"{code}鑾峰彇鍒颁拱鍏ユ墽琛岀偣锛歿i} 缁熻绾拱鎵嬫暟锛歿buy_nums} 鐩爣绾拱鎵嬫暟锛歿threshold_num} 缁熻绾拱鍗曟暟锛歿buy_count} 鐩爣绾拱鍗曟暟锛歿get_threshold_count()}, 澶у崟鏁伴噺锛歿len(max_buy_num_set)}") + if buy_nums >= threshold_num and buy_count >= threshold_count: + async_log_util.info(logger_l2_trade_buy, + f"{code}鑾峰彇鍒颁拱鍏ユ墽琛岀偣锛歿i} 缁熻绾拱鎵嬫暟锛歿buy_nums} 鐩爣绾拱鎵嬫暟锛歿threshold_num} 缁熻绾拱鍗曟暟锛歿buy_count} 鐩爣绾拱鍗曟暟锛歿threshold_count}, 澶у崟鏁伴噺锛歿len(max_buy_num_set)}") elif L2DataUtil.is_limit_up_price_buy_cancel(_val): if _val["num"] >= bigger_num: # 鍙粺璁�59涓囦互涓婄殑閲戦 @@ -1276,13 +1253,13 @@ for i in max_buy_num_set: max_buy_num_set_count += total_datas[i]["re"] # 鏈夋挙鍗曚俊鍙凤紝涓斿皬浜庨槇鍊� - if buy_nums >= threshold_num and buy_count >= get_threshold_count() and trigger_buy and max_buy_num_set_count >= big_num_count: + if buy_nums >= threshold_num and buy_count >= threshold_count and trigger_buy and max_buy_num_set_count >= big_num_count: return i, buy_nums, buy_count, None, max_buy_num_set l2_log.buy_debug(code, "灏氭湭鑾峰彇鍒颁拱鍏ユ墽琛岀偣锛岃捣濮嬭绠椾綅缃細{} 缁熻绾拱鎵嬫暟锛歿} 鐩爣绾拱鎵嬫暟锛歿} 缁熻绾拱鍗曟暟锛歿} 鐩爣绾拱鍗曟暟锛歿} 澶у崟鏁伴噺锛歿} 鐩爣澶у崟鏁伴噺锛歿}", compute_start_index, buy_nums, - threshold_num, buy_count, get_threshold_count(), max_buy_num_set_count, big_num_count) + threshold_num, buy_count, threshold_count, max_buy_num_set_count, big_num_count) return None, buy_nums, buy_count, None, max_buy_num_set -- Gitblit v1.8.0