admin
5 天以前 8382cbe98cab50d8bbea9d43779e1c632548fe04
禁止买入板块管理/增加外部接口
3个文件已修改
1个文件已添加
118 ■■■■■ 已修改文件
constant.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data_server.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/buying_strategy.py 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/forbidden_plates_manager.py 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
constant.py
@@ -84,3 +84,8 @@
# 是否是仿真交易
IS_SIMULATED_TRADE = False
check_plate_list = {'无', 'ST摘帽', 'ST板块', '超跌', '次新股', '北交所', '科创板',
                                    '年报增长', '年报预增', '并购重组', '股权转让', '送转填权', '高送转', '壳资源',
                                    '资产管理', '举牌',
                                    '专用设备', '创投'}
data_server.py
@@ -17,6 +17,7 @@
from log_module import log_export, async_log_util
from log_module.log import hx_logger_l2_transaction, logger_debug, logger_request_api, logger_system
from strategy import data_cache
from strategy.forbidden_plates_manager import ForbiddenPlatesManager
from strategy.kpl_data_manager import KPLMarketsSiftPlateLogManager, KPLMarketStockHeatLogManager
from strategy.trade_setting import TradeSetting
from trade import huaxin_trade_api, huaxin_trade_data_update
@@ -234,6 +235,26 @@
                # (距离09:15:00的秒数, 时间, 强度)
                fdatas.append((tool.trade_time_sub(data[0], "09:15:00"), data[0], data[1]))
            response_data = json.dumps({"code": 0, "data": fdatas})
        elif url.path == "/get_place_order_records":
            datas = data_cache.purchased_stocks_details_list
            response_data = json.dumps({"code": 0, "data": datas})
        elif url.path == "/get_forbidden_plates":
            datas = ForbiddenPlatesManager().list_plates()
            # human 认为设置  fixed: 固定的
            response_data = json.dumps(
                {"code": 0, "data": {"human": list(datas), "fixed": list(constant.check_plate_list)}})
        elif url.path == "/add_forbidden_plate":
            plate = params_dict.get("plate")
            ForbiddenPlatesManager().add_plate(plate)
            response_data = json.dumps({"code": 0, "data": {}})
        elif url.path == "/remove_forbidden_plate":
            plate = params_dict.get("plate")
            ForbiddenPlatesManager().remove_plate(plate)
            response_data = json.dumps({"code": 0, "data": {}})
        elif url.path == "/get_market_sift_plate_stock_dict":
            # 获取开盘啦板块精选流入
            data = data_cache.market_sift_plate_stock_dict
            response_data = json.dumps({"code": 0, "data": data})
        self.send_response(200)
        # 发给请求客户端的响应数据
strategy/buying_strategy.py
@@ -429,6 +429,7 @@
                                            data_cache.bought_plate.extend(limit_up_plate_included_list)
                                            logger_info(
                                                f"【{k_line_data[0]['sec_name']}】交易成功!持仓集合:{data_cache.position_symbols_set}")
                                            # 传给GUI显示
                                            purchased_stock_details = {
                                                "name": k_line_data[0]['sec_name'],
                                                "policy_name": "有概念有强度策略分支",
@@ -548,11 +549,23 @@
                                                data_cache.bought_plate.extend(limit_up_plate_included_list)
                                                logger_info(
                                                    f"【{k_line_data[0]['sec_name']}】交易成功!持仓集合:{data_cache.position_symbols_set}")
                                                # 传给GUI显示
                                                purchased_stock_details = {
                                                    "name": k_line_data[0]['sec_name'],
                                                    "policy_name": "有概念无强度策略分支",
                                                    "plate_name": limit_up_plate_included,
                                                    "buy_time_trading_volume_ratio": (
                                                                current_volume / k_line_data[0]['volume']),
                                                }
                                                data_cache.purchased_stocks_details_list.append(purchased_stock_details)
                                                logger_info(
                                                    f"已成交股票详情列表:{data_cache.purchased_stocks_details_list} ")
                                '''
                                无概念 有强度视界
                                '''
                                if len(limit_up_plate_included) == 0:
                                    # logger_info(f"【无概念】")
                                if len(limit_up_plate_included) == 0 or limit_up_plate_included.issubset(
                                        check_plate_list) is True:
                                    # logger_info(f"【无概念 或 概念在屏蔽概念组中】")
                                    if strength_list_have_it is True:
                                        logger_info(
                                            f"【{k_line_data[0]['sec_name']}】--------------------------------------------------------------------------------------------------------[有强度视界]")
@@ -661,6 +674,18 @@
                                                    data_cache.bought_plate.extend(strength_plate)
                                                    logger_info(
                                                        f"【{k_line_data[0]['sec_name']}】交易成功!持仓集合:{data_cache.position_symbols_set}")
                                                    # 传给GUI显示
                                                    purchased_stock_details = {
                                                        "name": k_line_data[0]['sec_name'],
                                                        "policy_name": "无概念有强度策略分支",
                                                        "plate_name": strength_plate,
                                                        "buy_time_trading_volume_ratio": (
                                                                current_volume / k_line_data[0]['volume']),
                                                    }
                                                    data_cache.purchased_stocks_details_list.append(
                                                        purchased_stock_details)
                                                    logger_info(
                                                        f"已成交股票详情列表:{data_cache.purchased_stocks_details_list} ")
                                '''
                                无概念无强度 有小量换大涨幅度视界
                                '''
strategy/forbidden_plates_manager.py
New file
@@ -0,0 +1,63 @@
"""
黑名单板块管理
"""
from db import redis_manager_delegate as redis_manager
from db.redis_manager_delegate import RedisUtils
from utils import tool
@tool.singleton
class ForbiddenPlatesManager:
    def __init__(self):
        self.forbidden_plates = set()
        self.__db = 1
        self.__redisManager = redis_manager.RedisManager(self.__db)
        self.__load_forbidden_plates()
    def __load_forbidden_plates(self):
        plates = RedisUtils.smembers(self.__redisManager.getRedis(), "forbidden_plates")
        if plates:
            self.forbidden_plates = set(plates)
    def add_plate(self, plate):
        """
        添加板块
        :param plate:
        :return:
        """
        if plate in self.forbidden_plates:
            return
        self.forbidden_plates.add(plate)
        RedisUtils.sadd_async(self.__db, "forbidden_plates", plate)
        RedisUtils.expire_async(self.__db, "forbidden_plates", tool.get_expire())
    def remove_plate(self, plate):
        """
        移除板块
        :param plate:
        :return:
        """
        if plate not in self.forbidden_plates:
            return
        self.forbidden_plates.remove(plate)
        RedisUtils.srem_async(self.__db, "forbidden_plates", plate)
        RedisUtils.expire_async(self.__db, "forbidden_plates", tool.get_expire())
    def list_plates(self):
        """
        列出所有板块
        :return:
        """
        return self.forbidden_plates
    def is_plate_forbidden(self, plate):
        """
        判断板块是否被禁止
        :param plate:
        :return:
        """
        return plate in self.forbidden_plates
if __name__ == '__main__':
    print(ForbiddenPlatesManager().list_plates())