admin
2025-04-17 796989e08d194dfbd396563cf6435994d83396b6
涨跌分布信号
有概念买入限制数量修改
有强度买入限制数量修改
2个文件已修改
58 ■■■■■ 已修改文件
strategy/buying_strategy.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/market_sentiment_analysis.py 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
strategy/buying_strategy.py
@@ -353,7 +353,7 @@
                                        elif len(intersection_plate) > 0:
                                            logger_info(
                                                f"【不利】同概念只买一次,不买了,公司名称:{k_line_data[0]['sec_name']},重复相交概念==={intersection_plate}")
                                        elif data_cache.have_plate_buy_times >= 3:
                                        elif data_cache.have_plate_buy_times >= 1:
                                            logger_info(f"【不利】有概念买入已经 3 次了!不买了!!公司名称:{k_line_data[0]['sec_name']},")
                                        elif len(data_cache.addition_position_symbols_set) >= 3:
                                            logger_info(f"【不利】当日已经买了3只票!不买了!!公司名称:{k_line_data[0]['sec_name']},")
@@ -539,7 +539,7 @@
                                                        free_market_value == 0 or free_market_value == 0.0) and free_market_value < 6:
                                                    logger_info(
                                                        f"【不利】自由市值小于6亿!不买!! 公司名称:{k_line_data[0]['sec_name']},最新价: {current_price}")
                                                elif data_cache.have_strength_buy_times >= 1:
                                                elif data_cache.have_strength_buy_times >= 3:
                                                    logger_info(f"【不利】有强度买入 1 次了!不买了!!公司名称:{k_line_data[0]['sec_name']},")
                                                elif len(data_cache.addition_position_symbols_set) >= 3:
                                                    logger_info(f"【不利】当日已经买了3只票!不买了!!公司名称:{k_line_data[0]['sec_name']},")
strategy/market_sentiment_analysis.py
@@ -411,10 +411,7 @@
# 计算市场分布形态因子 函数
# ====================== 输入数据 ======================
data = {'-1': '2704', '-10': '2', '-2': '487', '-3': '81', '-4': '38', '-5': '15', '-6': '5', '-7': '4', '-8': '4', '-9': '2', '0': '743', '1': '773', '10': '6',
        '2': '144', '3': '35', '4': '29', '5': '11', '6': '10', '7': '10', '8': '3', '9': '1', 'DT': 7, 'SJDT': '3', 'SJZT': '10', 'STDT': '4', 'STZT': '6',
        'SZJS': 1038, 'XDJS': 3349, 'ZSZDFB': '475,1353,405,62,395,43,34,222,37,22,23,5,17,22,11,71,183,46,', 'ZT': 16, 'sign': '市场人气一般', 'szln': 473159,
        'qscln': 1099671, 's_zrcs': 1607250, 'q_zrcs': 4298869, 's_zrtj': 45633261, 'q_zrtj': 107719382}
data = {'-1': '1382', '-10': '3', '-2': '278', '-3': '105', '-4': '41', '-5': '18', '-6': '8', '-7': '4', '-8': '5', '-9': '1', '0': '350', '1': '2217', '10': '6', '2': '487', '3': '109', '4': '48', '5': '22', '6': '10', '7': '8', '8': '5', '9': '1', 'DT': 6, 'SJDT': '3', 'SJZT': '14', 'STDT': '3', 'STZT': '2', 'SZJS': 2929, 'XDJS': 1851, 'ZSZDFB': '1189,885,159,212,257,31,136,125,31,22,27,1,5,43,2,66,224,10,', 'ZT': 16, 'sign': '市场人气一般', 'szln': 3571292, 'qscln': 8377352, 's_zrcs': 4219994, 'q_zrcs': 9969991, 's_zrtj': 48920069, 'q_zrtj': 111190413}
# ====================== 数据预处理 ======================
@@ -557,6 +554,17 @@
            # 'rise_percentages': rise_percentages,  # 各个涨幅段的股票分布比例
            # 'fall_percentages': fall_percentages,  # 各个跌幅段的股票分布比例
            'rise_and_fall_sum': rise_and_fall_sum
        }
        # 按值排序并提取前三个键值对
        sorted_items = sorted(factors['rise_vs_fall']['percentages'].items(), key=lambda item: item[1], reverse=True)
        top_three_items = sorted_items[:3]
        # 构建新的字典
        factors['top_three'] = {
            'top1': {'key': top_three_items[0][0], 'value': top_three_items[0][1]},
            'top2': {'key': top_three_items[1][0], 'value': top_three_items[1][1]},
            'top3': {'key': top_three_items[2][0], 'value': top_three_items[2][1]},
        }
        # 资金流向因子 --------------------------------------------------
