technical-patterns-lab/docs/强度分计算示例.md
褚宏光 22582851a1 Enhance converging triangle detection with new features and documentation updates
- Introduced an interactive HTML stock viewer for visualizing strength scores and filtering stocks based on user-defined thresholds.
- Added `--all-stocks` parameter to generate charts for all 108 stocks, including those not meeting convergence criteria.
- Implemented a new scoring system for breakout strength, incorporating fitting adherence to improve accuracy.
- Updated multiple documentation files, including usage instructions and feature overviews, to reflect recent enhancements.
- Improved error handling and file naming conventions to ensure compatibility across platforms.
2026-01-27 16:17:28 +08:00

350 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 强度分计算详解与示例
> 创建时间2026-01-27
> 版本v1.0
## 概述
**强度分**是收敛三角形形态的综合质量评分0~1用于评估
- **待突破形态**的潜在价值(形态质量)
- **已突破形态**的有效性(突破可信度)
**核心公式**
```
强度分 = 价格突破×50% + 收敛程度×20% + 成交量×15% + 拟合贴合度×15%
```
---
## 计算流程
### 步骤1价格突破分数权重 50%
#### 公式
```python
price_score = tanh(突破幅度% × 15)
```
#### 计算步骤
**场景A向上突破**
```
当前收盘价 = 10.5元
上沿线价格 = 10.0元
1. 计算突破幅度百分比
突破幅度 = (10.5 - 10.0) / 10.0 = 0.05 = 5%
2. 应用 tanh 函数归一化
price_score = tanh(0.05 × 15) = tanh(0.75) ≈ 0.64
3. 乘以权重计算贡献
价格贡献 = 0.64 × 0.50 = 0.32
```
**场景B未突破**
```
当前收盘价 = 9.5元
上沿线价格 = 10.0元
下沿线价格 = 9.0元
价格在三角形内部,未突破任何一边
→ 突破幅度 = 0
→ price_score = 0
→ 价格贡献 = 0
```
#### 映射表
| 突破幅度 | price_score | 贡献分数 (×50%) | 说明 |
|---------|-------------|-----------------|------|
| 0% | 0.00 | 0.000 | 未突破 |
| 1% | 0.15 | 0.075 | 微弱突破 |
| 2% | 0.29 | 0.145 | 轻度突破 |
| 3% | 0.42 | 0.210 | 中等突破 |
| 5% | 0.64 | 0.320 | 强势突破 |
| 8% | 0.83 | 0.415 | 大幅突破 |
| 10% | 0.91 | 0.455 | 极强突破 |
---
### 步骤2收敛程度分数权重 20%
#### 公式
```python
convergence_score = 1 - width_ratio
width_ratio = 三角形末端宽度 / 起始宽度
```
#### 计算步骤
```
三角形起始(窗口开始):
上沿价格 = 12.0元
下沿价格 = 8.0元
起始宽度 = 12.0 - 8.0 = 4.0元
三角形末端(检测日期):
上沿价格 = 10.0元
下沿价格 = 9.0元
末端宽度 = 10.0 - 9.0 = 1.0元
1. 计算宽度比
width_ratio = 1.0 / 4.0 = 0.25
2. 计算收敛分数
convergence_score = 1 - 0.25 = 0.75
3. 乘以权重计算贡献
收敛贡献 = 0.75 × 0.20 = 0.15
```
#### 映射表
| width_ratio | 收敛程度 | convergence_score | 贡献分数 (×20%) | 说明 |
|-------------|----------|-------------------|-----------------|------|
| 0.80 | 较弱 | 0.20 | 0.040 | 收窄20% |
| 0.60 | 中等 | 0.40 | 0.080 | 收窄40% |
| 0.40 | 较强 | 0.60 | 0.120 | 收窄60% |
| 0.25 | 很强 | 0.75 | 0.150 | 收窄75% |
| 0.10 | 极强 | 0.90 | 0.180 | 收窄90% |
| 0.05 | 极度收敛 | 0.95 | 0.190 | 收窄95% |
**解读**:三角形收得越窄,蓄势越充分,突破越有力。
---
### 步骤3成交量分数权重 15%
#### 公式
```python
vol_score = min(1, max(0, volume_ratio - 1))
volume_ratio = 当日成交量 / 近20日平均成交量
```
#### 计算步骤
```
当日成交量 = 150万股
近20日平均成交量 = 100万股
1. 计算成交量倍数
volume_ratio = 150 / 100 = 1.5
2. 计算成交量分数
vol_score = min(1, max(0, 1.5 - 1)) = 0.5
3. 乘以权重计算贡献
成交量贡献 = 0.5 × 0.15 = 0.075
```
#### 映射表
| volume_ratio | 成交量状态 | vol_score | 贡献分数 (×15%) | 说明 |
|--------------|------------|-----------|-----------------|------|
| 0.8 | 缩量 | 0.00 | 0.000 | 成交量萎缩 |
| 1.0 | 平量 | 0.00 | 0.000 | 与均值持平 |
| 1.3 | 温和放量 | 0.30 | 0.045 | 放量30% |
| 1.5 | 中度放量 | 0.50 | 0.075 | 放量50% |
| 2.0 | 大幅放量 | 1.00 | 0.150 | 放量100% |
| 3.0 | 巨量 | 1.00 | 0.150 | 放量200%(上限) |
**解读**:放量突破更可信,但不是必要条件(有些有效突破不放量)。
---
### 步骤4拟合贴合度分数权重 15%
#### 公式
```python
fitting_score = exp(-mean_rel_error × 20)
mean_rel_error = 枢轴点到拟合线的平均相对误差
```
#### 计算步骤
**上沿拟合贴合度**
```
选中的高点枢轴点3个
点1实际价格 = 11.0元,拟合线价格 = 11.1元
点2实际价格 = 10.5元,拟合线价格 = 10.4元
点3实际价格 = 10.2元,拟合线价格 = 10.1元
1. 计算各点相对误差
误差1 = |11.0 - 11.1| / 11.1 = 0.009 = 0.9%
误差2 = |10.5 - 10.4| / 10.4 = 0.010 = 1.0%
误差3 = |10.2 - 10.1| / 10.1 = 0.010 = 1.0%
2. 计算平均相对误差
mean_rel_error = (0.009 + 0.010 + 0.010) / 3 ≈ 0.010 = 1.0%
3. 计算上沿贴合度
adherence_upper = exp(-0.01 × 20) = exp(-0.2) ≈ 0.82
```
**下沿拟合贴合度**(假设同样计算得到 0.82
**综合贴合度**
```
fitting_score = (adherence_upper + adherence_lower) / 2
= (0.82 + 0.82) / 2
= 0.82
拟合贴合度贡献 = 0.82 × 0.15 = 0.123
```
#### 映射表
| 平均相对误差 | fitting_score | 贡献分数 (×15%) | 形态评价 |
|-------------|---------------|-----------------|----------|
| 0% | 1.00 | 0.150 | 完美拟合 |
| 0.5% | 0.90 | 0.135 | 极佳 |
| 1% | 0.82 | 0.123 | 优秀 |
| 2% | 0.67 | 0.100 | 良好 |
| 3% | 0.55 | 0.082 | 较好 |
| 5% | 0.37 | 0.055 | 一般 |
| 10% | 0.14 | 0.021 | 较差 |
**解读**:枢轴点越贴合拟合线,形态越标准、越"纯净"。
---
## 完整计算示例
### 案例:中度向上突破
**输入数据**
```
├─ 当前收盘价: 10.5元
├─ 上沿线价格: 10.0元
├─ 下沿线价格: 9.0元
├─ 三角形起始宽度: 4.0元 (12-8)
├─ 三角形末端宽度: 1.0元 (10-9)
├─ 当日成交量: 150万股
├─ 20日平均成交量: 100万股
└─ 枢轴点平均相对误差: 1.0%
```
**计算过程**
| 分量 | 原始分数 | 权重 | 贡献分数 | 计算过程 |
|------|----------|------|----------|----------|
| **价格突破** | 0.64 | ×50% | **0.320** | tanh(5% × 15) ≈ 0.64 |
| **收敛程度** | 0.75 | ×20% | **0.150** | 1 - 0.25 = 0.75 |
| **成交量** | 0.50 | ×15% | **0.075** | 1.5 - 1 = 0.5 |
| **拟合贴合度** | 0.82 | ×15% | **0.123** | exp(-1% × 20) ≈ 0.82 |
| **强度分总计** | - | - | **0.668** | 四项求和 |
**结果**
```
强度分 ≈ 0.67
评级中度突破0.5~0.7区间)
建议:有效突破,可作为参考信号
```
---
## 不同场景对比
### 场景1强势突破0.85分)
```
特征:
✓ 大幅突破8%
✓ 极度收敛width_ratio = 0.05
✓ 大幅放量2倍
✓ 形态标准1%误差)
计算:
价格贡献 = 0.83 × 0.50 = 0.415
收敛贡献 = 0.95 × 0.20 = 0.190
成交量贡献 = 1.00 × 0.15 = 0.150
拟合贡献 = 0.82 × 0.15 = 0.123
────────────────────────────────
强度分 = 0.878 ≈ 0.88 (强势突破)
```
### 场景2待突破形态0.35分)
```
特征:
✗ 未突破0%
✓ 收敛较好width_ratio = 0.25
✗ 未放量1倍
✓ 形态标准1%误差)
计算:
价格贡献 = 0.00 × 0.50 = 0.000 ← 未突破
收敛贡献 = 0.75 × 0.20 = 0.150
成交量贡献 = 0.00 × 0.15 = 0.000
拟合贡献 = 0.82 × 0.15 = 0.123
────────────────────────────────
强度分 = 0.273 ≈ 0.27 (待突破)
```
**解读**:虽然未突破,但形态质量不错,值得关注。
### 场景3弱势突破0.45分)
```
特征:
△ 小幅突破2%
△ 收敛一般width_ratio = 0.60
✗ 未放量1倍
△ 形态一般3%误差)
计算:
价格贡献 = 0.29 × 0.50 = 0.145
收敛贡献 = 0.40 × 0.20 = 0.080
成交量贡献 = 0.00 × 0.15 = 0.000
拟合贡献 = 0.55 × 0.15 = 0.082
────────────────────────────────
强度分 = 0.307 + 0.15 = 0.457 ≈ 0.46 (轻度突破)
```
**解读**:突破幅度小且无放量确认,可信度较低。
---
## 强度等级参考
| 强度范围 | 等级 | 含义 | 建议 |
|----------|------|------|------|
| 0.00 ~ 0.30 | 微弱 | 待突破或假突破风险高 | 谨慎观察 |
| 0.30 ~ 0.50 | 轻度 | 有突破迹象但不充分 | 需更多确认 |
| 0.50 ~ 0.70 | 中度 | 有效突破,可作为参考 | 可以关注 |
| 0.70 ~ 0.90 | 强势 | 高置信度突破 | 值得重点关注 |
| 0.90 ~ 1.00 | 极强 | 顶级突破信号 | 强烈关注 |
---
## 权重设计理由
| 分量 | 权重 | 理由 |
|------|------|------|
| **价格突破** | 50% | 最直接的信号,决定性因素 |
| **收敛程度** | 20% | 收敛越强,蓄势越充分,突破有效性越高 |
| **成交量** | 15% | 放量是确认信号,但非必要条件 |
| **拟合贴合度** | 15% | 形态纯度指标,过滤杂乱形态 |
**总和 = 100%**,确保分数在 0~1 范围内。
---
## 代码实现
详见:`src/converging_triangle.py`
- `calc_fitting_adherence()` - 计算拟合贴合度
- `calc_breakout_strength()` - 计算强度分(主函数)
- `detect_converging_triangle()` - 调用强度计算
---
## 相关文档
- [突破强度计算方法](./突破强度计算方法.md) - 完整技术文档
- [枢轴点拟合算法详解](./枢轴点分段选择算法详解.md) - 拟合贴合度的算法基础
- [讨论记录](../discuss/20260126-讨论.md) - 设计过程与决策