Administrator
2022-09-08 e7f8c6013d777dd5ba10b8d548d2d3db6158d37a
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
96
97
98
99
100
101
102
103
104
105
106
# l2数据工具
# 比较时间的大小
import json
 
 
def compare_time(time1, time2):
    result = int(time1.replace(":", "", 2)) - int(time2.replace(":", "", 2))
    return result
 
 
# 将key转为l2数据对象
def l2_data_key_2_obj(k, value):
    key = k.replace("l2-", "")
    split_data = key.split("-")
    code = split_data[0]
    operateType = split_data[1]
    time = split_data[2]
    num = split_data[3]
    price = split_data[4]
    limitPrice = split_data[5]
    cancelTime = split_data[6]
    cancelTimeUnit = split_data[7]
    item = {"operateType": operateType, "time": time, "num": num, "price": price, "limitPrice": limitPrice,
            "cancelTime": cancelTime, "cancelTimeUnit": cancelTimeUnit}
    json_value = json.loads(value)
    _data = {"key": key, "val": item, "re": json_value["re"], "index": int(json_value["index"])}
    return _data
 
 
# 将数据根据num-operate分类
def load_num_operate_map(local_today_num_operate_map, code, source_datas, clear=False):
    if local_today_num_operate_map.get(code) is None:
        local_today_num_operate_map[code] = {}
    if clear:
        local_today_num_operate_map[code] = {}
 
    for data in source_datas:
        key = "{}-{}".format(data["val"]["num"], data["val"]["operateType"])
        if local_today_num_operate_map[code].get(key) is None:
            local_today_num_operate_map[code].setdefault(key, [])
        local_today_num_operate_map[code].get(key).append(data)
 
 
# 减去时间
def __sub_time(time_str, seconds):
    time_seconds = get_time_as_seconds(time_str) - seconds
    h = time_seconds // 3600
    m = time_seconds % 3600 // 60
    s = time_seconds % 60
    return "{0:0>2}:{1:0>2}:{2:0>2}".format(h, m, s)
 
 
def get_time_as_seconds(time_str):
    times = time_str.split(":")
    time_seconds = int(times[0]) * 3600 + int(times[1]) * 60 + int(times[2])
    return time_seconds
 
 
 
# 计算时间的区间
def __compute_time_space_as_second(cancel_time, cancel_time_unit):
    __time = int(cancel_time)
    if int(cancel_time) == 0:
        return 0, 0
    unit = int(cancel_time_unit)
    if unit == 0:
        # 秒
        return __time, (__time + 1)
    elif unit == 1:
        # 分钟
        return __time * 60, (__time + 1) * 60
    elif unit == 2:
        # 小时
        return __time * 3600, (__time + 1) * 3600
 
 
# 根据买撤数据(与今日总的数据)计算买入数据
def get_buy_data_with_cancel_data(cancel_data, today_datas):
    # 计算时间区间
    min_space, max_space = __compute_time_space_as_second(cancel_data["val"]["cancelTime"],
                                                          cancel_data["val"]["cancelTimeUnit"])
    max_time = __sub_time(cancel_data["val"]["time"], min_space)
    min_time = __sub_time(cancel_data["val"]["time"], max_space)
 
    for data in today_datas:
        if int(data["val"]["operateType"]) != 0:
            continue
        if int(data["val"]["num"]) != int(cancel_data["val"]["num"]):
            continue
        if compare_time(data["val"]["time"], min_time) > 0 and compare_time(data["val"]["time"], max_time) <= 0:
            return data
    return None
 
 
def test(datas):
    datas["code"] = "test"
 
 
if __name__ == "__main__":
    # cancel_data = {"val": {"operateType": 1, "num": 1520, "cancelTime": 1, "cancelTimeUnit": 1, "time": "09:32:30"}}
    # today_datas=[{"val": {"operateType": 1, "num": 1520, "cancelTime": 1, "cancelTimeUnit": 0, "time": "09:32:30"}},{"val": {"operateType": 0, "num": 1520, "cancelTime": 0, "cancelTimeUnit": 0, "time": "09:31:31"}}]
    # result= get_buy_data_with_cancel_data(cancel_data,today_datas)
    # print(result)
    __datas = {}
    test(__datas)
    print(__datas)