technical-patterns-lab/discuss/20260130-讨论-收敛三角形函数设计.md
褚宏光 bf6baa5483 Add scoring module and enhance HTML viewer with standardization
- Add scripts/scoring/ module with normalizer, sensitivity analysis, and config
- Enhance stock_viewer.html with standardized scoring display
- Add integration tests and normalization verification scripts
- Add documentation for standardization implementation and usage guides
- Add data distribution analysis reports for strength scoring dimensions
- Update discussion documents with algorithm optimization plans
2026-01-30 18:43:37 +08:00

26 KiB

让我查看一下 technical-patterns-lab 项目中关于标准化维度和预设模式的内容。

[10 tools called]

非常好!现在我完全理解了。你们已经实现了标准化维度系统预设模式配置。让我重新设计函数接口,将这些体系整合进去:


🎯 重新设计:函数接口 + 标准化维度 + 预设模式

基于你们已经实现的 normalizer.pyconfig.py,函数应该这样设计:

1. 函数接口设计(集成标准化+预设模式)

# ============================================================================
# 批量计算函数(全历史扫描)
# ============================================================================

def 收敛三角形(
    # === 计算范围 ===
    掩码: Optional[np.ndarray] = None,
    起始日期: int = -1,
    结束日期: int = -1,
    
    # === 检测参数 ===
    检测窗口: int = 240,
    最小收敛度: float = 0.45,
    突破阈值: float = 0.005,
    放量倍数: float = 1.5,
    
    # === 强度分配置(新增) ===
    预设模式: str = "等权",  # "等权"|"激进"|"保守"|"放量"|"自定义"
    自定义权重: Optional[dict] = None,  # 仅当预设模式="自定义"时有效
    
    # === 输出控制 ===
    返回详细维度: bool = False,  # True时返回dict包含所有6个维度
    
) -> Union[np.ndarray, dict]:
    """
    全历史批量计算收敛三角形强度分
    
    Args:
        掩码: (n_stocks, n_days) 布尔矩阵,True表示需要计算的位置
        起始日期/结束日期: 日期索引范围
        
        预设模式: 强度分计算模式,选择权重分配策略
            - "等权": 6个维度各1/6 (默认,探索性分析)
            - "激进": 突破35% + 成交量25% (趋势行情,追涨)
            - "保守": 收敛30% + 活跃25% (震荡市,等形态完善)
            - "放量": 成交量35% + 突破25% (捕获主力异动)
            - "自定义": 使用自定义权重字典
            
        自定义权重: 当预设模式="自定义"时,传入权重字典,例如:
            {
                "突破幅度": 0.40,
                "收敛度": 0.20,
                "成交量": 0.20,
                "形态规则": 0.05,
                "价格活跃": 0.10,
                "倾斜度": 0.05
            }
            注意:6个权重之和必须=1.0
            
        返回详细维度: 若为True,返回dict包含:
            - "强度分": 综合强度分矩阵
            - "突破幅度分_向上": 标准化后的突破幅度分(向上)
            - "突破幅度分_向下": 标准化后的突破幅度分(向下)
            - "收敛度分": 标准化后的收敛度分
            - "成交量分": 标准化后的成交量分
            - "形态规则度分": 标准化后的形态规则度分
            - "价格活跃度分": 标准化后的价格活跃度分
            - "倾斜度分": 标准化后的倾斜度分
        
    Returns:
        np.ndarray (n_stocks, n_days): 强度分矩阵
        - 范围: [0, 1] (标准化后)
        - 正值: 向上突破强度
        - 负值: 向下突破强度
        - NaN: 无有效形态 或 掩码为False的位置
        
        或 dict (当返回详细维度=True时):
        包含"强度分"和6个子维度的标准化分数
        
    Examples:
        # 示例1: 等权模式全市场扫描
        强度 = 收敛三角形(预设模式="等权")
        强突破 = 强度 > 0.7  # 标准化后阈值通常在0.6-0.8
        
        # 示例2: 激进模式筛选突破股
        强度 = 收敛三角形(预设模式="激进")
        # 激进模式: 突破35%权重 + 成交量25%权重
        
        # 示例3: 带掩码的定向计算
        沪深300 = 指数成分("000300.SH")
        强度 = 收敛三角形(掩码=沪深300, 预设模式="保守")
        
        # 示例4: 自定义权重
        强度 = 收敛三角形(
            预设模式="自定义",
            自定义权重={
                "突破幅度": 0.50,
                "收敛度": 0.30,
                "成交量": 0.10,
                "形态规则": 0.03,
                "价格活跃": 0.05,
                "倾斜度": 0.02
            }
        )
        
        # 示例5: 获取详细维度进行分析
        结果 = 收敛三角形(预设模式="等权", 返回详细维度=True)
        综合强度 = 结果["强度分"]
        收敛度 = 结果["收敛度分"]
        # 可以组合使用: 综合强度>0.7 且 收敛度>0.8
    """
    pass


