Administrator
2025-04-29 6056ef8795f5620f9a2ac4891e4c24526e6a7103
人为拉黑的不能自动移黑
4个文件已修改
51 ■■■■■ 已修改文件
api/outside_api_command_callback.py 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
code_attribute/code_nature_analyse.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
code_attribute/gpcode_manager.py 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/new_block_processor.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/outside_api_command_callback.py
@@ -19,7 +19,7 @@
from code_attribute.code_data_util import ZYLTGBUtil
from code_attribute.code_l1_data_manager import L1DataManager
from code_attribute.gpcode_manager import CodePrePriceManager, CodesNameManager, WantBuyCodesManager, \
    HumanRemoveForbiddenManager
    HumanRemoveForbiddenManager, HumanForbiddenManager
from db import mysql_data_delegate as mysql_data, redis_manager_delegate as redis_manager
from db.redis_manager_delegate import RedisUtils
from huaxin_client import l1_subscript_codes_manager
@@ -298,6 +298,7 @@
                        l2_trade_util.remove_from_forbidden_trade_codes(code)
                        # 加想买单要从黑名单移除
                        HumanRemoveForbiddenManager().add_code(code)
                        HumanForbiddenManager().remove_code(code)
                    name = gpcode_manager.get_code_name(code)
                    if not name:
                        results = HistoryKDatasUtils.get_gp_codes_names([code])
@@ -324,6 +325,7 @@
                    l2_trade_util.forbidden_trade(code, msg="手动加入 trade_server", force=True)
                    WantBuyCodesManager().remove_code(code)
                    HumanRemoveForbiddenManager().remove_code(code)
                    HumanForbiddenManager().add_code(code)
                    name = gpcode_manager.get_code_name(code)
                    if not name:
                        results = HistoryKDatasUtils.get_gp_codes_names([code])
@@ -332,6 +334,7 @@
                elif operate == outside_api_command_manager.OPERRATE_DELETE:
                    l2_trade_util.remove_from_forbidden_trade_codes(code)
                    HumanRemoveForbiddenManager().add_code(code)
                    HumanForbiddenManager().remove_code(code)
                elif operate == outside_api_command_manager.OPERRATE_GET:
                    codes = gpcode_manager.BlackListCodeManager().list_codes_cache()
                    datas = []
code_attribute/code_nature_analyse.py
@@ -405,7 +405,7 @@
            max_price_info = d["high"], d
    # if max_price > float(limit_up_price):
    #     return False
    rate = (float(limit_up_price) - min_price_info[1]["close"]) / min_price_info[1]["close"]
    rate = (max_price_info[1]["high"] - min_price_info[1]["low"]) / min_price_info[1]["low"]
    THRESHOLD_RATE = 0.319 * 2 if tool.is_ge_code(code) else 0.319
    if rate >= THRESHOLD_RATE:
        return True, rate
code_attribute/gpcode_manager.py
@@ -10,6 +10,7 @@
from db.redis_manager_delegate import RedisUtils
from log_module import log_export
from log_module.log import logger_pre_close_price, logger_debug
from trade import trade_record_log_util
from utils import tool
import decimal
@@ -246,6 +247,45 @@
        return code in self.__codes_cache
@tool.singleton
class HumanForbiddenManager:
    """
    人为拉黑管理
    """
    __db = 0
    redisManager = redis_manager.RedisManager(0)
    __redis_key = "human_forbidden_codes"
    __codes_cache = set()
    def __init__(self):
        self.__load_data()
    @classmethod
    def __get_redis(cls):
        return cls.redisManager.getRedis()
    def __load_data(self):
        self.__codes_cache = RedisUtils.smembers(self.__get_redis(), self.__redis_key)
        if self.__codes_cache is None:
            self.__codes_cache = set()
    def add_code(self, code):
        trade_record_log_util.add_common_msg(code, "人为加黑", f"")
        self.__codes_cache.add(code)
        RedisUtils.sadd_async(self.__db, self.__redis_key, code)
        RedisUtils.expire_async(self.__db, self.__redis_key, tool.get_expire())
    def remove_code(self, code):
        trade_record_log_util.add_common_msg(code, "人为移黑", f"")
        self.__codes_cache.discard(code)
        RedisUtils.srem_async(self.__db, self.__redis_key, code)
    def is_in_cache(self, code):
        return code in self.__codes_cache
# 暂停下单代码管理
# 与黑名单的区别是暂停交易代码只是不交易,不能移除L2监控位
class PauseBuyCodesManager:
trade/buy_radical/new_block_processor.py
@@ -3,6 +3,7 @@
"""
import constant
from code_attribute import code_nature_analyse
from code_attribute.gpcode_manager import HumanForbiddenManager
from third_data import kpl_util, kpl_data_constant
from trade import l2_trade_util, trade_record_log_util
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
@@ -199,7 +200,8 @@
        blocks |= kpl_data_constant.limit_up_component_code_new_blocks_dict[code]
    if code in kpl_data_constant.limit_up_code_new_block_dict:
        blocks.add(kpl_data_constant.limit_up_code_new_block_dict[code])
    if blocks and l2_trade_util.is_in_forbidden_trade_codes(code):
    if blocks and l2_trade_util.is_in_forbidden_trade_codes(code) and not HumanForbiddenManager().is_in_cache(code):
        # 没有人为拉黑才能移黑
        l2_trade_util.remove_from_forbidden_trade_codes(code)
        # 加想买单要从黑名单移除
        trade_record_log_util.add_common_msg(code, "新题材移黑", f"{blocks}")