# 突破强度计算方法

## 概述

突破强度是一个 **0~1** 的连续分数，用于衡量收敛三角形突破的有效性。  
分数越高，表示突破越强势、越可信。

---

## 计算公式

```python
strength = price_score × 5 × (1 + convergence_bonus × 0.5) × (1 + vol_bonus × 0.5)
```

最终结果限制在 `[0, 1]` 范围内。

---

## 三个影响因素

### 1. 价格突破幅度 (price_score)

衡量收盘价突破趋势线的程度。

```python
# 向上突破
price_up = max(0, (close - upper_line) / upper_line)

# 向下突破
price_down = max(0, (lower_line - close) / lower_line)
```

| 突破幅度 | price_score |
|----------|-------------|
| 未突破 | 0 |
| 突破 1% | 0.01 |
| 突破 5% | 0.05 |
| 突破 10% | 0.10 |

---

### 2. 收敛加成 (convergence_bonus)

三角形收敛程度越高，突破越有效。

```python
convergence_bonus = max(0, 1 - width_ratio)
```

| width_ratio | 收敛程度 | convergence_bonus |
|-------------|----------|-------------------|
| 0.8 | 较弱 | 0.2 |
| 0.5 | 中等 | 0.5 |
| 0.2 | 很强 | 0.8 |
| 0.1 | 极强 | 0.9 |

**width_ratio** = 三角形末端宽度 / 起始宽度

---

### 3. 成交量加成 (vol_bonus)

放量突破更可信。

```python
vol_bonus = min(1, max(0, volume_ratio - 1))
```

| volume_ratio | 成交量状态 | vol_bonus |
|--------------|------------|-----------|
| 0.8 | 缩量 | 0 |
| 1.0 | 平量 | 0 |
| 1.5 | 放量 50% | 0.5 |
| 2.0 | 放量 100% | 1.0 (满分) |
| 3.0 | 放量 200% | 1.0 (上限) |

**volume_ratio** = 当日成交量 / 近 N 日均量

---

## 加权系数说明

```python
strength = price_score × 5 × (1 + convergence_bonus × 0.5) × (1 + vol_bonus × 0.5)
```

| 系数 | 作用 |
|------|------|
| `× 5` | 放大价格突破分数，使 2% 突破 = 0.1 基础分 |
| `× (1 + convergence_bonus × 0.5)` | 收敛加成最多增加 50% |
| `× (1 + vol_bonus × 0.5)` | 成交量加成最多增加 50% |

---

## 计算示例

### 示例 1：强势突破

```
输入:
  close = 10.5, upper_line = 10.0  (突破 5%)
  width_ratio = 0.2                (收敛很强)
  volume_ratio = 1.8               (放量 80%)

计算:
  price_up = (10.5 - 10.0) / 10.0 = 0.05
  convergence_bonus = 1 - 0.2 = 0.8
  vol_bonus = min(1, 1.8 - 1) = 0.8

  strength_up = 0.05 × 5 × (1 + 0.8 × 0.5) × (1 + 0.8 × 0.5)
              = 0.25 × 1.4 × 1.4
              = 0.49

结果: 向上突破强度 = 0.49 (中度突破)
```

### 示例 2：弱势突破

```
输入:
  close = 10.1, upper_line = 10.0  (突破 1%)
  width_ratio = 0.7                (收敛较弱)
  volume_ratio = 0.9               (缩量)

计算:
  price_up = 0.01
  convergence_bonus = 0.3
  vol_bonus = 0

  strength_up = 0.01 × 5 × (1 + 0.3 × 0.5) × (1 + 0)
              = 0.05 × 1.15 × 1.0
              = 0.0575

结果: 向上突破强度 = 0.06 (微弱突破)
```

### 示例 3：极强突破

```
输入:
  close = 11.0, upper_line = 10.0  (突破 10%)
  width_ratio = 0.15               (极度收敛)
  volume_ratio = 2.5               (放量 150%)

计算:
  price_up = 0.10
  convergence_bonus = 0.85
  vol_bonus = 1.0

  strength_up = 0.10 × 5 × (1 + 0.85 × 0.5) × (1 + 1.0 × 0.5)
              = 0.50 × 1.425 × 1.5
              = 1.07 → 截断为 1.0

结果: 向上突破强度 = 1.0 (满分)
```

---

## 强度等级参考

| 强度范围 | 等级 | 含义 |
|----------|------|------|
| 0 ~ 0.1 | 无/微弱 | 未突破或假突破风险高 |
| 0.1 ~ 0.3 | 轻度 | 有突破迹象，需观察确认 |
| 0.3 ~ 0.6 | 中度 | 有效突破，可作为参考信号 |
| 0.6 ~ 1.0 | 强势 | 高置信度突破，值得关注 |

---

## 代码位置

```
src/converging_triangle.py
├── calc_breakout_strength()  # 突破强度计算函数
└── detect_converging_triangle()  # 调用位置
```

---

## 相关参数

| 参数 | 默认值 | 说明 |
|------|--------|------|
| `vol_window` | 20 | 计算成交量均值的窗口大小 |
| `vol_k` | 1.3 | 成交量确认阈值（volume_confirmed 判断用） |
| `break_tol` | 0.001 | 突破判定容差 |