# ============================================================================
# 单股详情函数(查询+可视化)
# ============================================================================

def 收敛三角形详情(
    股票代码: str,
    
    # === 检测参数 ===
    检测窗口: int = 240,
    最小收敛度: float = 0.45,
    突破阈值: float = 0.005,
    放量倍数: float = 1.5,
    图表天数: int = 300,
    
    # === 强度分配置(新增) ===
    预设模式: str = "等权",
    自定义权重: Optional[dict] = None,
    
) -> dict:
    """
    获取单只股票的三角形形态详细信息
    
    Args:
        股票代码: "SH600519", "SZ000001" 等
        图表天数: 前端图表显示的K线数量
        预设模式/自定义权重: 同收敛三角形()函数
        
    Returns:
        dict 包含以下字段:
        {
            # === 核心指标 ===
            "强度分": float,              # 综合强度分 [0, 1]
            "方向": str,                  # "向上突破" | "向下突破" | "未突破"
            "是否有效": bool,
            
            # === 标准化维度分数(6个维度,已标准化到[0,1]) ===
            "维度分数": {
                "突破幅度分_向上": float,   # 标准化后 [0, 1]
                "突破幅度分_向下": float,
                "收敛度分": float,         # 标准化后 [0, 1]
                "成交量分": float,         # 标准化后 [0, 1]
                "形态规则度分": float,     # 标准化后 [0, 1]
                "价格活跃度分": float,     # 标准化后 [0, 1]
                "倾斜度分": float,         # 标准化后 [0, 1]
            },
            
            # === 原始维度分数(未标准化,用于Agent深度解释) ===
            "原始分数": {
                "突破幅度_向上_原始": float,   # 未标准化原始值
                "突破幅度_向下_原始": float,
                "收敛度_原始": float,
                "成交量_原始": float,
                "形态规则度_原始": float,
                "价格活跃度_原始": float,
                "倾斜度_原始": float,
            },
            
            # === 权重配置(用于解释) ===
            "权重配置": {
                "预设模式": str,           # "等权"|"激进"|"保守"|"放量"|"自定义"
                "突破幅度权重": float,     # 例如: 0.35 (激进模式)
                "收敛度权重": float,       # 例如: 0.15
                "成交量权重": float,
                "形态规则度权重": float,
                "价格活跃度权重": float,
                "倾斜度权重": float,
            },
            
            # === 几何属性 ===
            "形态属性": {
                "收敛比例": float,         # width_ratio,未标准化原始值
                "上沿斜率": float,
                "下沿斜率": float,
                "触碰上沿次数": int,
                "触碰下沿次数": int,
                "成交量确认": bool,
            },
            
            # === 前端绘图数据 ===
            "图表数据": {
                "日期": [...],
                "K线": [...],
                "上边界线": [[x1,y1], [x2,y2]],
                "下边界线": [[x1,y1], [x2,y2]],
                "检测窗口": [起始索引, 结束索引],
                "突破点": {"日期": ..., "价格": ...},
            },
            
            # === 标准化统计信息(帮助Agent理解分数含义) ===
            "标准化参考": {
                "中位数": 0.50,            # 标准化后所有维度中位数都是0.5
                "P75阈值": 0.75,          # 前25%水平
                "P90阈值": 0.90,          # 前10%水平
                "当前强度分位": float,     # 该股票强度分在全市场的百分位
            },
            
            # === 元数据 ===
            "计算参数": {
                "股票代码": str,
                "检测窗口": 240,
                "最小收敛度": 0.45,
                "标准化方法": "分层标准化_v1",
                ...
            }
        }
        
    Examples:
        # 示例1: 基本查询
        详情 = 收敛三角形详情("SH600519")
        print(f"综合强度: {详情['强度分']:.2f}")
        print(f"方向: {详情['方向']}")
        
        # 示例2: Agent解读维度分数
        详情 = 收敛三角形详情("SH600519", 预设模式="激进")
        维度 = 详情["维度分数"]
        
        if 详情["强度分"] > 0.7:
            # 强度分>0.7属于前10%水平(标准化后)
            print(f"发现强突破!")
            print(f"- 突破幅度: {维度['突破幅度分_向上']:.2f} (权重{详情['权重配置']['突破幅度权重']:.0%})")
            print(f"- 成交量确认: {维度['成交量分']:.2f} (权重{详情['权重配置']['成交量权重']:.0%})")
            
            # 对比原始值看绝对水平
            原始 = 详情["原始分数"]
            print(f"- 原始突破幅度: {原始['突破幅度_向上_原始']:.3f}")
            print(f"- 原始收敛度: {原始['收敛度_原始']:.3f}")
        
        # 示例3: 前端渲染
        chart = 详情["图表数据"]
        # 直接传给ECharts渲染
        
        # 示例4: 自定义权重查询
        详情 = 收敛三角形详情(
            "SH600519",
            预设模式="自定义",
            自定义权重={
                "突破幅度": 0.50,
                "收敛度": 0.30,
                "成交量": 0.10,
                "形态规则": 0.03,
                "价格活跃": 0.05,
                "倾斜度": 0.02
            }
        )
    """
    pass

