| | |
| | | """ |
| | | import time |
| | | |
| | | import constant |
| | | from huaxin_client import constant as huaxin_client_constant |
| | | from l2 import l2_data_util, l2_data_source_util |
| | | from l2.huaxin import l2_huaxin_util |
| | |
| | | 真实下单位管理 |
| | | """ |
| | | __place_order_info_dict = {} |
| | | # 真实下单位置 |
| | | __place_order_position = {} |
| | | |
| | | # 获取下单信息 |
| | | @classmethod |
| | |
| | | order_time = order_info[2] |
| | | estimate_time_space = 1 if tool.is_sz_code(code) else 2.5 |
| | | place_order_data = cls.__compute_real_place_order_position(code, exec_data, order_info_list, add_datas) |
| | | real_place_index_info = None |
| | | if place_order_data: |
| | | return place_order_data["index"], order_info, RELIABILITY_TYPE_REAL |
| | | real_place_index_info = place_order_data["index"], RELIABILITY_TYPE_REAL |
| | | elif tool.trade_time_sub(add_datas[-1]['val']['time'], |
| | | exec_data['val']['time']) >= estimate_time_space and time.time() - order_time > 5: |
| | | estimate_index = cls.__compute_estimate_order_position(code, exec_data["index"], order_info_list[-1][1], |
| | | order_info_list[-1][0]) |
| | | if estimate_index: |
| | | return estimate_index, order_info, RELIABILITY_TYPE_ESTIMATE |
| | | return None, order_info, None |
| | | real_place_index_info = estimate_index, RELIABILITY_TYPE_ESTIMATE |
| | | |
| | | if real_place_index_info: |
| | | # 获取到了下单位置 |
| | | async_log_util.info(hx_logger_trade_debug, f"真实下单位置:{code}-{real_place_index_info}") |
| | | async_log_util.info(logger_real_place_order_position, |
| | | f"真实下单位置:{code}-{real_place_index_info}-{0}") |
| | | if code in cls.__place_order_info_dict: |
| | | cls.__place_order_info_dict.pop(code) |
| | | cls.__place_order_position[code] = real_place_index_info[0] |
| | | return real_place_index_info[0], order_info, real_place_index_info[1] |
| | | else: |
| | | return None, order_info, None |
| | | |
| | | @classmethod |
| | | def recompute_for_slow_time(cls, code, order_info, real_place_index, compute_type): |
| | |
| | | # TODO 重新计算, 根据实际订单来计算 |
| | | pass |
| | | |
| | | # 计算预估下单位 |
| | | @classmethod |
| | | def get_place_order_position(cls, code): |
| | | return cls.__place_order_position.get(code) |
| | | |
| | | @classmethod |
| | | def set_place_order_position(cls, code, index): |
| | | cls.__place_order_position[code] = index |
| | | |
| | | |
| | | def __compute_estimate_order_position(code, exec_buy_index, shadow_price, shadow_volume): |
| | |
| | | |
| | | # 获取真实下单位置 |
| | | def get_place_order_position(code): |
| | | if constant.IS_NEW_VERSION_PLACE_ORDER: |
| | | return RealDelegateOrderPositionManager.get_place_order_position(code) |
| | | return __place_order_position.get(code) |
| | | |
| | | |
| | | def set_place_order_position(code, index): |
| | | __place_order_position[code] = index |
| | | if constant.IS_NEW_VERSION_PLACE_ORDER: |
| | | RealDelegateOrderPositionManager.set_place_order_position(code, index) |
| | | else: |
| | | __place_order_position[code] = index |