- 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
333 lines
11 KiB
Markdown
333 lines
11 KiB
Markdown
# 收敛三角形强度分六维度 - 数据分布分析
|
||
|
||
**分析日期**: 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代表完全对称
|
||
- ⚠️ **上升/下降三角形稀缺**: 仅在长尾中出现
|
||
- 💡 **启示**:
|
||
- 如需识别上升/下降三角形,需调整算法参数
|
||
- 当前算法设计就是为对称三角形优化的
|
||
|
||
---
|
||
|
||
## 💡 实战建议
|
||
|
||
### ✅ 阈值设置 (基于百分位数)
|
||
|
||
```python
|
||
# 突破幅度分(向上) - 三档筛选
|
||
宽松: 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 (稀缺信号)
|
||
```
|
||
|
||
### ❌ 禁止的做法
|
||
|
||
```python
|
||
# 错误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%有效信号
|
||
```
|
||
|
||
### ✅ 推荐的策略
|
||
|
||
```python
|
||
# 策略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
|