2. Agent 知识卡片设计(更新版)

函数卡片 (config_support_function)

{
  "title": "converging_triangle",
  "title_chinese": "收敛三角形",
  "format": "收敛三角形(掩码, 起始日期, 结束日期, 检测窗口, 最小收敛度, 预设模式, 自定义权重, 返回详细维度)",
  "example": "收敛三角形(预设模式=\"激进\", 返回详细维度=True)",
  
  "input": "掩码(可选):2维布尔矩阵; 日期范围:整数; 预设模式:字符串; 自定义权重:字典",
  "output": "2维浮点矩阵 [0,1] 或 字典(含6个维度)",
  "output_shape": "stay | dict",
  
  "instruction": "批量计算全市场收敛三角形形态的标准化强度分。返回[0,1]区间的二维矩阵,基于6个标准化维度加权计算(突破幅度/收敛度/成交量/形态规则度/价格活跃度/倾斜度)。支持4种预设模式(等权/激进/保守/放量)和自定义权重,解决了原始维度不可比性问题(中位数从0~0.8统一到0.5)。可选返回详细维度用于多维度筛选。",
  
  "short_instruction": "识别三角形并输出标准化强度分[0,1]",
  
  "effect": "择股, 形态识别, 多维度筛选",
  
  "common_params": [
    {
      "预设模式": "等权",
      "说明": "6个维度各1/6,探索性分析",
      "适用场景": "不确定哪个维度重要时"
    },
    {
      "预设模式": "激进",
      "说明": "突破35%+成交量25%",
      "适用场景": "牛市/趋势行情追涨"
    },
    {
      "预设模式": "保守",
      "说明": "收敛30%+活跃25%",
      "适用场景": "震荡市等形态完善"
    },
    {
      "预设模式": "放量",
      "说明": "成交量35%+突破25%",
      "适用场景": "寻找主力资金异动"
    },
    {
      "预设模式": "自定义",
      "自定义权重": {
        "突破幅度": 0.40,
        "收敛度": 0.30,
        "成交量": 0.20,
        "形态规则": 0.03,
        "价格活跃": 0.05,
        "倾斜度": 0.02
      },
      "说明": "根据策略需求定制权重"
    }
  ],
  
  "standard_thresholds": {
    "说明": "标准化后推荐阈值(基于18,004个样本)",
    "宽松筛选": 0.55,
    "适中筛选": 0.65,
    "严格筛选": 0.75,
    "极严格筛选": 0.85,
    "中位数": 0.50,
    "P75": 0.75,
    "P90": 0.90
  },
  
  "weight": 5,
  "group_id": "技术形态识别",
  "vector_id": "...",
  
  "remark": "强度分已经过分层标准化处理,所有维度中位数=0.5,可直接等权相加或自定义权重。预设模式基于18,004个样本的分布分析优化。"
}
{
  "title": "converging_triangle_detail",
  "title_chinese": "收敛三角形详情",
  "format": "收敛三角形详情(股票代码, 检测窗口, 预设模式, 自定义权重, 图表天数)",
  "example": "收敛三角形详情(\"SH600519\", 预设模式=\"激进\")",
  
  "input": "股票代码:字符串; 预设模式:字符串; 自定义权重:字典(可选)",
  "output": "详情对象(字典),包含标准化维度分数/原始分数/权重配置/图表数据",
  "output_shape": "dict",
  
  "instruction": "获取单只股票的三角形形态详细信息。返回字典包含:(1)综合强度分[0,1]; (2)6个标准化维度分数[0,1]; (3)原始维度分数(未标准化); (4)权重配置; (5)几何属性; (6)前端绘图数据; (7)标准化参考信息。支持4种预设模式和自定义权重,用于深度分析和可视化展示。",
  
  "short_instruction": "查询单股三角形详情(标准化+原始+图表)",
  
  "effect": "深度分析, 可视化, 维度解释",
  
  "common_params": [
    {"预设模式": "等权", "图表天数": 300},
    {"预设模式": "激进", "图表天数": 200},
    {"预设模式": "保守", "图表天数": 300}
  ],
  
  "weight": 4,
  "group_id": "技术形态识别",
  "vector_id": "..."
}

