Administrator
2023-07-19 3e96eb6ec6e8c71ffdabe9f76ad1a3db301e749e
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
"""
成交大单管理
"""
import json
 
from utils import tool
from db import redis_manager
from l2 import l2_data_util, l2_data_source_util
 
__last_progress = {}
__redisManager = redis_manager.RedisManager(2)
 
 
def __get_redis():
    return __redisManager.getRedis()
 
 
def __get_cancel_data(code, buy_data, local_today_num_operate_map):
    val = buy_data['val']
    cancel_datas = local_today_num_operate_map.get(
        "{}-{}-{}".format(val["num"], "1", val["price"]))
    if cancel_datas:
        for cancel_data in cancel_datas:
            buy_index = l2_data_source_util.L2DataSourceUtils.get_buy_index_with_cancel_data(code, cancel_data,
                                                                                             local_today_num_operate_map)
            if buy_index == buy_data["index"]:
                return cancel_data
    return None
 
 
def __save_traded_index(code, index):
    __get_redis().sadd(f"deal_indexes-{code}", index)
    __get_redis().expire(f"deal_indexes-{code}", tool.get_expire())
 
 
def __get_traded_indexes(code):
    return __get_redis().smembers(f"deal_indexes-{code}")
 
 
# 获取成交的索引
def get_traded_indexes(code):
    return __get_traded_indexes(code)
 
# 获取成交计算进度
def __get_deal_compute_progress(code):
    val = __get_redis().get(f"deal_compute_info-{code}")
    if val is None:
        return -1, 0
    val = json.loads(val)
    return val[0], val[1]
 
 
# 设置成交进度
def __set_deal_compute_progress(code, index, money):
    __get_redis().setex(f"deal_compute_info-{code}", tool.get_expire(), json.dumps((index, money)))
 
 
# 设置成交进度
def set_trade_progress(code, progress, total_data, local_today_num_operate_map):
    if __last_progress.get(code) == progress:
        return
    __last_progress[code] = progress
    # 计算从开始位置到成交位置
    c_index, deal_num = __get_deal_compute_progress(code)
    process_index = c_index
    for i in range(c_index + 1, progress):
        data = total_data[i]
        val = data['val']
        process_index = i
        # 是否有大单
        if not l2_data_util.is_big_money(val):
            continue
        if l2_data_util.L2DataUtil.is_limit_up_price_buy(val):
            # 是否已经取消
            cancel_data = __get_cancel_data(code, data, local_today_num_operate_map)
            if cancel_data is None:
                deal_num += val["num"] * data["re"]
                __save_traded_index(code, data["index"])
 
    __set_deal_compute_progress(code, process_index, deal_num)
 
 
def get_deal_big_money_num(code):
    compute_index, num = __get_deal_compute_progress(code)
    return num