Administrator
2024-05-21 febdf14b1884ffae862f5d7139cd2b7053d73750
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
"""
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 or real_place_order_index == i:
            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
                has_real_order_index = True
            elif num * float(val['price']) >= 29900:
                type_ = 2
 
            fresults.append((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