New file |
| | |
| | | """ |
| | | L2数据输出工具 |
| | | """ |
| | | from l2 import l2_data_util, l2_data_source_util |
| | | from l2.l2_data_util import L2DataUtil, local_today_canceled_buyno_map |
| | | from l2.l2_transaction_data_manager import HuaXinBuyOrderManager |
| | | from l2.transaction_progress import TradeBuyQueue |
| | | |
| | | |
| | | def __get_trade_queue(code, start_index, end_index, real_place_order_index, max_count, step=1): |
| | | fresults = [] |
| | | # 正在成交的数据 |
| | | dealing_info = HuaXinBuyOrderManager.get_dealing_order_info(code) |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | for i in range(start_index, end_index, step): |
| | | data = total_datas[i] |
| | | val = data['val'] |
| | | if not L2DataUtil.is_limit_up_price_buy(val): |
| | | continue |
| | | if val["num"] * float(val['price']) < 5000 and real_place_order_index != i: |
| | | continue |
| | | left_count = l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i, |
| | | total_datas, |
| | | local_today_canceled_buyno_map.get( |
| | | code)) |
| | | if left_count > 0: |
| | | type_ = 0 |
| | | num = val['num'] |
| | | if dealing_info and str(total_datas[i]["val"]["orderNo"]) == str( |
| | | dealing_info[0]): |
| | | # 减去当前正在成交的数据中已经成交了的数据 |
| | | num -= dealing_info[1] // 100 |
| | | if i == real_place_order_index: |
| | | type_ = 1 |
| | | elif num * float(val['price']) >= 29900: |
| | | type_ = 2 |
| | | |
| | | fresults.append((val['num'], type_)) |
| | | if len(fresults) > max_count: |
| | | break |
| | | return fresults |
| | | |
| | | |
| | | def get_trade_queue_at_near_place_order(code, real_place_order_index, max_count): |
| | | """ |
| | | 获取真实下单位附近的成交队列 |
| | | @param code: |
| | | @param real_place_order_index: |
| | | @param max_count: |
| | | @return: |
| | | """ |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | trade_index, is_default = TradeBuyQueue().get_traded_index(code) |
| | | if trade_index is None: |
| | | trade_index = 0 |
| | | threshold_before_count = max_count // 2 |
| | | |
| | | fresults = __get_trade_queue(code, real_place_order_index, trade_index - 1,real_place_order_index, threshold_before_count, -1) |
| | | fresults.reverse() |
| | | fresults.extend(__get_trade_queue(code, real_place_order_index+1, total_datas[-1]['index'] + 1, real_place_order_index, max_count - threshold_before_count, 1)) |
| | | return fresults |
| | | |
| | | |
| | | def get_trade_queue(code, real_place_order_index, max_count): |
| | | """ |
| | | 获取真实下单位附近的成交队列 |
| | | @param code: |
| | | @param real_place_order_index: |
| | | @param max_count: |
| | | @return: |
| | | """ |
| | | total_datas = l2_data_util.local_today_datas.get(code) |
| | | trade_index, is_default = TradeBuyQueue().get_traded_index(code) |
| | | if trade_index is None: |
| | | trade_index = 0 |
| | | # 前面最多取5条数据 |
| | | fresults = [] |
| | | fresults.extend(__get_trade_queue(code, trade_index, total_datas[-1]['index'] + 1,real_place_order_index, max_count, 1)) |
| | | return fresults |
| | | |
| | | |
| | | |
| | | |
| | |
| | | import time |
| | | |
| | | from l2 import l2_data_util |
| | | |
| | | def money_desc(money): |
| | | if abs(money) > 100000000: |
| | |
| | | if timestamp: |
| | | return time.strftime("%H:%M:%S", time.localtime(int(timestamp))) |
| | | return "" |
| | | |
| | | |
| | |
| | | hx_logger_l2_orderdetail, hx_logger_l2_transaction, hx_logger_l2_market_data, logger_l2_g_cancel, logger_debug, \ |
| | | logger_system, logger_trade, logger_trade_position_api_request, logger_request_api, \ |
| | | logger_local_huaxin_l1_trade_info, logger_real_place_order_position, logger_l2_trade_buy |
| | | from output import l2_output_util |
| | | from third_data import block_info, kpl_data_manager, kpl_util |
| | | from third_data.code_plate_key_manager import KPLCodeJXBlockManager, CodePlateKeyBuyManager |
| | | from third_data.history_k_data_util import JueJinApi, HistoryKDatasUtils |
| | |
| | | if int(c["direction"]) != huaxin_util.TORA_TSTP_D_Buy: |
| | | continue |
| | | code = c["securityID"] |
| | | orderSysID = c.get("orderSysID") |
| | | code_name = gpcode_manager.get_code_name(code) |
| | | # 获取下单位置信息 |
| | | order_begin_pos = TradePointManager().get_buy_compute_start_data_cache(code) |
| | |
| | | break |
| | | except: |
| | | pass |
| | | fdata = {"code_info": (code, code_name), "total_num": total_nums, |
| | | fdata = {"id":orderSysID, "code_info": (code, code_name), "total_num": total_nums, |
| | | "finish_num": deal_or_cancel_num, |
| | | "buy1_money": output_util.money_desc(buy1_money), |
| | | "big_num_count": total_big_count, |
| | |
| | | total_left_num * float(limit_up_price) * 100 * 100 / buy1_money, 2), # 成交进度比例 |
| | | "limit_up_price": float(gpcode_manager.get_limit_up_price(code)), |
| | | "is_near_big_order": is_near_big_order, |
| | | "block": '' |
| | | "block": '', |
| | | "trade_queue": [] |
| | | } |
| | | # 获取当前板块 |
| | | try: |
| | | can_buy_result = CodePlateKeyBuyManager.can_buy(code) |
| | | if can_buy_result and can_buy_result[0]: |
| | | fdata['block'] = ",".join(can_buy_result[0]) |
| | | except: |
| | | pass |
| | | |
| | | try: |
| | | real_place_order_index = SCancelBigNumComputer().get_real_place_order_index_cache(code) |
| | | if real_place_order_index is not None: |
| | | trade_queue = l2_output_util.get_trade_queue_at_near_place_order(code, |
| | | real_place_order_index, |
| | | 11) |
| | | fdata['trade_queue'] = trade_queue |
| | | except: |
| | | pass |
| | | fdatas.append(fdata) |
| | |
| | | # 修复任务 |
| | | kpl_data_manager.PullTask.repaire_pull_task() |
| | | self.send_response({"code": 0, "data": {}}, client_id, request_id) |
| | | elif ctype == "get_trade_queue": |
| | | code = data["code"] |
| | | real_place_order_index = SCancelBigNumComputer().get_real_place_order_index_cache(code) |
| | | if real_place_order_index is not None: |
| | | trade_queue = l2_output_util.get_trade_queue(code,real_place_order_index, 11) |
| | | self.send_response({"code": 0, "data": trade_queue}, client_id, request_id) |
| | | else: |
| | | raise Exception("没获取到真实下单位") |
| | | except Exception as e: |
| | | logging.exception(e) |
| | | self.send_response({"code": 1, "msg": f"数据处理出错:{e}"}, client_id, request_id) |