Administrator
2025-04-09 46aa2eb6b6520333cb8ebb525fd4f7f93b0be60c
新板块重新定义
4个文件已修改
93 ■■■■ 已修改文件
servers/data_server.py 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/kpl_data_constant.py 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/new_block_processor.py 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/radical_buy_data_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
servers/data_server.py
@@ -20,6 +20,7 @@
from third_data.third_blocks_manager import BlockMapManager
from trade.buy_radical import radical_buy_data_manager, new_block_processor
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
from trade.buy_radical.new_block_processor import BeforeBlocksComputer
from trade.buy_strategy import OpenLimitUpGoodBlocksBuyStrategy
from trade.buy_radical.radical_buy_data_manager import RadicalBuyBlockManager, BeforeSubDealBigOrderManager
from utils import global_util, tool, data_export_util
@@ -1135,9 +1136,11 @@
                                if b not in block_codes:
                                    block_codes[b] = set()
                                block_codes[b].add(x[3])
                        # 所有代码的涨停原因
                        reasons = set(block_codes.keys())
                        reasons -= constant.KPL_INVALID_BLOCKS
                        reasons -= LimitUpCodesBlockRecordManager().get_total_before_blocks()
                        # 原来的老题材
                        reasons -= BeforeBlocksComputer().get_old_blocks()
                        if reasons:
                            # 新板块
                            update_new_block_plates = []
third_data/kpl_data_constant.py
@@ -71,9 +71,6 @@
    # 原始数据
    __radical_buy_reasons_origin_data_dict = {}
    # 所有的涨停原因
    __all_limit_up_reasons = set()
    # 今日的新概念
    __new_blocks = set()
@@ -104,8 +101,6 @@
        for r in kpl_results:
            # 取60个交易日之内的题材
            if r[1] in days:
                cls.__all_limit_up_reasons.add(kpl_util.filter_block(r[2]))
            code = r[0]
            if code not in limit_up_reasons_dict:
                limit_up_reasons_dict[code] = []
@@ -242,13 +237,6 @@
        async_log_util.info(logger_debug, f"今日新增概念:{code} - {block}")
        self.__radical_buy_reasons_dict[code] = old_blocks
        return True
    def get_total_before_blocks(self):
        """
        获取所有之前的板块
        @return:
        """
        return self.__all_limit_up_reasons
    def get_new_blocks(self):
        """
trade/buy_radical/new_block_processor.py
@@ -1,11 +1,83 @@
"""
新题材处理器
"""
import constant
from code_attribute import code_nature_analyse
from code_attribute.gpcode_manager import HumanRemoveForbiddenManager
from third_data import kpl_util
from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager
from trade import l2_trade_util, trade_record_log_util
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
from utils import tool
from utils.kpl_data_db_util import KPLLimitUpDataUtil
@tool.singleton
class BeforeBlocksComputer:
    """
    往日题材计算器
    """
    def __init__(self):
        self.__before_blocks = set()
        self.__load_data()
    def __load_data(self):
        # kpl_results: [( r.`_code`, r.`_day`, r.`_hot_block_name`, r.`_blocks`,  r.`_open`)]
        kpl_results = KPLLimitUpDataUtil.get_latest_block_infos()
        days = set()
        for r in kpl_results:
            # 取60个交易日之内的题材
            days.add(r[1])
        days = list(days)
        days.sort(key=lambda x: int(x.replace("-", "")), reverse=True)
        days = days[:60]
        # {"日期":{ "题材":{代码} }}
        day_block_codes_dict = {}
        for r in kpl_results:
            if r[1] not in days:
                continue
            if r[4]:
                # 不算炸板
                continue
            # 统计每一天的题材
            day = r[1]
            block = kpl_util.filter_block(r[2])
            if block in constant.KPL_INVALID_BLOCKS:
                continue
            if day not in day_block_codes_dict:
                day_block_codes_dict[day] = {}
            if block not in day_block_codes_dict[day]:
                day_block_codes_dict[day][block] = set()
            day_block_codes_dict[day][block].add(r[0])
        # 每一天走的板块
        day_block_dict = {}
        for day in day_block_codes_dict:
            for b in day_block_codes_dict[day]:
                if len(day_block_codes_dict[day][b]) >= 3:
                    if day not in day_block_dict:
                        day_block_dict[day] = set()
                    day_block_dict[day].add(b)
        day_block_list = [(d, day_block_dict[d]) for d in day_block_dict]
        day_block_list.sort(key=lambda x: x[0])
        # 过去59天出现的题材
        old_blocks = set()
        for d in day_block_list:
            if d[0] == days[0]:
                continue
            old_blocks |= d[1]
        self.__before_blocks |= old_blocks
        # 昨天出现的题材
        # if days[0] == day_block_list[-1][0]:
        #     # 昨天出现的题材
        #     yesterday_blocks = day_block_list[-1][1]
    def is_new_block(self, block):
        return block not in self.__before_blocks
    def get_old_blocks(self):
        return self.__before_blocks
def process_new_block(code, block):
trade/buy_radical/radical_buy_data_manager.py
@@ -1729,6 +1729,10 @@
    total_lack_money_info = get_total_deal_big_order_info(code, limit_up_price, is_for_buy=for_buy)
    total_lack_money, total_deal_money, total_threshold_money = total_lack_money_info[0], total_lack_money_info[1], \
                                                                total_lack_money_info[2]
    if gpcode_manager.GreenListCodeManager().is_in_cache(code):
        # 加绿之后不考虑总大单
        total_lack_money = 0
    # ===========判断单次大单成交==============
    current_big_order_deal_money = 0
    current_big_order_deal_money_info = EveryLimitupBigDealOrderManager.get_big_buy_deal_order_money_info(code)