Administrator
2024-12-11 3cb848d1805f6587abeed8978a0d76a282e1ba04
如果某板块涨停个数≥5个(所有涨停股),则目标票回封可以买
4个文件已修改
80 ■■■■ 已修改文件
third_data/code_plate_key_manager.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/kpl_data_constant.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/radical_buy_data_manager.py 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/current_price_process_manager.py 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/code_plate_key_manager.py
@@ -365,7 +365,7 @@
        if cls.__market_strong is not None:
            score = int(cls.__market_strong)
        for info in constant.RADICAL_BUY_TOP_IN_COUNT_BY_MARKET_STRONG:
            if info[0]<=score<info[1]:
            if info[0] <= score < info[1]:
                return info[2]
        return 10
@@ -482,8 +482,6 @@
            if cls.top_in_list_cache[i][1] == b:
                return b, i, cls.top_in_list_cache[i][3]
        return b, -1, 0
    @classmethod
    def set_top_5_industry(cls, datas):
third_data/kpl_data_constant.py
@@ -219,10 +219,25 @@
    __history_code_data_dict = {}
    history_limit_up_datas = []
    current_limit_up_datas = []
    __current_limit_up_block_codes = {}
    @classmethod
    def set_current_limit_up_datas(cls, current_limit_up_datas):
        cls.current_limit_up_datas = current_limit_up_datas
        # 统计板块当前涨停数量
        block_codes = {}
        for d in current_limit_up_datas:
            code = d[0]
            blocks = LimitUpCodesBlockRecordManager().get_radical_buy_blocks(code)
            if blocks:
                for b in blocks:
                    if b not in block_codes:
                        block_codes[b] = set()
                    block_codes[b].add(code)
        cls.__current_limit_up_block_codes = block_codes
    @classmethod
    def set_history_limit_up_datas(cls, history_limit_up_datas_):
@@ -272,6 +287,10 @@
            return int(cls.__history_code_data_dict[code][5])
        return None
    @classmethod
    def get_current_limit_up_block_codes(cls, block):
        return cls.__current_limit_up_block_codes.get(block)
if __name__ == "__main__":
    ContainsLimitupCodesBlocksManager()
trade/buy_radical/radical_buy_data_manager.py
@@ -723,7 +723,8 @@
        if limit_up_timestamp < kpl_block_util.open_limit_up_time_range[1]:
            return False, f"当前代码开1"
        THRESHOLD_MINUTES = 30
        # 扩大到5小时
        THRESHOLD_MINUTES = 60 * 5
        if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'),
                               tool.timestamp_format(current_before_codes_info[-1][1],
                                                     '%H:%M:%S')) >= THRESHOLD_MINUTES * 60:
@@ -950,6 +951,23 @@
        return fblocks, before_fblocks
    @classmethod
    def is_block_can_buy_with_block_in(cls, code, block):
        """
        根据板块流入判断板块是否可买
        @param code:
        @param block:
        @return:
        """
        jx_in_blocks = RealTimeKplMarketData.get_top_market_jingxuan_blocks()
        if jx_in_blocks and block in jx_in_blocks:
            return True
        # 获取当前板块涨停数量
        codes = LimitUpDataConstant.get_current_limit_up_block_codes(block)
        if codes and len(codes) >= 5:
            return True
        return False
    @classmethod
    def is_radical_buy(cls, code, yesterday_limit_up_codes):
        """
        是否是激进买
@@ -971,9 +989,12 @@
            return set(keys_), "已加想"
        # 获取精选净流入
        jx_in_blocks = RealTimeKplMarketData.get_top_market_jingxuan_blocks()
        keys_in_jx = keys_ & set(jx_in_blocks)
        keys_in_jx = set()
        for k in keys_:
            if cls.is_block_can_buy_with_block_in(code, k):
                keys_in_jx.add(k)
        if not keys_in_jx:
            # 板块尚未精选流入,且板块涨停代码个数是否<5个
            return set(), f"【{keys_}】板块未在精选流入中"
        keys_ = keys_in_jx
        match_blocks = open_limit_up_blocks & keys_
trade/current_price_process_manager.py
@@ -73,20 +73,28 @@
    if code in today_history_limit_up_codes:
        # 涨停过的代码才会计算板块身位
        for b in blocks:
            index = None
            if b in top_in_blocks:
                index = top_in_blocks.index(b)
                # 查询在板块中的排序
                info = RadicalBuyBlockManager().get_history_index(code, b, yesterday_limit_up_codes)
                if info[0] > 0:
                    info = RadicalBuyBlockManager().filter_before_codes(code, b, info[0], info[1],
                                                                        yesterday_limit_up_codes)
                if info[0] < 3:
            else:
                if RadicalBuyBlockManager.is_block_can_buy_with_block_in(code, b):
                    index = 100
            if index is None:
                continue
            # 查询在板块中的排序
            info = RadicalBuyBlockManager().get_history_index(code, b, yesterday_limit_up_codes)
            if info[0] > 0:
                info = RadicalBuyBlockManager().filter_before_codes(code, b, info[0], info[1],
                                                                    yesterday_limit_up_codes)
            if info[0] < 3:
                return index + 1
            elif info[0] < 6:
                # 判断是否具有辨识度
                special_codes = BlockSpecialCodesManager().get_block_codes(b)
                if special_codes and code in special_codes:
                    return index + 1
                elif info[0] < 6:
                    # 判断是否具有辨识度
                    special_codes = BlockSpecialCodesManager().get_block_codes(b)
                    if special_codes and code in special_codes:
                        return index + 1
    return 10000