Administrator
2024-11-06 a53ab43591e80223e736261a3cd6fbebb7ae4e55
third_data/kpl_data_constant.py
@@ -3,9 +3,9 @@
from db import redis_manager_delegate as redis_manager
from db.redis_manager_delegate import RedisUtils
from utils import tool
from utils.kpl_data_db_util import KPLLimitUpDataUtil
# 用于计算激进买开1的板数:{"代码":(几版,{板块})}
open_limit_up_code_dict_for_radical_buy = None
@@ -18,6 +18,8 @@
    __limit_up_reasons_dict = {}
    # 涨停推荐原因
    __limit_up_recommend_reasons_dict = {}
    # 激进买的原因
    __radical_buy_reasons_dict = {}
    __instance = None
@@ -49,6 +51,35 @@
        for code in limit_up_recommend_block_dict:
            cls.__limit_up_recommend_reasons_dict[code] = set(limit_up_recommend_block_dict[code])
        # 加载为扫入买匹配的代码板块
        kpl_results = KPLLimitUpDataUtil.get_latest_block_infos(min_day=tool.date_sub(tool.get_now_date_str(), 365))
        kpl_block_dict = {}
        for r in kpl_results:
            if r[2] in constant.KPL_INVALID_BLOCKS:
                continue
            code = r[0]
            if code not in kpl_block_dict:
                kpl_block_dict[code] = []
            kpl_block_dict[code].append((r[2], r[1]))  # (板块, 时间)
        for code in kpl_block_dict:
            block_infos = kpl_block_dict.get(code)
            block_infos.sort(key=lambda x: x[1], reverse=True)
            temp_dict = {}  # {"板块":[出现次数, 最近出现时间]}
            for b in block_infos:
                if b[0] not in temp_dict:
                    temp_dict[b[0]] = [0, b[1]]
                temp_dict[b[0]][0] += 1
            temp_list = [(k, temp_dict[k][0], temp_dict[k][1]) for k in temp_dict]
            # 按照涨停次数与最近涨停时间排序
            temp_list.sort(key=lambda x: (x[1], x[2]), reverse=True)
            blocks = {temp_list[0][0]}
            if len(temp_list) > 1:
                if temp_list[1][1] >= 2:
                    blocks.add(temp_list[1][0])
            cls.__radical_buy_reasons_dict[code] = blocks
    def get_limit_up_reasons(self, code):
        """
        获取涨停原因
@@ -72,6 +103,14 @@
            blocks |= self.__limit_up_recommend_reasons_dict[code]
        return blocks
    def get_radical_buy_blocks(self, code):
        """
        获取涨停买判断的板块
        @param code:
        @return:
        """
        return self.__radical_buy_reasons_dict.get(code)
class TodayLimitUpReasonChangeManager:
    """