# 即将成交 from code_attribute import gpcode_manager import l2 import l2_data_util from l2.l2_data_util import L2DataUtil from log_module import async_log_util from log_module.log import logger_kp_msg from msg import push_msg_manager from utils import output_util, tool # 即将成交 def almost_deal(code, real_order_index, trade_index): total_datas = l2.l2_data_util.local_today_datas.get(code) if trade_index > real_order_index: return # 下单3s过后再提醒 if tool.trade_time_sub(total_datas[-1]["val"]["time"], total_datas[real_order_index]["val"]["time"]) <= 5: return total_left_count = 0 total_left_money = 0 for i in range(trade_index + 1, real_order_index): data = total_datas[i] val = data["val"] if not L2DataUtil.is_limit_up_price_buy(val): continue if val["num"] * float(val["price"]) < 5000: continue left_count = l2.l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_no_canceled_count_v2(code, i, total_datas, l2.l2_data_util.local_today_canceled_buyno_map.get( code)) if left_count > 0: total_left_count += left_count total_left_money += val["num"] * left_count * float(val["price"]) * 100 code_name = gpcode_manager.get_code_name(code) if total_left_count <= 10: push_msg_manager.push_order_almost_deal(code, code_name, real_order_index, f"剩余:{total_left_count}笔", ctype="count") async_log_util.info(logger_kp_msg, f"{code}即将成交:trade_index-{trade_index},real_order_index-{real_order_index},剩余:{total_left_count}笔,结尾:{total_datas[-1]['index']}") elif total_left_money < 1500 * 10000: push_msg_manager.push_order_almost_deal(code, code_name, real_order_index, f"剩余:{output_util.money_desc(total_left_money)}", ctype="money") async_log_util.info(logger_kp_msg, f"{code}即将成交:trade_index-{trade_index},real_order_index-{real_order_index},剩余:{total_left_money}元,结尾:{total_datas[-1]['index']}") # 真实下单位后面跟单不足 def follow_not_enough(code, buy_exec_index, real_order_index): if buy_exec_index > real_order_index: return total_datas = l2.l2_data_util.local_today_datas.get(code) # 下单3s过后再提醒 if tool.trade_time_sub(total_datas[-1]["val"]["time"], total_datas[buy_exec_index]["val"]["time"]) <= 5: return real_place_order_after_count = 0 real_place_order_after_money = 0 is_ge_code = tool.is_ge_code(code) # 统计真实下单位置后面未撤的金额 for i in range(real_order_index, total_datas[-1]["index"]): val = total_datas[i]["val"] if not L2DataUtil.is_limit_up_price_buy(val): continue # 是不是大单 if not l2_data_util.is_big_money(val, is_ge_code): continue canceled_data = l2.l2_data_source_util.L2DataSourceUtils.get_limit_up_buy_canceled_data_v2(code, i, total_datas, l2.l2_data_util.local_today_canceled_buyno_map.get( code)) if not canceled_data: real_place_order_after_count += 1 real_place_order_after_money += val["num"] * float(val["price"]) * 100 code_name = gpcode_manager.get_code_name(code) if real_place_order_after_count <= 10: push_msg_manager.push_delegate_order_danger(code, code_name, buy_exec_index, f"剩余:{real_place_order_after_count}笔", ctype="count") async_log_util.info(logger_kp_msg, f"{code}封单不足:buy_exec_index-{buy_exec_index},real_order_index-{real_order_index},剩余:{real_place_order_after_count}笔,结尾:{total_datas[-1]['index']}") if real_place_order_after_money <= 1500 * 10000: push_msg_manager.push_delegate_order_danger(code, code_name, buy_exec_index, f"剩余:{output_util.money_desc(real_place_order_after_money)}", ctype="money") async_log_util.info(logger_kp_msg, f"{code}封单不足:buy_exec_index-{buy_exec_index},real_order_index-{real_order_index},剩余:{real_place_order_after_money}元,结尾:{total_datas[-1]['index']}")