From deb26c8b90f9d67c340b3a757740085ac8dd5743 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期三, 09 十月 2024 00:32:20 +0800 Subject: [PATCH] 订阅特殊量/目标代码扫入板块修改/ --- l2/l2_data_manager_new.py | 195 ++---------------------------------------------- 1 files changed, 10 insertions(+), 185 deletions(-) diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py index f95763f..67bb17a 100644 --- a/l2/l2_data_manager_new.py +++ b/l2/l2_data_manager_new.py @@ -331,10 +331,20 @@ if cancel_result[0]: L2TradeDataProcessor.cancel_buy(code, f"F鎾�:{cancel_result[1]}", cancel_type=trade_constant.CANCEL_TYPE_F) + return else: l2_log.f_cancel_debug(code, f"鑾峰彇鐪熷疄鎴愪氦浣嶇殑F鎾ゆ湭鐢熸晥锛歿cancel_result[1]}") except Exception as e: logger_debug.exception(e) + # 鍒ゆ柇涓庢墽琛屼綅缃殑闂撮殧鏃堕棿 + if order_begin_pos.mode != OrderBeginPosInfo.MODE_RADICAL: + # 闈炴壂鍏ヤ笅鍗曡鍒ゆ柇鎵ц浣嶇疆涓庣湡瀹炰笅鍗曚綅鐨勯棿闅旀椂闂� + total_datas = local_today_datas.get(code) + if tool.trade_time_sub_with_ms(L2DataUtil.get_time_with_ms(total_datas[index]["val"]), L2DataUtil.get_time_with_ms(total_datas[order_begin_pos.buy_exec_index]["val"])) > 2000: + L2TradeDataProcessor.cancel_buy(code, f"鐪熷疄涓嬪崟浣�({index})涓庢墽琛屼綅({order_begin_pos.buy_exec_index})鐩稿樊2s浠ヤ笂", + cancel_type=trade_constant.CANCEL_TYPE_F) + return + # 澶勭悊鍗庨懌L2鏁版嵁 @classmethod @@ -1961,191 +1971,6 @@ continue findexes.add(index) return findexes - - # 缁熻涔板叆鍑�涔伴噺锛屼笉璁$畻鍦ㄤ拱鍏ヤ俊鍙蜂箣鍓嶇殑涔版挙鍗� - @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, at_limit_up=False): - _start_time = t.time() - total_datas = local_today_datas[code] - # is_first_code = gpcode_manager.FirstCodeManager().is_in_first_record_cache(code) - - buy_nums = origin_num - buy_count = origin_count - limit_up_price = gpcode_manager.get_limit_up_price(code) - if limit_up_price is None: - raise Exception("娑ㄥ仠浠锋棤娉曡幏鍙�") - limit_up_price = float(limit_up_price) - - threshold_num = None - # 澶х洰鏍囨墜鏁帮紙婊¤冻杩欎釜灏变笉闇�瑕佺湅瀹夊叏绗旀暟锛� - threshold_max_num = None - - # 鐩爣璁㈠崟鏁伴噺 - threshold_count = cls.__l2PlaceOrderParamsManagerDict[code].get_safe_count() - - # 鏈�澶ч棿闅旀椂闂磎s - max_space_time_ms = cls.__l2PlaceOrderParamsManagerDict[code].get_time_range() * 1000 - - # ----------------璋冩暣鏉夸笂涓嬪崟鐨刴鍊间笌瀹夊叏绗旀暟---------------- - if at_limit_up: - # 鏉夸笂涔帮紝鑾峰彇鏈�杩戜竴娆¢棯鐢典笅鍗曠殑鎬诲崠棰� - sell_data = cls.__latest_fast_place_order_info_dict.get(code) - if sell_data: - # 鏈夎繃闂數涓嬪崟 - # 鎬诲崠鐨勪竴鍗婁綔涓簃鍊� - threshold_num = int(sell_data[1] / (limit_up_price * 100)) // 2 - threshold_max_num = 1 - # 淇″彿涓轰箣鍓嶆湁寰呮垚浜ょ殑澶у崟锛堜笉鏄鍦ㄦ垚浜わ級 - trade_index, is_default = cls.__TradeBuyQueue.get_traded_index(code) - if not is_default and trade_index is not None: - temp_big_num = int(30000 / limit_up_price) - for i in range(trade_index + 1, buy_single_index): - data = total_datas[i] - val = data['val'] - if not L2DataUtil.is_limit_up_price_buy(val): - continue - # 鍒ゆ柇鏄惁鏈夊ぇ鍗曟湭鎴愪氦 - if temp_big_num > val["num"]: - continue - - left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, - data[ - "index"], - total_datas, - local_today_canceled_buyno_map.get( - code)) - if left_count > 0: - # 瀹夊叏绗旀暟涓庡泭鎷椂闂磋寖鍥翠慨鏀� - threshold_count = 3 - max_space_time_ms = 9 * 1000 - break - - if not threshold_num: - # 鐩爣鎵嬫暟 - threshold_num = round(threshold_money / (limit_up_price * 100)) - if not threshold_max_num: - threshold_max_num = int(threshold_num * 1.2) - - # place_order_count = trade_data_manager.PlaceOrderCountManager().get_place_order_count(code) - - # buy_single_time_seconds = L2DataUtil.get_time_as_second(total_datas[buy_single_index]["val"]["time"]) - - # 鍙互瑙﹀彂涔帮紝褰撴湁娑ㄥ仠涔颁俊鍙锋椂鎵嶄細瑙﹀彂涔� - trigger_buy = True - - # 濡傛灉澶у崟鍚湁鐜囧ぇ浜�50%锛屽垯鏃堕棿鍥婃嫭鑼冨洿鎻愰珮鍒�3s - if max_num_set and origin_count: - if len(max_num_set) / origin_count > 0.5: - max_space_time_ms = 3 * 1000 - - # 鏈�澶т拱閲� - max_buy_num = 0 - max_buy_num_set = set(max_num_set) - - # 闇�瑕佺殑鏈�灏忓ぇ鍗曠瑪鏁� - big_num_count = cls.__l2PlaceOrderParamsManagerDict[code].get_big_num_count() - - # 杈冨ぇ鍗曠殑鎵嬫暟 - bigger_num = round(5000 / limit_up_price) - - not_buy_msg = "" - is_ge_code = tool.is_ge_code(code) - for i in range(compute_start_index, compute_end_index + 1): - data = total_datas[i] - _val = total_datas[i]["val"] - trigger_buy = False - # 蹇呴』涓鸿繛缁�2绉掑唴鐨勬暟鎹� - if L2DataUtil.time_sub_as_ms(_val, total_datas[buy_single_index]["val"]) > max_space_time_ms: - cls.__TradePointManager.delete_buy_point(code) - if i == compute_end_index: - # 鏁版嵁澶勭悊瀹屾瘯 - return None, buy_nums, buy_count, None, max_buy_num_set, f"銆恵i}銆戜俊鍙蜂笉杩炵画锛屽泭鎷椂闂�-{max_space_time_ms}ms" - else: - # 璁$畻涔板叆淇″彿锛屼笉鑳藉悓涓�鏃堕棿寮�濮嬭绠� - for ii in range(buy_single_index + 1, compute_end_index + 1): - if total_datas[buy_single_index]["val"]["time"] != total_datas[ii]["val"]["time"]: - return None, buy_nums, buy_count, ii, max_buy_num_set, f"銆恵i}銆戜俊鍙蜂笉杩炵画锛屽泭鎷椂闂�-{max_space_time_ms}ms" - # 娑ㄥ仠涔� - if L2DataUtil.is_limit_up_price_buy(_val): - if l2_data_util.is_big_money(_val, is_ge_code): - max_buy_num_set.add(i) - if _val["num"] >= bigger_num: - trigger_buy = True - # 鍙粺璁�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 >= threshold_count) or buy_nums >= threshold_max_num: - l2_log.info(code, logger_l2_trade_buy, - f"{code}鑾峰彇鍒颁拱鍏ユ墽琛岀偣锛歿i} 缁熻绾拱鎵嬫暟锛歿buy_nums} 鐩爣绾拱鎵嬫暟锛歿threshold_num}/{threshold_max_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涓囦互涓婄殑閲戦 - # 娑ㄥ仠涔版挙 - # 鍒ゆ柇涔板叆浣嶇疆鏄惁鍦ㄤ拱鍏ヤ俊鍙蜂箣鍓� - buy_index = l2_data_source_util.L2DataSourceUtils.get_buy_index_with_cancel_data_v2(total_datas[i], - local_today_buyno_map.get( - code)) - if buy_index is not None: - # 鎵惧埌涔版挙鏁版嵁鐨勪拱鍏ョ偣 - if buy_index >= buy_single_index: - buy_nums -= int(_val["num"]) * int(data["re"]) - buy_count -= int(data["re"]) - # 澶у崟鎾ら攢 - max_buy_num_set.discard(buy_index) - l2_log.buy_debug(code, "{}鏁版嵁鍦ㄤ拱鍏ヤ俊鍙蜂箣鍚� 鎾や拱绾拱鎵嬫暟锛歿} 鐩爣鎵嬫暟锛歿}", i, buy_nums, threshold_num) - else: - l2_log.buy_debug(code, "{}鏁版嵁鍦ㄤ拱鍏ヤ俊鍙蜂箣鍓嶏紝涔板叆浣嶏細{}", i, buy_index) - if total_datas[buy_single_index]["val"]["time"] == total_datas[buy_index]["val"]["time"]: - # 鍚屼竴绉�,褰撲綔涔板叆淇″彿涔嬪悗澶勭悊 - buy_nums -= int(_val["num"]) * int(data["re"]) - buy_count -= int(data["re"]) - # 澶у崟鎾ら攢 - max_buy_num_set.discard(buy_index) - l2_log.buy_debug(code, "{}鏁版嵁涔板叆浣嶄笌棰勪及涔板叆浣嶅湪鍚屼竴绉�", i) - else: - # 鏈壘鍒颁拱鎾ゆ暟鎹殑涔板叆鐐� - l2_log.buy_debug(code, "鏈壘鍒颁拱鎾ゆ暟鎹殑涔板叆鐐�: 浣嶇疆-{} 鏁版嵁-{}", i, data) - buy_nums -= int(_val["num"]) * int(total_datas[i]["re"]) - buy_count -= int(total_datas[i]["re"]) - l2_log.buy_debug(code, "浣嶇疆-{}锛屾�绘墜鏁帮細{}锛岀洰鏍囨墜鏁帮細{}", i, - buy_nums, threshold_num) - - max_buy_num_set_count = 0 - max_buy_num_set = cls.__filter_not_deal_indexes(code, max_buy_num_set) - for i1 in max_buy_num_set: - max_buy_num_set_count += total_datas[i1]["re"] - - if buy_nums < threshold_num: - not_buy_msg = f"銆恵i}銆戠函涔伴涓嶈冻锛寋buy_nums}/{threshold_num}" - continue - - if buy_count < threshold_count: - not_buy_msg = f"銆恵i}銆戝畨鍏ㄧ瑪鏁颁笉澶燂紝{buy_count}/{threshold_count}" - continue - - if not trigger_buy: - not_buy_msg = f"銆恵i}銆戞病鏈変拱鍗曡Е鍙�" - continue - - if max_buy_num_set_count < big_num_count: - not_buy_msg = f"銆恵i}銆戝ぇ鍗曟暟閲忎笉瓒筹紝{max_buy_num_set_count}/{big_num_count}" - continue - - try: - info = cls.__trade_log_placr_order_info_dict[code] - info.set_trade_factor(threshold_money, threshold_count, list(max_buy_num_set)) - except Exception as e: - async_log_util.error(logger_l2_error, f"璁板綍浜ゆ槗鍥犲瓙鍑洪敊锛歿str(e)}") - - 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, threshold_count, max_buy_num_set_count, big_num_count) - - return None, buy_nums, buy_count, None, max_buy_num_set, not_buy_msg # 杩斿洖(涔板叆鎵ц鐐�, 鎬绘墜, 鎬荤瑪鏁�, 浠庢柊璁$畻璧风偣, 绾拱棰濋槇鍊�) # 璁$畻蹇�熶拱鍏� -- Gitblit v1.8.0