褚宏光 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

11 KiB
Raw Permalink Blame History

收敛三角形强度分六维度 - 数据分布分析

分析日期: 2026-01-29
样本量: 18,004个有效三角形
分析对象: 强度分系统的6个核心维度 + 突破方向分类


📊 强度分系统构成

收敛三角形的强度评分由以下6个维度组成每个维度范围均为 [0, 1]

编号 维度名称 英文字段 权重占比 测量内容
1 突破幅度分 price_score 45% 突破后价格变化幅度
2 收敛度分 convergence_score 20% 三角形收敛程度
3 成交量分 volume_score 15% 突破时成交量放大
4 形态规则度 geometry_score 10% 枢轴点拟合贴合度
5 价格活跃度 activity_score 5% 通道空间利用率
6 倾斜度分 tilt_score 5% 三角形倾斜程度

: 突破幅度分分为向上(price_score_up)和向下(price_score_down)两个字段


🎯 核心发现

1 正态性: 全部非正态

7/7 维度全部拒绝正态分布假设 (p值≈0)

维度 正态检验 P值 结论
突破幅度分(向上) KS检验 0.000 非正态
突破幅度分(向下) KS检验 0.000 非正态
收敛度分 KS检验 7.3e-74 非正态
成交量分 KS检验 0.000 非正态
形态规则度 KS检验 0.000 非正态
价格活跃度 KS检验 1.4e-29 非正态
倾斜度分 KS检验 0.000 非正态

2 偏度分布

类型 维度数 占比 典型维度
右偏 (>0.5) 4 57% 突破幅度分、成交量分、形态规则度
对称 (-0.5~0.5) 2 29% 收敛度分、价格活跃度
左偏 (<-0.5) 1 14% 倾斜度分

右偏含义: "多数弱信号 + 少数强信号"的长尾结构

3 厚尾特征排行

排名 维度 超额峰度 尾部倍数* 等级
1 🔴 倾斜度分 46.33 7.8× 极端厚尾
2 🔴 突破幅度分(向下) 45.72 8.2× 极端厚尾
3 🟠 突破幅度分(向上) 13.38 15.7× 显著厚尾
4 🟡 形态规则度 4.56 11.9× 中度厚尾
5 🟡 成交量分 2.77 19.1× 中度厚尾
6 🟢 收敛度分 -1.05 0× 薄尾
7 🟢 价格活跃度 -0.25 0.6× 近正态

* 尾部倍数 = 实际3σ外数据占比 ÷ 正态分布3σ外占比(0.27%)


📈 各维度详细统计

1. 突破幅度分(向上) - price_score_up

均值: 0.0556  |  中位数: 0.0000 ⚠️  |  标准差: 0.1932
范围: [0.000, 1.000]  |  四分位: [0.000, 0.000]
偏度: 3.77 (强右偏)  |  超额峰度: 13.38 (显著厚尾)
尾部倍数: 15.7× (极端值频繁!)

解读:

  • 🔴 中位数=0: 超过50%的三角形尚未向上突破
  • 📊 Q25=Q75=0: 至少75%的数据=0未突破或弱突破
  • ⚠️ 尾部15.7倍: 强突破事件是正态分布预测的15.7倍
  • 💡 实战建议:
    • 不要用均值(0.056)作为阈值
    • 建议筛选: price_score_up > 0.15 (约P85-P90)
    • 极强突破: > 0.3

2. 突破幅度分(向下) - price_score_down

均值: 0.0194  |  中位数: 0.0000  |  标准差: 0.1163
范围: [0.000, 1.000]  |  四分位: [0.000, 0.000]
偏度: 6.70 (极强右偏!)  |  超额峰度: 45.72 (极端厚尾!)
尾部倍数: 8.2×

解读:

  • 🔴 向下突破更稀缺: 中位数=0, Q75=0
  • 📊 最极端的右偏: 偏度6.70,仅次于倾斜度分
  • ⚠️ 超级厚尾: 超额峰度45.72第2高
  • 💡 实战意义:
    • 向下突破比向上突破更不可预测
    • 极端向下突破是真正的黑天鹅事件

