admin
2025-06-10 568c763084b926a6f2d632b7ac65b9ec8280752f
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
# 数据管理
import datetime
import json
import os
 
from utils import tool
from utils import log_util
 
 
class CodeDataManager:
    def save_data(self, data):
        code = data["code"]
        create_at = data["created_at"]
        data["created_at"] = create_at.strftime("%Y-%m-%d %H:%M:%S")
        log_util.save_l1_data(code, data)
 
    def get_datas(self, code):
        datas = log_util.get_l1_datas(code)
        # 根据创建时间排序
        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_):
                        start_time = tool.trade_time_add_second(last_time, 3)
                        end_time = tool.trade_time_add_second(time_, -3)
                        if tool.trade_time_sub(end_time, start_time) > 0:
                            ranges.append((start_time, end_time))
            last_time = time_
        return ranges