| | |
| | | # 真实下单位之前的手数 |
| | | before_nums_info = [] |
| | | before_canceled_nums_info = [] |
| | | dealing_info = HuaXinBuyOrderManager.get_dealing_order_info(code) |
| | | for wi in watch_indexes: |
| | | data = total_data[wi] |
| | | val = data["val"] |
| | | cancel_data = L2DataComputeUtil.is_canceled(code, wi, total_data, canceled_buyno_map, trade_index, |
| | | cancel_data = L2DataComputeUtil.is_canceled(code, wi, total_data, canceled_buyno_map, dealing_info[0] if dealing_info else None, |
| | | deal_order_nos) |
| | | if str(wi) in after_place_order_index_dict: |
| | | # 真实下单位置之后的按照权重比例来计算 |
| | |
| | | rate = round(canceled_num / total_num, 3) |
| | | return rate, canceled_data_indexes, (before_nums_info, before_canceled_nums_info) |
| | | |
| | | def __compute_need_cancel(self, code, buy_exec_index, start_index, end_index, total_data, is_first_code, force_compute=False): |
| | | def __compute_need_cancel(self, code, buy_exec_index, start_index, end_index, total_data, is_first_code, |
| | | force_compute=False): |
| | | """ |
| | | L后撤单; |
| | | 撤单计算规则:计算撤单比例时,将真实下单位置之后的数据按权重(离下单位最近的权重越大)加入分子,不加入分母(总囊括手数)计算 |
| | |
| | | need_compute = True |
| | | break |
| | | if force_compute: |
| | | need_compute=True |
| | | need_compute = True |
| | | if need_compute: |
| | | # =====计算本批次大卖单成交量==== |
| | | sell_nos = set() |
| | |
| | | sell_nos.add(d[0]) |
| | | total_sell_nums += d[1] |
| | | # 获取正在成交的大卖单 |
| | | dealing_sell_order_info=HuaXinSellOrderStatisticManager.get_dealing_order_info(code) |
| | | if dealing_sell_order_info and dealing_sell_order_info[2]>=299e4: |
| | | dealing_sell_order_info = HuaXinSellOrderStatisticManager.get_dealing_order_info(code) |
| | | if dealing_sell_order_info and dealing_sell_order_info[2] >= 299e4: |
| | | total_sell_nums += dealing_sell_order_info[1] |
| | | total_sell_nums=total_sell_nums//100 |
| | | total_sell_nums = total_sell_nums // 100 |
| | | except Exception as e: |
| | | l2_log.l_cancel_debug(code, f"计算总卖大单出错:{str(e)}") |
| | | |
| | | # 计算撤单比例 |
| | | watch_indexes_list = list(watch_indexes) |
| | | watch_indexes_list.sort() |
| | | canceled_num = total_sell_nums # 将成交的大卖单计入已撤金额 |
| | | canceled_num = total_sell_nums # 将成交的大卖单计入已撤金额 |
| | | # 记录撤单索引 |
| | | canceled_indexes = [] |
| | | |
| | |
| | | # 如果撤单比例设置为100%就不需要计算下单位后面的订单 |
| | | need_compute_after = abs(thresh_hold_rate - 1.00) > 0.0001 |
| | | |
| | | dealing_info = HuaXinBuyOrderManager.get_dealing_order_info(code) |
| | | for wi in watch_indexes: |
| | | cancel_data = L2DataComputeUtil.is_canceled(code, wi, total_data, canceled_buyno_map, trade_index, |
| | | cancel_data = L2DataComputeUtil.is_canceled(code, wi, total_data, canceled_buyno_map, dealing_info[0] if dealing_info else None, |
| | | deal_order_nos) |
| | | if cancel_data: |
| | | if str(wi) in after_place_order_index_dict: |
| | |
| | | @return: 是否可撤单, 撤单数据 |
| | | """ |
| | | if not deal_order_list: |
| | | return False |
| | | return False,'' |
| | | # 添加成交量 |
| | | if code not in self.__total_big_sell_order_list_cache: |
| | | self.__total_big_sell_order_list_cache[code] = [] |
| | |
| | | |
| | | # 计算是否可撤单 |
| | | total_datas = local_today_datas.get(code) |
| | | return self.__compute_need_cancel(code, 0, total_datas[-1]["index"], total_datas[-1]["index"], total_datas, True, force_compute=True) |
| | | return self.__compute_need_cancel(code, 0, total_datas[-1]["index"], total_datas[-1]["index"], total_datas, |
| | | True, force_compute=True) |
| | | |
| | | # L后是否还有可能撤单 |
| | | def __is_l_down_can_cancel(self, code, buy_exec_index): |