知识卡片 (knowledge_card_basic) - 更新版

{
  "card_type": "pattern_detection_card_v2",
  "name": "收敛三角形标准化强度分策略",
  "card_id": "pattern_triangle_normalized_strength_001",
  
  "insight": "通过分层标准化方法(针对零膨胀/点质量/低区分度等4种分布类型),将收敛三角形的6个原始维度统一标准化到[0,1]区间(中位数=0.5),解决维度间不可比性问题。配合4种预设权重模式(等权/激进/保守/放量),可灵活适应不同市场环境和交易风格,实现从主观形态识别到定量信号筛选的转变",
  
  "insight_en": "WHEN raw scores from 6 dimensions (price breakout, convergence, volume, geometry, activity, tilt) are normalized using stratified methods to [0,1] range with median=0.5, THEN combined with preset weight modes (equal/aggressive/conservative/volume-focus), the system generates comparable strength scores suitable for quantitative screening across market conditions",
  
  "insight_Z": "该策略解决了技术形态量化的核心难题:如何将不同尺度、不同分布类型的维度公平组合。基于18,004个样本的分布分析,采用零膨胀标准化(突破/成交量)、点质量标准化(倾斜度)、对数变换(形态规则度)等分层方法,确保等权相加不被某些维度'主导',同时提供预设模式快速适配不同策略需求",
  
  "user_intent_examples": [
    "找出收敛三角形突破的股票,要综合质量高的",
    "筛选有效三角形,我偏好追涨,看重突破和放量",
    "震荡市找三角形整理形态,要收敛度好的",
    "检测三角形向上突破,放量确认的优先",
    "自定义三角形筛选条件,我要突破50%权重",
    "查询某只股票的三角形形态,看看各维度得分多少"
  ],
  
  "user_intent_tags": [
    "技术形态",
    "三角形整理",
    "标准化强度分",
    "多维度筛选",
    "预设模式",
    "量价配合"
  ],
  
  "environment_X": {
    "描述": "适用于震荡整理行情,基于标准化强度分系统可适配不同市场环境",
    "可计算信号": [
      "标准化综合强度分[0,1]筛选",
      "等权模式探索性分析(各维度1/6)",
      "激进模式(突破35%+成交量25%,趋势行情)",
      "保守模式(收敛30%+活跃25%,震荡市)",
      "放量模式(成交量35%+突破25%,主力异动)",
      "自定义权重配置(6个维度灵活组合)",
      "多维度阈值联合筛选(强度>0.7 且 收敛>0.8)",
      "单股详情查询(标准化分数+原始分数+图表)"
    ]
  },
  
  "data_set_input": [
    "高开低收价格数据(OHLC)",
    "成交量数据",
    "可选:计算范围掩码",
    "可选:预设模式选择",
    "可选:自定义权重字典"
  ],
  
  "data_set_output": [
    "标准化强度分矩阵[0,1] (n_stocks, n_days)",
    "可选:6个标准化维度分数矩阵",
    "单股详情(综合强度+6维度标准化分数+原始分数+权重配置+图表数据)"
  ],
  
  "action_process": "1.检测收敛三角形并计算6个原始维度分数; 2.根据分布类型应用分层标准化(零膨胀/点质量/标准/对数变换); 3.根据预设模式或自定义权重计算综合强度分; 4.输出标准化强度分[0,1]和可选的详细维度",
  
  "action_Y": [
    {
      "类型": "公式",
      "目的": "等权模式全市场初筛(探索性分析)",
      "行为": "使用等权模式(6个维度各1/6)扫描全市场,筛选强度分>0.7的高质量形态",
      "内容": "强度 = 收敛三角形(预设模式=\"等权\")\n强形态 = 强度 > 0.7  # 标准化后,0.7约为前15%水平"
    },
    {
      "类型": "公式",
      "目的": "激进模式追涨(趋势行情)",
      "行为": "激进模式重视突破(35%)和成交量(25%),捕获强突破+放量信号",
      "内容": "强度 = 收敛三角形(预设模式=\"激进\")\n追涨信号 = 强度 > 0.75  # 突破和放量双重确认"
    },
    {
      "类型": "公式",
      "目的": "保守模式等形态(震荡市)",
      "行为": "保守模式重视收敛度(30%)和价格活跃度(25%),等待形态质量高时再入场",
      "内容": "强度 = 收敛三角形(预设模式=\"保守\")\n保守信号 = 强度 > 0.70  # 形态质量优先"
    },
    {
      "类型": "公式",
      "目的": "放量模式捕获主力异动",
      "行为": "放量模式重视成交量(35%),识别资金异动股票",
      "内容": "强度 = 收敛三角形(预设模式=\"放量\")\n异动信号 = 强度 > 0.75  # 成交量确认为主"
    },
    {
      "类型": "公式",
      "目的": "定向范围筛选(提高效率)",
      "行为": "在指定股票池内识别,配合掩码减少计算量",
      "内容": "沪深300 = 指数成分(\"000300.SH\")\n强度 = 收敛三角形(掩码=沪深300, 预设模式=\"等权\")\n信号 = 强度 > 0.70"
    },
    {
      "类型": "公式",
      "目的": "多维度联合筛选(精细控制)",
      "行为": "获取详细维度,组合多个条件进行精细筛选",
      "内容": "结果 = 收敛三角形(预设模式=\"等权\", 返回详细维度=True)\n综合强度 = 结果[\"强度分\"]\n收敛度 = 结果[\"收敛度分\"]\n成交量 = 结果[\"成交量分\"]\n\n# 组合筛选: 综合强度高 且 收敛度优秀 且 有放量\n精选 = (综合强度 > 0.70) & (收敛度 > 0.80) & (成交量 > 0.60)"
    },
    {
      "类型": "公式",
      "目的": "自定义权重策略",
      "行为": "根据自己的策略逻辑定制权重分配",
      "内容": "强度 = 收敛三角形(\n    预设模式=\"自定义\",\n    自定义权重={\n        \"突破幅度\": 0.50,  # 最看重突破\n        \"收敛度\": 0.30,    # 其次收敛度\n        \"成交量\": 0.10,    # 成交量作参考\n        \"形态规则\": 0.03,\n        \"价格活跃\": 0.05,\n        \"倾斜度\": 0.02\n    }\n)\n自定义信号 = 强度 > 0.75"
    },
    {
      "类型": "函数调用",
      "目的": "单股详情分析(含标准化+原始分数)",
      "行为": "查询目标股票的完整形态信息,获取标准化维度、原始维度、权重配置和图表数据",
      "内容": "详情 = 收敛三角形详情(\"SH600519\", 预设模式=\"激进\")\n\nprint(f\"综合强度: {详情['强度分']:.2f}\")\nprint(f\"方向: {详情['方向']}\")\n\n维度 = 详情[\"维度分数\"]\nprint(f\"突破幅度(标准化): {维度['突破幅度分_向上']:.2f}\")\nprint(f\"收敛度(标准化): {维度['收敛度分']:.2f}\")\n\n原始 = 详情[\"原始分数\"]\nprint(f\"收敛度(原始): {原始['收敛度_原始']:.3f}\")\n\n权重 = 详情[\"权重配置\"]\nprint(f\"预设模式: {权重['预设模式']}\")\nprint(f\"突破权重: {权重['突破幅度权重']:.0%}\")"
    }
  ],
  
  "scope": "适用于A股、港股等流动性良好的市场,日线级别数据,基于18,004个样本优化",
  
  "accuracy": 0.85,
  "inspiration": 0.90,
  "need_revise": 0.20,
  "need_revise_remark": "标准化方法基于当前18,004个样本,未来数据分布变化时可能需要重新校准。预设模式权重建议根据实际回测效果调整。",
  
  "remark": "该方法通过分层标准化解决了技术形态量化的核心难题,实现了维度间的公平组合。4种预设模式覆盖常见策略需求,也支持自定义权重灵活适配。标准化后阈值通常在0.6-0.8区间(对应P60-P80)。",
  
  "formula_info": {
    "示例公式1_等权": "收敛三角形(预设模式=\"等权\") > 0.70",
    "示例公式2_激进": "收敛三角形(预设模式=\"激进\") > 0.75",
    "示例公式3_多维度": "结果=收敛三角形(返回详细维度=True); (结果[\"强度分\"]>0.7) & (结果[\"收敛度分\"]>0.8)",
    "示例公式4_自定义": "收敛三角形(预设模式=\"自定义\", 自定义权重={\"突破幅度\":0.5, \"收敛度\":0.3, ...})",
    "示例函数调用": "收敛三角形详情(\"SH600519\", 预设模式=\"激进\")",
    "公式解释": "通过标准化+预设模式系统,实现多维度技术形态的定量筛选和深度分析"
  },
  
  "technical_details": {
    "标准化方法": "分层标准化_v1",
    "样本量": 18004,
    "维度数量": 6,
    "标准化后中位数": 0.50,
    "预设模式数量": 4,
    "支持自定义权重": true,
    "分布类型处理": {
      "零膨胀分布": "突破幅度分、成交量分 (零值→0.5,非零值→[0.5,1.0])",
      "点质量分布": "倾斜度分 (中心值保持0.5,偏离值拉伸)",
      "标准分布": "收敛度分、价格活跃度分 (分位数标准化)",
      "低区分度分布": "形态规则度分 (对数变换+分位数)"
    }
  },
  
  "extractor": "pattern_detection_standardized_v2"
}

