| | |
| | | # 最小金额 |
| | | L_CANCEL_MIN_MONEY = 50 |
| | | |
| | | # 小金额订单数量 |
| | | L_CANCEL_MIN_MONEY_COUNT = 2 |
| | | |
| | | # 大金额 |
| | | L_CANCEL_BIG_MONEY = 100 |
| | | |
| | | # 华鑫L2的卡位数量 |
| | | HUAXIN_L2_MAX_CODES_COUNT = 50 |
| | | |
| | |
| | | |
| | | processed_index, cancel_num = self.__get_compute_data_cache(code) |
| | | |
| | | |
| | | # 获取下单次数 |
| | | cancel_rate_threshold = self.__hCancelParamsManager.get_cancel_rate(volume_index) |
| | | process_index = start_index |
| | |
| | | val = data["val"] |
| | | if L2DataUtil.is_limit_up_price_buy_cancel(val): |
| | | # 查询买入位置 |
| | | l2_log.cancel_debug(code,"查询买入位置开始:{}",i) |
| | | l2_log.cancel_debug(code, "查询买入位置开始:{}", i) |
| | | buy_index = l2_data_source_util.L2DataSourceUtils.get_buy_index_with_cancel_data(code, data, |
| | | local_today_num_operate_map) |
| | | l2_log.cancel_debug(code, "查询买入位置结束:{}",i) |
| | | l2_log.cancel_debug(code, "查询买入位置结束:{}", i) |
| | | if buy_index is not None and buy_index in watch_indexs_dict: |
| | | has_watch_canceled = True |
| | | cancel_num += data["re"] * val["num"] |
| | |
| | | return |
| | | |
| | | watch_indexes = set() |
| | | # 小金额 |
| | | watch_indexes_small_money = set() |
| | | for i in range(index + 1, total_data[-1]["index"] + 1): |
| | | data = total_data[i] |
| | | val = data['val'] |
| | | if not L2DataUtil.is_limit_up_price_buy(val): |
| | | continue |
| | | if val["num"] * float(val["price"]) <= constant.L_CANCEL_MIN_MONEY * 100: |
| | | money = val["num"] * float(val["price"]) |
| | | if money <= constant.L_CANCEL_MIN_MONEY * 100: |
| | | continue |
| | | is_small_money = money < constant.L_CANCEL_BIG_MONEY * 100 |
| | | |
| | | if len( |
| | | watch_indexes_small_money) >= constant.L_CANCEL_MIN_MONEY_COUNT and is_small_money: |
| | | # 小金额的个数已满 |
| | | continue |
| | | |
| | | cancel_datas = local_today_num_operate_map.get( |
| | | "{}-{}-{}".format(val["num"], "1", val["price"])) |
| | | canceled = False |
| | |
| | | break |
| | | if not canceled: |
| | | watch_indexes.add(i) |
| | | if is_small_money: |
| | | # 添加小金额 |
| | | watch_indexes_small_money.add(i) |
| | | |
| | | if len(watch_indexes) >= constant.L_CANCEL_MAX_WATCH_COUNT: |
| | | break |
| | | logger_l2_l_cancel.info(f"{code}:设置监听范围,成交进度-{index} 监听范围-{watch_indexes}") |
| | |
| | | # 计算监听的总条数 |
| | | total_num = 0 |
| | | for wi in watch_indexes: |
| | | total_num += total_data[wi]["re"]*int(total_data[wi]["val"]["num"]) |
| | | total_num += total_data[wi]["re"] * int(total_data[wi]["val"]["num"]) |
| | | # 判断撤单中是否有监听中的索引 |
| | | need_compute = False |
| | | for i in range(start_index, end_index + 1): |
| | |
| | | filter=lambda record: record["extra"].get("name") == "l_cancel", |
| | | rotation="00:00", compression="zip", enqueue=True) |
| | | |
| | | logger.add(self.get_path("l2", "cancel/g_cancel"), |
| | | filter=lambda record: record["extra"].get("name") == "g_cancel", |
| | | rotation="00:00", compression="zip", enqueue=True) |
| | | |
| | | logger.add(self.get_path("l2", "cancel/d_cancel"), |
| | | filter=lambda record: record["extra"].get("name") == "d_cancel", |
| | | rotation="00:00", compression="zip", enqueue=True) |
| | |
| | | logger_l2_h_cancel = __mylogger.get_logger("h_cancel") |
| | | logger_l2_d_cancel = __mylogger.get_logger("d_cancel") |
| | | logger_l2_l_cancel = __mylogger.get_logger("l_cancel") |
| | | logger_l2_g_cancel = __mylogger.get_logger("g_cancel") |
| | | logger_l2_trade_buy = __mylogger.get_logger("l2_trade_buy") |
| | | logger_l2_trade_queue = __mylogger.get_logger("l2_trade_queue") |
| | | logger_l2_trade_buy_queue = __mylogger.get_logger("l2_trade_buy_queue") |
| | |
| | | from l2.l2_data_manager_new import L2TradeDataProcessor |
| | | from log_module import async_log_util |
| | | from log_module.log import hx_logger_l2_upload, hx_logger_contact_debug, hx_logger_trade_callback, \ |
| | | hx_logger_l2_orderdetail, hx_logger_l2_transaction, hx_logger_l2_market_data, logger_l2_trade_buy_queue |
| | | hx_logger_l2_orderdetail, hx_logger_l2_transaction, hx_logger_l2_market_data, logger_l2_trade_buy_queue, \ |
| | | logger_l2_g_cancel |
| | | from third_data import block_info, kpl_api, kpl_data_manager |
| | | from third_data.code_plate_key_manager import KPLCodeJXBlockManager, CodePlateKeyBuyManager |
| | | from third_data.history_k_data_util import JueJinApi, HistoryKDatasUtils |
| | |
| | | code = data["code"] |
| | | timestamp = data.get("time") |
| | | datas = data["data"] |
| | | async_log_util.info(hx_logger_l2_orderdetail,f"{code}#{timestamp}->{int(time.time()*1000)}#{datas}") |
| | | async_log_util.info(hx_logger_l2_orderdetail, |
| | | f"{code}#耗时:{int(time.time() * 1000) - timestamp}#{datas}") |
| | | l2_log.threadIds[code] = random.randint(0, 100000) |
| | | l2_data_manager_new.L2TradeDataProcessor.process_huaxin(code, datas) |
| | | finally: |
| | |
| | | data = data_json["data"] |
| | | code = data["code"] |
| | | order_no = data["data"] |
| | | hx_logger_l2_upload.info(f"{code}-正在成交的订单撤单,order_no:{order_no}") |
| | | # buyno_map = l2_data_util.local_today_buyno_map.get(code) |
| | | # if buyno_map: |
| | | # l2_data = buyno_map.get(order_no) |
| | | # buyno_map.get(order_no) |
| | | # 执行撤单 |
| | | logger_l2_g_cancel.info(f"{code}-正在成交的订单撤单,order_no:{order_no}") |
| | | l2_data_manager_new.L2TradeDataProcessor.cancel_buy(code, "G撤撤单", "G撤") |
| | | else: |
| | | # 断开连接 |