# 数据管理
|
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
|