Administrator
2025-06-03 c4ed4da4ac8b8bc24e0a3ed0e782e9248b4a511c
third_data/history_k_data_manager.py
@@ -11,6 +11,7 @@
from huaxin_client import l1_subscript_codes_manager
from log_module.log import logger_debug
from third_data import history_k_data_util
from third_data.history_k_data_util import HistoryKDatasUtils
from utils import tool, init_data_util
@@ -24,15 +25,12 @@
        for code in codes_:
            try:
                datas = init_data_util.get_volumns_by_code(code, 150)
                logger_debug.info(f"获取到的K线:{datas}")
                if datas:
                    HistoryKDataManager().save_history_bars(code, datas[0]['bob'].strftime("%Y-%m-%d"), datas)
            except Exception as e:
                logger_debug.exception(e)
    previous_trading_date = history_k_data_util.HistoryKDatasUtils.get_previous_trading_date(tool.get_now_date_str())
    if previous_trading_date is None:
        raise Exception("上一个交易日获取失败")
    latest_trading_date = history_k_data_util.get_k_bar_dead_date()
    # 刷新目标代码的自由流通量
    codes_sh, codes_sz = l1_subscript_codes_manager.get_codes(False)
    codes = set()
@@ -42,7 +40,7 @@
        for code_byte in codes_sz:
            codes.add(code_byte.decode())
    # 获取已经更新的数据
    codes_record = HistoryKDataManager().get_history_bars_codes(previous_trading_date)
    codes_record = HistoryKDataManager().get_history_bars_codes(latest_trading_date)
    codes = codes - codes_record
    threading.Thread(target=lambda: update(codes), daemon=True).start()
@@ -50,10 +48,13 @@
def re_set_price_pres(codes, force=False):
    day = tool.get_now_date_str()
    # 通过历史数据缓存获取
    # 获取上一个交易日
    day = HistoryKDatasUtils.get_previous_trading_date_cache(tool.get_now_date_str())
    not_codes = []
    for code in codes:
        if not tool.is_can_buy_code(code):
            continue
        pre_close = HistoryKDataManager().get_pre_close(code, day)
        if pre_close is not None:
            gpcode_manager.CodePrePriceManager.set_price_pre(code, pre_close, force)
@@ -161,6 +162,34 @@
                return datas
        return None
    def load_data(self):
        """
        加载数据
        @param day:
        @return:
        """
        day = HistoryKDatasUtils.get_previous_trading_date_cache(tool.get_now_date_str())
        cache_dir = self.__get_cache_dir()
        if not os.path.exists(cache_dir):
            return
        fs = os.listdir(cache_dir)
        for f in fs:
            if f.find(day) < 0:
                continue
            with open(os.path.join(cache_dir, f), mode='r', encoding='utf-8') as fs:
                line = fs.readline()
                if line:
                    datas = eval(line)
                    # 将日期格式转为datetime
                    for d in datas:
                        for k in d:
                            if type(d[k]) == str and d[k].find("-") > 0 and d[k].find(":") > 0 and d[k].find(" ") > 0:
                                d[k] = datetime.datetime.strptime(d[k], "%Y-%m-%d %H:%M:%S")
                    if datas:
                        if day not in self.__history_k_day_datas:
                            self.__history_k_day_datas[day] = {}
                        self.__history_k_day_datas[day][datas[0]['sec_id']] = datas
    def get_pre_close(self, code, day):
        """
        获取之前的收盘价
@@ -187,3 +216,7 @@
                if file.find(day) >= 0:
                    codes.add(file.split("_")[1][:6])
        return codes
if __name__ == "__main__":
    print(HistoryKDataManager().get_history_bars_codes("2024-12-31"))