@@ -602,6 +610,18 @@
    if factors['sentiment']['zt_ratio'] > 0.05 and factors['sentiment']['sign'] == 1:
        signals.append("高情绪热度:涨停股多且人气向好")
    # 信号5:涨跌分布综合
    if factors['top_three']['top1']['value']+factors['top_three']['top2']['value']+factors['top_three']['top3']['value'] > 50:
        value = factors['top_three']['top1']['value'] + factors['top_three']['top2']['value'] + factors['top_three']['top3']['value']
        signals.append(f"涨跌分布:长尾分布{value}")
        if factors['top_three']['top1']['value']/factors['top_three']['top2']['value'] > 1.25:
            signals.append(f"涨跌分布:强势聚集{factors['top_three']['top1']['key']}:{factors['top_three']['top1']['value']}%")
        else:
            signals.append(f"涨跌分布:中度聚集{factors['top_three']['top1']['key']}:{factors['top_three']['top1']['value']}%")
    else:
        value = factors['top_three']['top1']['value'] + factors['top_three']['top2']['value'] + factors['top_three']['top3']['value']
        signals.append(f"涨跌分布:均匀分布{value}")
    return signals if signals else ["无显著信号:维持当前策略"]
@@ -623,10 +643,11 @@
                    connecting_board_height = data_cache.real_time_market_sentiment_dirt.get('lbgd', None)  # 连板高度
                    # 获取市场情绪-涨跌统计
                    data_cache.rise_and_fall_statistics_dirt = kpl_api.getMarketFelling()  # 涨跌统计字典
                    # 涨跌统计因子计算
                    factors = calculate_factors(data_cache.rise_and_fall_statistics_dirt)
                    # 涨跌统计生成信号
                    signals = generate_signals(factors)
                    if data_cache.rise_and_fall_statistics_dirt is not None:
                        # 涨跌统计因子计算
                        factors = calculate_factors(data_cache.rise_and_fall_statistics_dirt)
                        # 涨跌统计生成信号
                        signals = generate_signals(factors)
                    limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get('ZT', None)  # 涨停家数
                    actual_limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get('SJZT', None)  # 实际涨停家数
                    ST_limit_up_numbers = data_cache.rise_and_fall_statistics_dirt.get('STZT', None)  # ST涨停家数
@@ -654,14 +675,14 @@
                        logger.info(f"涨跌统计生成信号={signals}")
                        logger.info("\n========== 关键指标 ==========")
                        logger.info(f"总股票数: {factors['total_stocks']}\n"
                                    f"涨跌比(BDR): {factors['rise_vs_fall']['rise_vs_fall_ratio']:.2f}"
                                    f"极端波动比例: {factors['sentiment']['extreme_ratio']:.2%}"
                                    f"资金净流入(元): {round(factors['capital_flow']['net'] / 10000, 2)}万"
                                    f"涨停股占比: {factors['sentiment']['zt_ratio']:.2%}"
                                    f"市场情绪量化: {'积极' if factors['sentiment']['sign'] else '谨慎'}"
                                    f"聚集区域:{factors['rise_vs_fall']['rise_gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_gather_area'])}%"
                                    f"零散区域:{factors['rise_vs_fall']['rise_scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_scattered_area'])}%"
                                    f"涨跌因子字典={factors['rise_vs_fall']}")
                                    f"涨跌比(BDR): {factors['rise_vs_fall']['rise_vs_fall_ratio']:.2f}\n"
                                    f"极端波动比例: {factors['sentiment']['extreme_ratio']:.2%}\n"
                                    f"资金净流入(元): {round(factors['capital_flow']['net'] / 10000, 2)}万\n"
                                    f"涨停股占比: {factors['sentiment']['zt_ratio']:.2%}\n"
                                    f"市场情绪量化: {'积极' if factors['sentiment']['sign'] else '谨慎'}\n"
                                    f"聚集区域:{factors['rise_vs_fall']['rise_gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_gather_area'])}%\n"
                                    f"零散区域:{factors['rise_vs_fall']['rise_scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_scattered_area'])}%\n"
                                    f"涨跌因子字典={factors['rise_vs_fall']}\n")
                        logger.info("\n========== 策略信号 ==========")
                        for i, signal in enumerate(signals, 1):
                            logger.info(f"信号{i}: {signal}")
@@ -748,6 +769,7 @@
    print(f"极端波动比例: {factors['sentiment']['extreme_ratio']:.2%}")
    print(f"资金净流入(元): {round(factors['capital_flow']['net']/10000, 2)}万")
    print(f"涨停股占比: {factors['sentiment']['zt_ratio']:.2%}")
    print(f"聚集前三名情况字典=={factors['top_three']}")
    print(f"聚集区域:{factors['rise_vs_fall']['rise_gather_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_gather_area'])}%")
    print(f"零散区域:{factors['rise_vs_fall']['rise_scattered_area']},聚集区域的比例值:{factors['rise_vs_fall']['percentages'].get(factors['rise_vs_fall']['rise_scattered_area'])}%")
    print(f"市场情绪量化: {'积极' if factors['sentiment']['sign'] else '谨慎'}")