admin
2023-04-28 c082b525b5e501dfa24038e3a85e444d88bfb1d0
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
# 数据管理
import datetime
import json
import os
 
import tool
 
 
class CodeDataManager:
    def save_data(self, data):
        code = data["code"]
        create_at = data["created_at"]
        day = create_at.strftime("%Y%m%d")
        data["created_at"] = create_at.strftime("%Y-%m-%d %H:%M:%S")
        file_path = "datas/{}_{}.txt".format(day, code)
        if not os.path.exists(file_path):
            with open(file_path, 'w', encoding="utf-8") as f:
                pass
        with open(file_path, "a", encoding="utf-8") as f:
            f.write(json.dumps(data))
            f.write("\n")
 
    def get_datas(self, code):
        day = datetime.datetime.now().strftime("%Y%m%d")
        file_path = "datas/{}_{}.txt".format(day, code)
        datas = []
        try:
            with open(file_path, "r") as f:
                while True:
                    line = f.readline()
                    if not line or len(line) == 0:
                        break
                    data = json.loads(line)
                    datas.append(data)
        except:
            pass
        # 根据创建时间排序
        datas = sorted(datas, key=lambda tup: int(tup["created_at"].split(" ")[1].replace(":", "")))
        return datas
 
    def get_lack_datas_time_range(self, datas, min_time=None):
        def is_trade_time(time_):
            if int("092500") <= int(time_.replace(":", "")) <= int("113000") or int("130000") <= int(
                    time_.replace(":", "")) <= int("150000"):
                return True
            return False
 
        ranges = []
 
        now_time_str = tool.get_now_time_str()
        if tool.trade_time_sub(now_time_str, "15:00:00") > 0:
            now_time_str = "15:00:00"
 
        if tool.trade_time_sub(now_time_str, "13:00:00") < 0 and tool.trade_time_sub(now_time_str, "11:30:00") > 0:
            now_time_str = "11:30:00"
 
        # 还没到时间
        if tool.trade_time_sub(now_time_str, "09:25:00") < 0:
            return ranges
 
        last_time = "09:25:01" if min_time is None else min_time
        # tool.trade_time_add_second(now_time_str, 0 - 18 * 60)
        # if tool.trade_time_sub(last_time, "09:25:00") < 0:
        #    last_time = "09:25:00"
 
        if len(datas) == 0:
            ranges.append((last_time, now_time_str))
            return ranges
 
        for data in datas:
            # 如果上次时间与本次时间间隔相差30s以上才补全
            time_ = data["created_at"].split(" ")[1]
            if tool.trade_time_sub(time_, last_time) < 0:
                continue
            if tool.trade_time_sub(time_, last_time) > 30:
                if len(ranges) == 0 or ranges[-1][0] != last_time:
                    if is_trade_time(last_time) and is_trade_time(time_):
                        ranges.append((tool.trade_time_add_second(last_time, 3), tool.trade_time_add_second(time_, -3)))
            last_time = time_
        return ranges