Administrator
2025-06-03 f82aab768e4bc361eac69e1ae69b36a9bec2970c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 即将成交
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']}")