- 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.
350 lines
9.0 KiB
Markdown
350 lines
9.0 KiB
Markdown
# 强度分计算详解与示例
|
||
|
||
> 创建时间: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) - 设计过程与决策
|