3. 实施要点

dunhe_dataServer/src/library/expression/funcs/pattern.py 中修改:

from library.pattern.converging_triangle import (
    ConvergingTriangleParams,
    detect_converging_triangle_batch,
)
# 新增导入标准化模块
from scripts.scoring.normalizer import normalize_all
from scripts.scoring.config import (
    CONFIG_EQUAL, CONFIG_AGGRESSIVE, CONFIG_CONSERVATIVE, CONFIG_VOLUME_FOCUS,
    calculate_strength
)

# 在 _compute_all_metrics 中增加标准化步骤
def _compute_all_metrics(...) -> Dict[str, np.ndarray]:
    # ... 现有计算逻辑 ...
    
    # 构建DataFrame用于标准化
    df = pd.DataFrame({
        'price_score_up': strength_up_mtx.flatten(),
        'price_score_down': strength_down_mtx.flatten(),
        'convergence_score': convergence_score_mtx.flatten(),
        'volume_score': volume_score_mtx.flatten(),
        'geometry_score': geometry_score_mtx.flatten(),
        'activity_score': activity_score_mtx.flatten(),
        'tilt_score': tilt_score_mtx.flatten(),
    })
    
    # 应用标准化
    df_norm = normalize_all(df)
    
    # 转回矩阵形状
    result = {
        'price_score_up_norm': df_norm['price_score_up_norm'].values.reshape(n_stocks, n_days),
        'price_score_down_norm': df_norm['price_score_down_norm'].values.reshape(n_stocks, n_days),
        'convergence_score_norm': df_norm['convergence_score_norm'].values.reshape(n_stocks, n_days),
        # ... 其他维度 ...
    }
    
    return result