3. 收敛度分 - convergence_score

均值: 0.7980  |  中位数: 0.8033  |  标准差: 0.1226
范围: [0.550, 1.000]  |  四分位: [0.702, 0.906]
偏度: -0.23 (基本对称)  |  超额峰度: -1.05 (薄尾!)
尾部倍数: 0× (无极端值)

解读:

  • 高质量维度: 大多数值在0.7-0.9之间
  • 📊 薄尾分布: 唯一的薄尾维度,接近均匀分布
  • 💡 实战建议:
    • 高质量收敛: > 0.85 (约P60-P70)
    • 极佳收敛: > 0.90 (约P75+)

4. 成交量分 - volume_score

均值: 0.1505  |  中位数: 0.0000 ⚠️  |  标准差: 0.2829
范围: [0.000, 1.000]  |  四分位: [0.000, 0.166]
偏度: 1.99 (右偏)  |  超额峰度: 2.77 (中度厚尾)
尾部倍数: 19.1× (最高!)

解读:

  • 🔴 50%无放量: 中位数=0
  • 📊 尾部放大最严重: 19.1倍,是所有维度中最高
  • ⚠️ 放量突破是稀缺事件: 仅25%有明显放量(Q75=0.166)
  • 💡 策略建议:
    • 不作为必要条件 (会过滤掉50%有效信号)
    • 作为加分项 (volume_score > 0.5 = 顶级信号)

5. 形态规则度 - geometry_score

均值: 0.0519  |  中位数: 0.0051  |  标准差: 0.0959
范围: [0.000, 0.492]  |  四分位: [0.000, 0.052]
偏度: 2.28 (右偏)  |  超额峰度: 4.56 (中度厚尾)
尾部倍数: 11.9×

解读:

  • 📊 大多数形态不够规则: 中位数仅0.005
  • ⚠️ 高规则度稀缺: Q75=0.052
  • 💡 建议: 此维度不适合作为硬性筛选条件

6. 价格活跃度 - activity_score

均值: 0.0688  |  中位数: 0.0709  |  标准差: 0.0211
范围: [0.006, 0.150]  |  四分位: [0.055, 0.083]
偏度: -0.20 (对称)  |  超额峰度: -0.25 (近正态!)
尾部倍数: 0.6× (无厚尾)

解读:

  • 最接近正态的维度: 超额峰度仅-0.25
  • 📊 分布稳定: 标准差小(0.021),变异性低
  • 💡 特点: 相对"正常"的维度,可靠性较高

7. 倾斜度分 - tilt_score

均值: 0.4969  |  中位数: 0.5000  |  标准差: 0.0171
范围: [0.344, 0.630]  |  四分位: [0.500, 0.500] ⚠️
偏度: -6.17 (极强左偏!)  |  超额峰度: 46.33 (极端厚尾!)
尾部倍数: 7.8×

解读:

  • 🔴 最极端的分布: Q25=Q75=0.575%数据完全相同
  • 📊 算法强偏好对称三角形: 0.5代表完全对称
  • ⚠️ 上升/下降三角形稀缺: 仅在长尾中出现
  • 💡 启示:
    • 如需识别上升/下降三角形,需调整算法参数
    • 当前算法设计就是为对称三角形优化的

💡 实战建议

阈值设置 (基于百分位数)

# 突破幅度分(向上) - 三档筛选
宽松: price_score_up > 0.10  # 约P80
适中: price_score_up > 0.15  # 约P85-P90 ⭐推荐
严格: price_score_up > 0.30  # 约P95+

# 收敛度分 - 高质量收敛
高质量: convergence_score > 0.85  # 约P60
极佳: convergence_score > 0.90     # 约P75+

# 成交量分 - 作为加分项
有放量: volume_score > 0.2        # 约P70
强放量: volume_score > 0.5        # 约P85 (稀缺信号)

禁止的做法

# 错误1: 使用均值作为阈值
threshold = df['price_score_up'].mean()  # 0.056, 被极端值拉高

# 错误2: 假设正态分布
mu = df['price_score_up'].mean()
sigma = df['price_score_up'].std()
threshold = mu + 2*sigma  # 基于正态假设,会失效

# 错误3: 要求必须放量
signals = df[df['volume_score'] > 0]  # 会过滤掉50%有效信号

推荐的策略

# 策略1: 多维度组合(AND条件)
high_quality = (
    (df['price_score_up'] > 0.15) &      # 强突破
    (df['convergence_score'] > 0.85) &   # 高收敛
    (df['activity_score'] > 0.06)        # 正常活跃度
)

# 策略2: 放量作为加分项
premium_signals = high_quality & (df['volume_score'] > 0.5)
regular_signals = high_quality & (df['volume_score'] <= 0.5)

# 策略3: 动态百分位数
def get_dynamic_threshold(df, percentile=90):
    return df['price_score_up'].quantile(percentile/100)

📊 维度权重合理性分析

当前权重分配

维度 权重 数据特征 权重合理性
突破幅度分 45% 极端右偏+厚尾 合理 - 最重要的信号
收敛度分 20% 对称+薄尾 合理 - 稳定可靠
成交量分 15% 中位数=0 ⚠️ 偏高 - 建议降至10%
形态规则度 10% 中位数极低 ⚠️ 偏高 - 建议降至5%
价格活跃度 5% 近正态 合理 - 稳定但区分度低
倾斜度分 5% 极端偏斜 合理 - 低权重适合偏好型指标

建议调整

突破幅度分: 45% (保持)
收敛度分: 25% (↑5%) - 最稳定可靠的维度
成交量分: 10% (↓5%) - 中位数=0导致区分度低
形态规则度: 5% (↓5%) - 数值普遍过低
价格活跃度: 10% (↑5%) - 近正态且稳定
倾斜度分: 5% (保持) - 作为辅助指标

🔍 异常发现与解释

1. 为什么突破幅度分的中位数是0?

原因:

  • 大多数三角形检测时尚未突破或刚突破
  • price_score仅在明显突破时>0
  • 检测窗口内包含大量"形成中"的三角形

不是Bug: 这是正常现象,反映了真实市场状态

2. 为什么倾斜度分如此极端?

原因:

  • 算法设计就是为识别对称三角形优化的
  • 对称三角形(tilt_score=0.5)是主流形态
  • 上升/下降三角形被视为特例

启示: 如需平衡识别三种类型,需调整算法权重

3. 为什么成交量分尾部倍数最高(19.1×)?

原因:

  • 成交量是最不可预测的变量
  • 放量突破是典型的"黑天鹅"事件
  • 大多数时候无放量,但一旦放量就暴增

意义: 放量确认的信号确实非常稀缺


📁 文件清单

本次分析生成以下文件:

文件名 说明
distribution_analysis_强度分六维度.csv 统计数据表
distribution_plots_强度分六维度.png 7个维度分布图
qq_plots_强度分六维度.png Q-Q图(正态性检验)
boxplots_强度分六维度.png 箱线图(异常值识别)
analyze_distribution_强度分六维度.py 分析脚本
强度分六维度_分析报告.md 本文档

🎯 最重要的3个结论

1. 所有强度分维度均非正态 → 必须改变统计方法

  • 传统的均值±kσ、t检验全部失效
  • 立即切换到百分位数和非参数方法

2. 突破幅度分和成交量分的极端两极分化

  • 中位数=0 (大多数无突破/无放量)
  • 但尾部倍数15-19× (极端事件频繁)
  • 策略: 聚焦高百分位数(P85-P95)

3. 倾斜度分的极端偏好 → 算法特性

  • 75%恰好=0.5 (对称三角形)
  • 这不是Bug,是Feature
  • 当前算法就是为对称三角形设计的

生成时间: 2026-01-29
数据版本: converging_triangles v1原版
分析工具: Python + Scipy + Matplotlib