| | |
| | | # L撤 |
| | | L_CANCEL_MAX_WATCH_COUNT = 15 |
| | | # 撤单比例 |
| | | L_CANCEL_RATE = 0.6 |
| | | L_CANCEL_RATE = 0.69 |
| | | # 最小金额 |
| | | L_CANCEL_MIN_MONEY = 98 |
| | | |
| | |
| | | return False, None |
| | | watch_indexes = set([int(i) for i in watch_indexes]) |
| | | # 计算监听的总条数 |
| | | total_count = 0 |
| | | total_num = 0 |
| | | for wi in watch_indexes: |
| | | total_count += total_data[wi]["re"] |
| | | total_num += total_data[wi]["re"]*int(total_data[wi]["val"]["num"]) |
| | | # 判断撤单中是否有监听中的索引 |
| | | need_compute = False |
| | | for i in range(start_index, end_index + 1): |
| | |
| | | break |
| | | if need_compute: |
| | | # 计算撤单比例 |
| | | canceled_count = 0 |
| | | canceled_num = 0 |
| | | for wi in watch_indexes: |
| | | left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count(code, |
| | | wi, |
| | | total_data, |
| | | local_today_num_operate_map) |
| | | canceled_count += (total_data[wi]["re"] - left_count) |
| | | rate = round(canceled_count / total_count, 3) |
| | | logger_l2_l_cancel.info(f"计算范围:{start_index}-{end_index},已撤单比例:{rate}") |
| | | canceled_num += (total_data[wi]["re"] - left_count) * int(total_data[wi]["val"]["num"]) |
| | | rate = round(canceled_num / total_num, 3) |
| | | logger_l2_l_cancel.info(f"{code}:计算范围:{start_index}-{end_index},已撤单比例:{rate}") |
| | | if rate >= constant.L_CANCEL_RATE: |
| | | return True, total_data[-1] |
| | | |
| | |
| | | l2_data_manager.add_to_l2_fixed_codes(code) |
| | | # 记录下单的那一帧图片的截图时间与交易用时 |
| | | trade_data_manager.TradeBuyDataManager().set_buy_position_info(code, capture_timestamp, use_time, last_data, |
| | | last_data_index) |
| | | last_data_index) |
| | | |
| | | print("买入结束") |
| | | logger_trade.info("{}买入成功".format(code)) |
| | |
| | | # 设置下单状态的代码为已委托 |
| | | if trade_state == TRADE_STATE_BUY_PLACE_ORDER: |
| | | CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_DELEGATED) |
| | | ing_codes = CodesTradeStateManager().get_codes_by_trade_state(TRADE_STATE_BUY_CANCEL_ING) |
| | | if ing_codes is not None: |
| | | for code in ing_codes: |
| | | if code in codes: |
| | | # 强制重新取消 |
| | | start_cancel_buy(code, True) |
| | | else: |
| | | CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_CANCEL_SUCCESS) |
| | | l2_data_manager.remove_from_l2_fixed_codes(code) |
| | | if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN: |
| | | ing_codes = CodesTradeStateManager().get_codes_by_trade_state(TRADE_STATE_BUY_CANCEL_ING) |
| | | if ing_codes is not None: |
| | | for code in ing_codes: |
| | | if code in codes: |
| | | # 强制重新取消 |
| | | start_cancel_buy(code, True) |
| | | else: |
| | | CodesTradeStateManager().set_trade_state(code, TRADE_STATE_BUY_CANCEL_SUCCESS) |
| | | l2_data_manager.remove_from_l2_fixed_codes(code) |
| | | |
| | | |
| | | def __clear_data(code): |