Administrator
2025-03-26 cf89766b43b7e5601220e5144edab8ee9307a8ad
新题材拉黑机制修改
5个文件已修改
1个文件已添加
138 ■■■■■ 已修改文件
api/outside_api_command_callback.py 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code_attribute/code_nature_analyse.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
code_attribute/first_target_code_data_processor.py 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
servers/data_server.py 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/new_block_processor.py 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/l2_trade_util.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/outside_api_command_callback.py
@@ -1063,7 +1063,19 @@
                            except:
                                pass
                            # L撤比例
                            l_down_cancel_rate, must_buy = LCancelRateManager.get_cancel_rate(code, buy_mode = OrderBeginPosInfo.MODE_RADICAL)
                            l_down_cancel_rate, must_buy = LCancelRateManager.get_cancel_rate(code,
                                                                                              buy_mode=OrderBeginPosInfo.MODE_RADICAL)
                            # 在挂的距离成交进度位金额/(远近期参考量-单当日实时成交量)*100%
                            expire_rate = "未知"
                            try:
                                referer_volume = code_volumn_manager.CodeVolumeManager().get_radical_buy_refer_volume(
                                    code, limit_up_price)
                                today_volumn = code_volumn_manager.CodeVolumeManager().get_today_volumn(code)
                                expire_rate = f"{round(100 * total_left_num * 100 / (referer_volume - today_volumn), 2)}%"
                            except:
                                pass
                            fdata = {"id": orderSysID, "code_info": (code, code_name), "total_num": total_nums,
                                     "finish_num": deal_or_cancel_num,
                                     "buy1_money": output_util.money_desc(buy1_money),
@@ -1087,7 +1099,8 @@
                                     "is_near_big_order": is_near_big_order,
                                     "block": '',
                                     "trade_queue": [],
                                     "l_down_cancel_rate":l_down_cancel_rate
                                     "l_down_cancel_rate": l_down_cancel_rate,
                                     "expire_rate": expire_rate
                                     }
                            limit_up_data = kpl_data_manager.KPLLimitUpDataRecordManager.record_code_dict.get(code)
                            # 获取当前板块
