| | |
| | | thresh_cancel_rate = LCancelRateManager.get_cancel_rate(code,is_up=True) |
| | | l2_log.l_cancel_debug(code, f"计算范围:{start_index}-{end_index},成交位临近已撤单比例:{rate}/{thresh_cancel_rate}") |
| | | if rate >= thresh_cancel_rate: |
| | | # 计算成交进度位置到当前下单位置的纯买额 |
| | | real_place_order_index = self.__real_place_order_index_dict.get(code) |
| | | trade_progress_index = self.__last_trade_progress_dict.get(code) |
| | | if real_place_order_index and trade_progress_index: |
| | | total_num = 0 |
| | | thresh_hold_money = l2_trade_factor.L2PlaceOrderParamsManager.get_base_m_val(code) |
| | | thresh_hold_money = thresh_hold_money * 2 |
| | | # 阈值为2倍m值 |
| | | thresh_hold_num = thresh_hold_money // (float(gpcode_manager.get_limit_up_price(code)) * 100) |
| | | for i in range(trade_progress_index + 1, real_place_order_index): |
| | | data = total_data[i] |
| | | val = data['val'] |
| | | if not L2DataUtil.is_limit_up_price_buy(val): |
| | | continue |
| | | canceled_data = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_canceled_data_v2(code, |
| | | i, |
| | | total_data, |
| | | local_today_canceled_buyno_map.get( |
| | | code)) |
| | | if not canceled_data: |
| | | # 没有撤单 |
| | | total_num += val["num"] * data["re"] |
| | | if total_num > thresh_hold_num: |
| | | # 成交位到下单位还有足够的单没撤 |
| | | l2_log.l_cancel_debug(code, |
| | | f"L上撤阻断: 成交位-{trade_progress_index} 真实下单位-{real_place_order_index} 阈值-{thresh_hold_money}") |
| | | return False, None |
| | | |
| | | canceled_indexes.sort() |
| | | l2_log.l_cancel_debug(code, f"L上撤单,撤单位置:{canceled_indexes[-1]}") |
| | | return True, total_data[canceled_indexes[-1]] |