# 相向收敛约束改进 **日期**: 2026-01-26 **问题**: 下降通道被误判为收敛三角形 **解决方案**: 增加"相向收敛"检查,过滤同向运动的通道形态 --- ## 问题描述 原算法仅检查斜率范围,允许: - 上沿斜率 ≤ 0.10(可向上、水平、向下) - 下沿斜率 ≥ -0.10(可向下、水平、向上) **导致问题**:上下沿都向下的"下降通道"被识别为三角形 ### 误判案例 股票:SZ300530 领湃科技 日期:20260120 ``` 上沿:向下倾斜(斜率 < 0) 下沿:向下倾斜(斜率 < 0) ``` 这是典型的**下降通道**,不是收敛三角形,但通过了原检测。 --- ## 解决方案 ### 新增约束:相向收敛检查 在 `src/converging_triangle.py` 的 `detect_converging_triangle()` 函数中, 斜率检查后增加: ```python # 相向收敛检查:确保上下沿是相向运动的(关键约束) slope_tolerance = 0.01 # 斜率容差,用于判断"接近水平" # 检查是否同向运动 both_descending = (a_u < -slope_tolerance) and (a_l < -slope_tolerance) # 都向下 both_ascending = (a_u > slope_tolerance) and (a_l > slope_tolerance) # 都向上 if both_descending or both_ascending: # 这是通道形态,不是收敛三角形 return invalid_result ``` ### 判定逻辑 #### ✅ 通过(真正的收敛三角形) 1. **对称三角形**:上沿向下 + 下沿向上 2. **上升三角形**:上沿水平 + 下沿向上 3. **下降三角形**:上沿向下 + 下沿水平 #### ❌ 拒绝(通道形态) 1. **下降通道**:上沿向下 + 下沿向下(同向↓) 2. **上升通道**:上沿向上 + 下沿向上(同向↑) ### 斜率判定 使用 `slope_tolerance = 0.01` 作为阈值: - 斜率 < -0.01 → 向下 - 斜率 > +0.01 → 向上 - -0.01 ~ +0.01 → 水平 --- ## 测试验证 运行测试脚本: ```bash python scripts/test_slope_constraint.py ``` ### 测试结果 | 形态 | 上沿斜率 | 下沿斜率 | 预期 | 实际 | 结果 | |------|---------|---------|------|------|------| | 对称三角形 | -0.050 | +0.050 | PASS | PASS | ✓ | | 下降三角形 | -0.080 | +0.001 | PASS | PASS | ✓ | | 上升三角形 | +0.001 | +0.080 | PASS | PASS | ✓ | | 下降通道 | -0.050 | -0.080 | REJECT | REJECT | ✓ | | 上升通道 | +0.050 | +0.080 | REJECT | REJECT | ✓ | | 微弱收敛 | -0.005 | +0.005 | PASS | PASS | ✓ | | 水平矩形 | +0.001 | -0.001 | PASS | PASS | ✓ | **全部测试通过** ✓ --- ## 预期影响 ### 对检测结果的影响 - **减少误报**:过滤掉下降/上升通道 - **提高精度**:只保留真正的收敛三角形 - **候选数量**:预计减少 10%-20%(取决于市场走势) ### 对现有数据的影响 重新运行检测后: - 之前识别的下降通道(如 SZ300530)将被过滤 - 对称/上升/下降三角形不受影响 - 需要重新生成报告和图表 --- ## 重新运行检测 ```bash # 激活环境 .\.venv\Scripts\Activate.ps1 # 重新运行完整流水线 python scripts/pipeline_converging_triangle.py ``` 或分步运行: ```bash # 1. 重新检测 python scripts/run_converging_triangle.py # 2. 生成报告 python scripts/report_converging_triangles.py # 3. 绘制图表 python scripts/plot_converging_triangles.py ``` --- ## 相关文件 - **核心改进**: `src/converging_triangle.py` (第449-467行) - **参数配置**: `scripts/triangle_config.py` (增加注释说明) - **测试脚本**: `scripts/test_slope_constraint.py` (新增) - **本文档**: `docs/2026-01-26_相向收敛约束改进.md` --- ## 附录:三角形形态分类 ### 标准收敛三角形(Converging Triangle) ``` 对称三角形 (Symmetrical Triangle) /\ / \↓ 上沿向下 / \ / \ /___↑____\ 下沿向上 上升三角形 (Ascending Triangle) ————————— 上沿水平 / / /_____↑_\ 下沿向上 下降三角形 (Descending Triangle) \↓ \ 上沿向下 \ _______\ 下沿水平 ``` ### 非收敛形态(应被过滤) ``` 下降通道 (Descending Channel) \↓ \ 上沿向下 \ \↓ 下沿向下(同向) 上升通道 (Ascending Channel) /↑ 上沿向上(同向) / /↑ / 下沿向上 ``` --- ## 总结 通过增加"相向收敛"约束,算法现在能够正确区分: - ✅ 收敛三角形(相向运动,符合技术分析定义) - ❌ 上升/下降通道(同向运动,不是三角形) 这一改进提高了检测的准确性和可靠性,使其更符合技术分析的标准定义。