@@ -1354,7 +1367,7 @@
                                    "zyltgb": constant.RADICAL_BUY_ZYLTGB_AS_YI_RANGES,
                                    "top_block_count_by_market_strong": constant.RADICAL_BUY_TOP_IN_COUNT_BY_MARKET_STRONG,
                                    "special_codes_max_block_in_rank": constant.RADICAL_BUY_TOP_IN_INDEX_WITH_SPECIAL,
                                    "ignore_block_in_money_market_strong":constant.IGNORE_BLOCK_IN_MONEY_MARKET_STRONG
                                    "ignore_block_in_money_market_strong": constant.IGNORE_BLOCK_IN_MONEY_MARKET_STRONG
                                    }}
                self.send_response({"code": 0, "data": data, "msg": f""},
                                   client_id,
@@ -1373,7 +1386,8 @@
                        constant.RADICAL_BUY_TOP_IN_INDEX_WITH_SPECIAL = radical_buy.get(
                            "special_codes_max_block_in_rank")
                    if radical_buy.get('ignore_block_in_money_market_strong') is not None:
                        constant.IGNORE_BLOCK_IN_MONEY_MARKET_STRONG = radical_buy.get('ignore_block_in_money_market_strong')
                        constant.IGNORE_BLOCK_IN_MONEY_MARKET_STRONG = radical_buy.get(
                            'ignore_block_in_money_market_strong')
                self.send_response({"code": 0, "data": {}, "msg": f""},
                                   client_id,
                                   request_id)
code_attribute/code_nature_analyse.py
@@ -472,7 +472,7 @@
def __is_new_top(code, limit_up_price, datas):
    datas = copy.deepcopy(datas)
    datas.sort(key=lambda x: x["bob"])
    datas = datas[-80:]
    datas = datas[-60:]
    max_price = 0
    for data in datas:
        if max_price < data["high"]:
code_attribute/first_target_code_data_processor.py
@@ -18,6 +18,7 @@
from third_data.history_k_data_util import HistoryKDatasUtils, JueJinApi
from trade import l2_trade_util
from settings.trade_setting import MarketSituationManager
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
from utils import global_util, tool, init_data_util, buy_condition_util
__CodesPlateKeysManager = CodesHisReasonAndBlocksManager()
@@ -121,46 +122,36 @@
                k_format = code_nature_analyse.get_k_format(code, limit_up_price, volumes_data)
                code_nature_analyse.CodeNatureRecordManager().save_k_format(code, k_format)
                # 是否具有辨识度
                is_special = True if k_format and k_format[8][0] else False
                if not WantBuyCodesManager().is_in_cache(
                        code) and not gpcode_manager.BuyOpenLimitUpCodeManager().is_in_cache(code):
                    # 不是想买单,也不是排一的代码
                    # if not is_special:
                    #     situation = MarketSituationManager().get_situation_cache()
                    #     zylt_threshold_as_yi = buy_condition_util.get_zyltgb_threshold(situation)
                    #     if global_util.zyltgb_map.get(code) and global_util.zyltgb_map.get(code) > zylt_threshold_as_yi[
                    #         1] * 100000000:
                    #         l2_trade_util.forbidden_trade(code,
                    #                                       f"无辨识度,自由流通市值({global_util.zyltgb_map.get(code) // 100000000})>{zylt_threshold_as_yi[1]}亿")
                    #         continue
                    #     elif limit_up_price and float(limit_up_price) >= constant.MAX_CODE_PRICE:
                    #         l2_trade_util.forbidden_trade(code,
                    #                                       f"无辨识度,涨停价({limit_up_price})>{constant.MAX_CODE_PRICE}")
                    #         continue
                    if code_nature_analyse.is_price_too_high_in_days(code, volumes_data, limit_up_price)[0]:
                        # 判断是否太高
                        l2_trade_util.forbidden_trade(code, "6天内股价长得太高")
                        continue
                    if tool.is_ge_code(code) and float(limit_up_price) < 10:
                        l2_trade_util.forbidden_trade(code, "创业板股价10块内")
                    if len(k_format) > 14 and k_format[14]:
                        l2_trade_util.forbidden_trade(code, "昨日炸板")
                        continue
                    # if code_nature_analyse.is_continue_limit_up_not_enough_fall_dwon(code, volumes_data):
                    #     # 判断是否太高
                    #     l2_trade_util.forbidden_trade(code, "回踩不够")
                    #     continue
                    try:
                        if not __is_normal_in_5d(code):
                            l2_trade_util.forbidden_trade(code, "最近5天有ST/非正常状态")
                    need_forbidden = True
                    # 新题材破前高就不需要加黑
                    if BlockSpecialCodesManager().get_code_blocks(code) and k_format and k_format[1]:
                        need_forbidden = False
                    if need_forbidden:
                        if code_nature_analyse.is_price_too_high_in_days(code, volumes_data, limit_up_price)[0]:
                            # 判断是否太高
                            l2_trade_util.forbidden_trade(code, "6天内股价长得太高")
                            continue
                    except Exception as e:
                        logger_debug.error(f"{code}出错__is_normal_in_5d")
                        logger_debug.exception(e)
                        if tool.is_ge_code(code) and float(limit_up_price) < 10:
                            l2_trade_util.forbidden_trade(code, "创业板股价10块内")
                        if len(k_format) > 14 and k_format[14]:
                            l2_trade_util.forbidden_trade(code, "昨日炸板")
                            continue
                        # if code_nature_analyse.is_continue_limit_up_not_enough_fall_dwon(code, volumes_data):
                        #     # 判断是否太高
                        #     l2_trade_util.forbidden_trade(code, "回踩不够")
                        #     continue
                        try:
                            if not __is_normal_in_5d(code):
                                l2_trade_util.forbidden_trade(code, "最近5天有ST/非正常状态")
                                continue
                        except Exception as e:
                            logger_debug.error(f"{code}出错__is_normal_in_5d")
                            logger_debug.exception(e)
                if code_nature_analyse.is_up_too_high_in_10d_with_limit_up(code, volumes_data):
                    # 判断是否太高
servers/data_server.py
@@ -9,7 +9,7 @@
import requests
import constant
from code_attribute.gpcode_manager import BlackListCodeManager
from code_attribute.gpcode_manager import BlackListCodeManager, HumanRemoveForbiddenManager
from l2.huaxin import huaxin_target_codes_manager
from l2.l2_transaction_data_manager import HuaXinBuyOrderManager
from log_module.log import logger_system, logger_debug, logger_kpl_limit_up, logger_request_api
@@ -18,12 +18,12 @@
    ContainsLimitupCodesBlocksManager
from third_data.kpl_limit_up_data_manager import LatestLimitUpBlockManager, CodeLimitUpSequenceManager
from third_data.third_blocks_manager import BlockMapManager
from trade.buy_radical import radical_buy_data_manager
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_strategy import OpenLimitUpGoodBlocksBuyStrategy
from trade.buy_radical.radical_buy_data_manager import RadicalBuyBlockManager, BeforeSubDealBigOrderManager
from utils import global_util, tool, data_export_util
from code_attribute import gpcode_manager
from code_attribute import gpcode_manager, code_nature_analyse
from log_module import log_analyse, log_export, async_log_util
from l2 import code_price_manager, l2_data_util, transaction_progress
from cancel_strategy.s_l_h_cancel_strategy import HourCancelBigNumComputer, LCancelRateManager
@@ -1045,10 +1045,8 @@
                    if code_info_list:
                        # 将代码加入新题材
                        for x in code_info_list:
                            add_result = LimitUpCodesBlockRecordManager().add_new_blocks(x[0], bi[0])
                            if add_result:
                                # 增加新题材是否成功, 临时将票加入辨识度
                                BlockSpecialCodesManager().add_code_block_for_temp(x[0], bi[0])
                            new_block_processor.process_new_block(x[0], bi[0])
            try:
                if result_list_:
@@ -1145,10 +1143,7 @@
                            update_new_block_plates = []
                            for r in reasons:
                                for c in block_codes[r]:
                                    add_result = LimitUpCodesBlockRecordManager().add_new_blocks(c, r)
                                    if add_result:
                                        # 增加新题材是否成功, 临时将票加入辨识度
                                        BlockSpecialCodesManager().add_code_block_for_temp(c, r)
                                    new_block_processor.process_new_block(c, r)
                            for r in reasons:
                                if r in block_plate_code_dict:
trade/buy_radical/new_block_processor.py
New file
@@ -0,0 +1,30 @@
"""
新题材处理器
"""
from code_attribute import code_nature_analyse
from code_attribute.gpcode_manager import HumanRemoveForbiddenManager
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
def process_new_block(code, block):
    """
    处理新题材
    @param code:
    @param block:
    @return:
    """
    add_result = LimitUpCodesBlockRecordManager().add_new_blocks(code, block)
    if add_result:
        # 增加新题材是否成功, 临时将票加入辨识度
        BlockSpecialCodesManager().add_code_block_for_temp(code, block)
        # 新题材破前高就移黑
        k_format = code_nature_analyse.CodeNatureRecordManager().get_k_format_cache(code)
        if k_format and k_format[1]:
            if l2_trade_util.is_in_forbidden_trade_codes(code):
                l2_trade_util.remove_from_forbidden_trade_codes(code)
                # 加想买单要从黑名单移除
                trade_record_log_util.add_common_msg(code, "新题材移黑", block)
    #
trade/l2_trade_util.py
@@ -4,6 +4,7 @@
from log_module import async_log_util
from log_module.log import logger_trade
from trade import trade_record_log_util
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
__redis_manager = redis_manager.RedisManager(2)
@@ -37,6 +38,7 @@
            need_add = False
        else:
            need_add = True
    if need_add:
        if not is_in_forbidden_trade_codes(code):
            trade_record_log_util.add_forbidden_buy_log(code, msg)