admin
5 天以前 1dea3d72da9d3d2d55f2e41b611913b0901d8074
strategy/plate_strength_analysis.py
@@ -5,13 +5,18 @@
import dask
import constant
from log_module.log import logger_common, logger_kpl_jingxuan_in, logger_debug
from log_module.log import logger_common, logger_kpl_jingxuan_in, logger_debug, logger_kpl_market_sift_plate
from strategy import kpl_api, data_cache, basic_methods
from strategy.kpl_data_manager import KPLMarketStockHeatLogManager
from utils import tool, hx_qc_value_util
# 获取行情精选板块 强度排名
def get_market_sift_plate_its_stock_power():
    """
    :return: {板块:[代码信息]}, 精选流入板块
    """
    @dask.delayed
    def batch_get_plate_codes(fs):
        return fs
@@ -23,9 +28,8 @@
        # now_time_str = tool.get_now_time_str()
        # if data_cache.OPENING_TIME < now_time_str < data_cache.NOON_MARKET_TIME:
        log_data = {plate_name: its_stock['list']}
        # 尝试过滤掉无意义的概念板块(plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革','超跌', '壳资源', '股权转让', '送转填权']) and '增长' in plate_name
        if (plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革', '超跌',
                               '壳资源', '股权转让', '送转填权']) or ('增长' in plate_name):
        # 尝试过滤掉无意义的概念板块 【代表着有无强度可能】
        if (plate_name not in ['科创板', '北交所', '无', '并购重组', '国企改革', '超跌', '壳资源', '股权转让', '送转填权']) or ('次新' in plate_name or 'ST' in plate_name or '破净股' in plate_name):
            # print(f"{i[1]} 强度:{i[2]}")
            # 通过板块ID获取其下面的个股强度列表
@@ -46,14 +50,14 @@
            #             f"未知空值:{i[26]},未知零值:{i[27]},收盘封单:{i[28]},最大封单:{i[29]},未知空值?:{i[30]},"
            #             f"?:{i[30]}%,?:{i[31]},??:{i[32]},振幅:{i[33]}%,未知0????:{i[34]},未知0?????:{i[35]},"
            #             f"?=:{i[36]},?总市值:{i[37]},?流通市值:{i[38]},最终归属概念(收盘后出数据?):{i[39]},领涨次数:{i[40]},"
            #             f"41未知1值:{i[41]},第三季度机构持仓【str数据勿用运算符】:{i[42]}万,?年预测净利润:{i[43]},上年预测净利润:{i[44]},年内预测净利润:{i[45]}"
            #             f"41未知1值:{i[41]},上季度机构持仓【str数据勿用运算符】:{i[42]}万,?年预测净利润:{i[43]},上年预测净利润:{i[44]},年内预测净利润:{i[45]}"
            #         )
            # 初始化股票强度列表
            stock_power_list = []
            for s in its_stock['list']:
                # 过滤掉涨幅大于  and s[6] < 6.5 且小于0%的 和 名称中包含ST的 和 涨速小于等于0%的 和 只要昨日未涨停 和 上证或深证的正股    and s[9] > 0.0025
                if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("板") < 0 and s[24].find("板") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1:
                # 过滤掉涨幅大于  当日涨幅s[6] < 0% 的 和 名称中包含ST的 和 涨速小于等于0%的 和 只要昨日未涨停 和 上证或深证的正股    and s[9] > 0.0025  上季度机构持仓 >0
                if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("板") < 0 and s[24].find("板") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1 and int(s[42]) >= 0:
                    # print(f"{s[1]},个股代码:{s[0]},   涨幅:{s[6]}%   涨速:{s[9]}%   概念:{s[4]}   主力资金推测:{s[2]}   领涨次数:{s[40]}  今日第几板:{s[23]} 是否破版{s[24]}")
                    # 对个股强度 主要 属性列表进行装填
                    its_stock_power = [s[1], s[0], s[6], s[9], s[4], s[2], s[40]]
@@ -71,15 +75,19 @@
        return log_data
    # 定义一个时间段,在这个时间段内才会执行下面的代码,主要就是把强度数据作为日志打印存储下来。
    now_time = tool.get_now_time_str()
    if not (data_cache.OPENING_TIME < now_time < data_cache.CLOSING_TIME):
        return
    data = (kpl_api.getMarketJingXuanRealRankingInfo())
    market_sift_plate = json.loads(data)
    # logger_kpl_jingxuan_in 打印的日志专用于开盘了数据的存储分析,不能轻易删除
    # print(f"market_sift_plate 数 ======{len(market_sift_plate['list'])}")
    # 行情》精选板块》排名前20中》对应个股》符合条件的个股
    # logger.info(f"market_sift_plate['list']======{market_sift_plate['list']}")
    # 精选板块【前20】 market_sift_plate['list'] ======
    if data_cache.OPENING_TIME < now_time < data_cache.AFTER_CLOSING_TIME:
        logger_kpl_market_sift_plate.info(f"{market_sift_plate['list']}")
    # 总控制时间段
    if not (data_cache.OPENING_TIME < now_time < data_cache.NOON_MARKET_TIME):
        return
    # ['801235', '化工', 6996, 0.027, 2.43, 117836347690, -122548038, 8105997595, -8228545633, 0.92, 8595377775454, 0.09, 332297449, 9954902621130, -192457252, 24.0487, 17.1809, 6996, 0.027]
    # market_sift_plate['list'][0] = ['801062', '军工', 3520, -0.49, 0.666, 139133934669, 383864272, 9077352839, -8693488567, 1.183, 6129448037490,-0.12, 168245858, 7088854452019, -290614763, 50.2408, 30.3672, 3520, 0]
    # 行情精选板块列表 前20 中的 第一个板块列表数据 = 【代码,板块名称,强度,涨幅?,量比?,成交额?,现额?,主买,主卖,1.183?,流通值?,-0.12?,300W大单净额?,总市值?,上季度机构增仓,今年平均PE,次年平均PE,强度,未知0值】
    # logger.info(f"market_sift_plate['list'][0]  ======{market_sift_plate['list'][0]}")
    # 初始化精选板块对应个股字典
    market_sift_plate_stock_dict = {}
@@ -98,9 +106,9 @@
        # logger.info(f"精选板块股票强度数据更新 == {market_sift_plate_stock_dict}")
        # 只在盘中时间获取
        kpl_api.KPLStockOfMarketsPlateLogManager().add_log(market_sift_plate['list'], log_datas)
    return market_sift_plate_stock_dict
        KPLMarketStockHeatLogManager().add_log(market_sift_plate['list'], log_datas)
    # 行情》精选板块》排名前20中》对应个股》符合条件的个股
    return market_sift_plate_stock_dict, market_sift_plate.get("list",[])
# 调用一下获取精选板块股票强度数据函数  【本模块内使用时调用】
@@ -117,7 +125,8 @@
                its_stock_power = get_market_sift_plate_its_stock_power()
                time_str = datetime.datetime.now().strftime("%H%M%S")
                if 92900 < int(time_str) < 95000:
                    logger_kpl_jingxuan_in.info(f"耗时:{time.time() - start_time}  数据:{its_stock_power}")
                    # logger_kpl_jingxuan_in 打印的日志专用于开盘了数据的存储分析,不能轻易删除
                    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: