| | |
| | | class HuaXinTransactionDatasProcessor: |
| | | __statistic_thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=constant.HUAXIN_L2_MAX_CODES_COUNT + 2) |
| | | __TradeBuyQueue = transaction_progress.TradeBuyQueue() |
| | | # 非涨停成交时间 |
| | | __not_limit_up_time_dict = {} |
| | | |
| | | # 计算成交进度 |
| | | @classmethod |
| | |
| | | """ |
| | | |
| | | def statistic_big_buy_data(): |
| | | use_time_list = [] |
| | | __start_time = time.time() |
| | | buy_datas, bigger_buy_datas = HuaXinBuyOrderManager.statistic_big_buy_data(code, fdatas, limit_up_price) |
| | | use_time_list.append((time.time() - __start_time, "买单统计")) |
| | | if buy_datas: |
| | | BigOrderDealManager().add_buy_datas(code, buy_datas) |
| | | active_big_buy_orders = [] |
| | |
| | | # (买单号, 成交金额, 最后成交时间) |
| | | active_big_buy_orders.append((x[0], x[2], x[4])) |
| | | EveryLimitupBigDealOrderManager.add_big_buy_order_deal(code, active_big_buy_orders) |
| | | use_time_list.append((time.time() - __start_time, "买单统计结果处理")) |
| | | try: |
| | | is_placed_order = l2_data_manager.TradePointManager.is_placed_order(order_begin_pos) |
| | | if is_placed_order: |
| | |
| | | order_begin_pos.buy_single_index) |
| | | except Exception as e: |
| | | logger_debug.exception(e) |
| | | if use_time_list and use_time_list[-1][0] > 0.005: |
| | | l2_log.info(code, hx_logger_l2_upload, |
| | | f"买单统计+处理耗时:{use_time_list[-1][0]} 详情:{use_time_list}") |
| | | |
| | | return buy_datas |
| | | |
| | | def statistic_big_sell_data(): |
| | | use_time_list = [] |
| | | __start_time = time.time() |
| | | sell_datas = HuaXinSellOrderStatisticManager.statistic_big_sell_data(code, fdatas) |
| | | if sell_datas: |
| | | BigOrderDealManager().add_sell_datas(code, sell_datas) |
| | | use_time_list.append((time.time() - __start_time, "卖单统计")) |
| | | if use_time_list and use_time_list[-1][0] > 0.005: |
| | | l2_log.info(code, hx_logger_l2_upload, |
| | | f"卖单统计+处理耗时:{use_time_list[-1][0]} 详情:{use_time_list}") |
| | | return sell_datas |
| | | |
| | | def statistic_big_data(f1_, f2_): |
| | |
| | | |
| | | limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) |
| | | |
| | | if len(fdatas) > 100: |
| | | if False and len(fdatas) > 100: |
| | | # 并行处理买单与卖单 |
| | | # 超过100条数据才需要并行处理 |
| | | f1 = dask.delayed(statistic_big_buy_data)() |
| | |
| | | temp_time_dict.clear() |
| | | |
| | | __start_time = time.time() |
| | | limit_up_price = gpcode_manager.get_limit_up_price_as_num(code) |
| | | # 设置成交价 |
| | | try: |
| | | current_price_process_manager.set_trade_price(code, fdatas[-1][0][1]) |
| | | if limit_up_price > fdatas[-1][0][1]: |
| | | # 没有涨停 |
| | | EveryLimitupBigDealOrderManager.open_limit_up(code, f"最新成交价:{fdatas[-1][0][1]}") |
| | | radical_buy_strategy.clear_data(code) |
| | | except: |
| | | pass |
| | | if not fdatas[-1][2]: |
| | | if code not in cls.__not_limit_up_time_dict: |
| | | cls.__not_limit_up_time_dict[code] = fdatas[-1][5] |
| | | last_time = cls.__not_limit_up_time_dict[code] |
| | | # 炸板时间持续500ms以上算炸板 |
| | | if tool.trade_time_sub_with_ms(fdatas[-1][5], last_time) > 500: |
| | | # 没有涨停 |
| | | EveryLimitupBigDealOrderManager.open_limit_up(code, f"最新成交价:{fdatas[-1][0][1]}") |
| | | radical_buy_strategy.clear_data(code, msg=f"没有涨停:{fdatas[-1][0]}") |
| | | else: |
| | | if code in cls.__not_limit_up_time_dict: |
| | | cls.__not_limit_up_time_dict.pop(code) |
| | | except Exception as e: |
| | | async_log_util.error(logger_debug, f"L2成交开板计算错误:{str(e)}") |
| | | |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | use_time_list = [] |
| | |
| | | _start_time = time.time() |
| | | |
| | | try: |
| | | last_data = fdatas[-1] |
| | | # 统计上板时间 |
| | | try: |
| | | for d in fdatas: |
| | | if d[1]: |
| | | # 主动买 |
| | | if d[2]: |
| | | # 涨停 |
| | | current_price_process_manager.set_latest_not_limit_up_time(code, d[5]) |
| | | else: |
| | | # 主动卖(板上) |
| | | if d[2]: |
| | | L2LimitUpSellDataManager.clear_data(code) |
| | | break |
| | | except: |
| | | pass |
| | | if last_data[1] and last_data[2]: |
| | | current_price_process_manager.set_latest_not_limit_up_time(code, last_data[5]) |
| | | if not last_data[1] and last_data[2]: |
| | | L2LimitUpSellDataManager.clear_data(code) |
| | | big_sell_order_info = None |
| | | # 统计卖单 |
| | | big_sell_order_info = HuaXinSellOrderStatisticManager.statistic_continue_limit_up_sell_transaction_datas( |