| | |
| | | if not start_compute_index: |
| | | l2_log.h_cancel_debug(code, "尚未找到开始计算位置") |
| | | return |
| | | |
| | | transaction_index = self.__transaction_progress_index_dict.get(code) |
| | | if transaction_index: |
| | | # 不能计算成交进度以前的数据 |
| | | start_compute_index = max(transaction_index + 1, start_compute_index) |
| | | total_datas = local_today_datas.get(code) |
| | | |
| | | # -----------------计算H上------------------- |
| | |
| | | start_compute_index = self.__start_compute_index_dict.get(code) |
| | | if start_compute_index is None: |
| | | return False |
| | | # 成交位到开始计算位置没有买单之后 |
| | | real_place_order_index = self.__SecondCancelBigNumComputer.get_real_place_order_index_cache(code) |
| | | total_datas = local_today_datas.get(code) |
| | | if real_place_order_index and real_place_order_index > transaction_index: |
| | | # 成交位置离我们真实下单的位置只有5笔没撤的大单就需要计算H撤的囊括范围了 |
| | | total_left_count = 0 |
| | | for index in range(transaction_index + 1, real_place_order_index): |
| | | data = total_datas[index] |
| | | val = data['val'] |
| | | if not L2DataUtil.is_limit_up_price_buy(val): |
| | | continue |
| | | if float(val['price']) * val['num'] < 5000: |
| | | continue |
| | | left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, index, |
| | | total_datas, |
| | | local_today_canceled_buyno_map.get( |
| | | code)) |
| | | if left_count > 0: |
| | | total_left_count += 1 |
| | | if total_left_count > 5: |
| | | break |
| | | if total_left_count <= 5: |
| | | return True |
| | | |
| | | # 成交位到开始计算位置没有买单之后 |
| | | for index in range(transaction_index + 1, start_compute_index): |
| | | data = total_datas[index] |
| | | val = data['val'] |
| | |
| | | not_cancel_indexes.append(j) |
| | | if not_cancel_indexes: |
| | | temp_count = len(not_cancel_indexes) |
| | | # 取后1/3的数据 |
| | | temp_index = int(temp_count * 9 / 10) |
| | | if temp_index + 1 >= temp_count: |
| | | temp_index = temp_count - 1 |
| | | self.__start_compute_index_dict[code] = not_cancel_indexes[temp_index] |
| | | except Exception as e: |
| | | async_log_util.exception(logger_l2_h_cancel, e) |
| | |
| | | # self.compute_watch_index(code, self.__last_trade_progress_dict.get(code), |
| | | # self.__real_place_order_index_dict.get(code)) |
| | | |
| | | # 已经成交的索引 |
| | | def add_deal_index(self, code, index, buy_single_index): |
| | | watch_indexes = self.__get_watch_indexes_cache(code) |
| | | if not watch_indexes: |
| | | return |
| | | if index not in watch_indexes: |
| | | return |
| | | if buy_single_index is None: |
| | | return |
| | | # 重新囊括1笔 |
| | | real_place_order_index = self.__real_place_order_index_dict.get(code) |
| | | if real_place_order_index and real_place_order_index > index: |
| | | total_datas = local_today_datas.get(code) |
| | | min_num = int(5000 / (float(gpcode_manager.get_limit_up_price(code)))) |
| | | for j in range(real_place_order_index - 1, index, -1): |
| | | data = total_datas[j] |
| | | val = data['val'] |
| | | if data["index"] in watch_indexes: |
| | | continue |
| | | if not L2DataUtil.is_limit_up_price_buy(val): |
| | | continue |
| | | if val["num"] < min_num: |
| | | continue |
| | | |
| | | left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, |
| | | j, |
| | | total_datas, |
| | | local_today_canceled_buyno_map.get( |
| | | code)) |
| | | if left_count > 0: |
| | | watch_indexes.add(data["index"]) |
| | | break |
| | | # 移除当前index |
| | | watch_indexes.discard(index) |
| | | self.__set_watch_indexes(code, buy_single_index, watch_indexes) |
| | | |
| | | def __compute_need_cancel(self, code, buy_exec_index, start_index, end_index, total_data, is_first_code): |
| | | watch_indexes = self.__get_watch_indexes_cache(code) |
| | | if not watch_indexes: |