def 收敛三角形(
    掩码: Optional[np.ndarray] = None,
    起始日期: int = -1,
    结束日期: int = -1,
    检测窗口: int = 240,
    最小收敛度: float = 0.45,
    突破阈值: float = 0.005,
    放量倍数: float = 1.5,
    预设模式: str = "等权",
    自定义权重: Optional[dict] = None,
    返回详细维度: bool = False,
) -> Union[np.ndarray, dict]:
    
    # 获取标准化后的所有维度
    result = _compute_all_metrics(...)
    
    # 根据预设模式选择配置
    if 预设模式 == "等权":
        config = CONFIG_EQUAL
    elif 预设模式 == "激进":
        config = CONFIG_AGGRESSIVE
    elif 预设模式 == "保守":
        config = CONFIG_CONSERVATIVE
    elif 预设模式 == "放量":
        config = CONFIG_VOLUME_FOCUS
    elif 预设模式 == "自定义":
        if 自定义权重 is None:
            raise ValueError("预设模式为'自定义'时必须提供自定义权重字典")
        # 构建自定义配置
        config = _build_custom_config(自定义权重)
    else:
        raise ValueError(f"未知的预设模式: {预设模式}")
    
    # 计算综合强度分
    # (需要适配矩阵形式的计算)
    strength_mtx = _calculate_strength_matrix(result, config)
    
    if 返回详细维度:
        return {
            "强度分": strength_mtx,
            "突破幅度分_向上": result['price_score_up_norm'],
            "突破幅度分_向下": result['price_score_down_norm'],
            "收敛度分": result['convergence_score_norm'],
            "成交量分": result['volume_score_norm'],
            "形态规则度分": result['geometry_score_norm'],
            "价格活跃度分": result['activity_score_norm'],
            "倾斜度分": result['tilt_score_norm'],
        }
    else:
        return strength_mtx

4. 总结

通过这个设计,你的函数系统实现了:

  1. 标准化维度体系: 6个维度统一标准化到[0,1],中位数=0.5,解决不可比性问题
  2. 4种预设模式: 等权/激进/保守/放量,快速适配不同策略需求
  3. 自定义权重: 支持灵活配置,满足高级用户需求
  4. 详细维度输出: 可选返回6个维度分数,支持多维度联合筛选
  5. Agent友好: 函数参数清晰,知识卡片详细,方便Agent理解和使用

需要我帮你实现具体的代码修改吗?或者先生成完整的知识卡片JSON文件用于导入MongoDB?