f1b3c7566924a00e86e63c55167bbda91f796716..1dea3d72da9d3d2d55f2e41b611913b0901d8074
5 天以前 admin
增加测试/记录精选流入板块
1dea3d 对比 | 目录
5 天以前 admin
增加测试/记录精选流入板块
cea6ee 对比 | 目录
5 天以前 admin
增加测试
af2667 对比 | 目录
5 天以前 admin
增加测试
f49903 对比 | 目录
5 天以前 admin
增加测试
8c4b2a 对比 | 目录
5 天以前 admin
禁止买入板块管理/增加外部接口
8382cb 对比 | 目录
6个文件已修改
1个文件已添加
146 ■■■■■ 已修改文件
constant.py 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data_server.py 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
main.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/buying_strategy.py 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/data_cache.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/forbidden_plates_manager.py 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/plate_strength_analysis.py 8 ●●●● 补丁 | 查看 | 原始文档 | 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_plates
            response_data = json.dumps({"code": 0, "data": data})
        self.send_response(200)
        # 发给请求客户端的响应数据
main.py
@@ -107,11 +107,13 @@
                     daemon=True).start()
    # # 开盘啦的板块强度下的个股强度回调函数
    def get_market_sift_plate_its_stock_power_process(market_sift_plate_stock_dict):
    def get_market_sift_plate_its_stock_power_process(market_sift_plate_info):
        # print(f"回调成功===精选板块股票强度数据更新==={market_sift_plate_stock_dict}")
        # logger_kpl_jingxuan_in.info(f"{market_sift_plate_stock_dict}")
        market_sift_plate_stock_dict,  market_sift_plates = market_sift_plate_info[0], market_sift_plate_info[1]
        if market_sift_plate_stock_dict:
            data_cache.market_sift_plate_stock_dict = market_sift_plate_stock_dict
            data_cache.market_sift_plates = market_sift_plates
    # 板块强度下个股强度线程
    threading.Thread(target=plate_strength_analysis.get_market_sift_plate_its_stock_power_process,
strategy/buying_strategy.py
@@ -8,6 +8,8 @@
# from datetime import time
# from datetime import timedelta
import time
import constant
import utils.tool
from log_module import async_log_util
from log_module.log import logger_kpl_jingxuan_in, logger_common
@@ -18,6 +20,7 @@
from strategy import basic_methods
from strategy import account_management
from strategy import order_methods
from strategy.forbidden_plates_manager import ForbiddenPlatesManager
from strategy.order_methods import TodayBuyCodeManager
from utils import tool, huaxin_util
@@ -218,10 +221,8 @@
                #     print(f"没有在概念缓存列表中找到:{symbol_to_search}。")
                # 声明要检查过滤不可用的概念板块名称常量   【代表着 是否有无概念及跟随概念的可能性(有明显个股独特增长特性的不可跟随,因为概念本身是宽泛的,许多不同概念的个股都有这个概念)】
                check_plate_list = {'无', 'ST摘帽', 'ST板块', '超跌', '次新股', '北交所', '科创板',
                                    '年报增长', '年报预增', '并购重组', '股权转让', '送转填权', '高送转', '壳资源',
                                    '资产管理', '举牌',
                                    '专用设备', '创投'}
                # check_plate_list = constant.check_plate_list | set(ForbiddenPlatesManager().list_plates())
                check_plate_list = constant.check_plate_list
                # 查询当前个股的代码是否在板块强度个股列表中(低吸优选目标)
                strength_list_have_it = False  # 是否有强度赋初值
@@ -429,6 +430,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 +550,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 +675,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/data_cache.py
@@ -76,8 +76,8 @@
        #                         stock.startswith('SHSE.60') or (stock.startswith('SZSE.00'))]
        self.filtered_stocks = [stock['symbol'] for stock in self.all_stocks if
                                isinstance(stock.get('symbol'), str) and (
                                            stock['symbol'].startswith('SHSE.60') or stock['symbol'].startswith(
                                        'SZSE.00'))]
                                        stock['symbol'].startswith('SHSE.60') or stock['symbol'].startswith(
                                    'SZSE.00'))]
        # self.filtered_stocks =  self.filtered_stocks[:10]
        print(f"过滤后上证A股和深证A股数量filtered_stocks:{len(self.filtered_stocks)}")
        # 声明一下需要拉取K线的列表
@@ -156,6 +156,9 @@
limit_up_block_names = []
# 初始化板块强度下的个股强度
market_sift_plate_stock_dict = {}
# 精选流入板块
market_sift_plates = []
# 初始化实时大盘行情市场情绪综合强度【完整】字典
rise_and_fall_statistics_dirt = {}
# 初始化实时大盘行情情绪综合强度[分数]
strategy/forbidden_plates_manager.py
New file
@@ -0,0 +1,63 @@
"""
黑名单板块管理
"""
import json
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 = []
        self.__db = 1
        self.__redisManager = redis_manager.RedisManager(self.__db)
        self.__load_forbidden_plates()
    def __load_forbidden_plates(self):
        plates = RedisUtils.get(self.__redisManager.getRedis(), "forbidden_plate_list")
        if plates:
            self.forbidden_plates = json.loads(plates)
    def add_plate(self, plate):
        """
        添加板块
        :param plate:
        :return:
        """
        if plate in self.forbidden_plates:
            return
        self.forbidden_plates.append(plate)
        RedisUtils.setex_async(self.__db, "forbidden_plate_list",tool.get_expire(), json.dumps( self.forbidden_plates))
    def remove_plate(self, plate):
        """
        移除板块
        :param plate:
        :return:
        """
        if plate not in self.forbidden_plates:
            return
        self.forbidden_plates.remove(plate)
        RedisUtils.setex_async(self.__db, "forbidden_plate_list", tool.get_expire(), json.dumps(self.forbidden_plates))
    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())
strategy/plate_strength_analysis.py
@@ -13,6 +13,10 @@
# 获取行情精选板块 强度排名
def get_market_sift_plate_its_stock_power():
    """
    :return: {板块:[代码信息]}, 精选流入板块
    """
    @dask.delayed
    def batch_get_plate_codes(fs):
        return fs
@@ -104,7 +108,7 @@
        # 只在盘中时间获取
        KPLMarketStockHeatLogManager().add_log(market_sift_plate['list'], log_datas)
    # 行情》精选板块》排名前20中》对应个股》符合条件的个股
    return market_sift_plate_stock_dict
    return market_sift_plate_stock_dict, market_sift_plate.get("list",[])
# 调用一下获取精选板块股票强度数据函数  【本模块内使用时调用】
@@ -122,7 +126,7 @@
                time_str = datetime.datetime.now().strftime("%H%M%S")
                if 92900 < int(time_str) < 95000:
                    # logger_kpl_jingxuan_in 打印的日志专用于开盘了数据的存储分析,不能轻易删除
                    logger_kpl_jingxuan_in.info(f"耗时:{time.time() - start_time}  数据:{its_stock_power}")
                    logger_kpl_jingxuan_in.info(f"耗时:{time.time() - start_time}  数据:{its_stock_power[0]}")
                callback(its_stock_power)
                # print(f"精选板块拉升个股更新===={its_stock_power}")
        except Exception as e: