- 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
11 KiB
11 KiB
收敛三角形强度分六维度 - 数据分布分析
分析日期: 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.5,75%数据完全相同
- 📊 算法强偏好对称三角形: 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