- 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.
409 lines
13 KiB
Markdown
409 lines
13 KiB
Markdown
# 收敛三角形检测系统 - 功能与文档总览
|
||
|
||
> 更新时间:2026-01-27
|
||
> 版本:v1.0
|
||
|
||
## 🎯 核心功能
|
||
|
||
### 1. 收敛三角形检测
|
||
- 自动识别K线中的收敛三角形形态
|
||
- 枢轴点检测与拟合算法
|
||
- 相向收敛约束(过滤通道形态)
|
||
- 突破方向判断(向上/向下/无)
|
||
|
||
### 2. 强度分评分系统
|
||
- **价格突破**(50%):突破幅度评估
|
||
- **收敛程度**(20%):蓄势充分度
|
||
- **成交量**(15%):放量确认
|
||
- **拟合贴合度**(15%):形态纯度
|
||
|
||
### 3. 可视化系统
|
||
- **静态图表**:K线图 + 三角形趋势线
|
||
- **HTML查看器**:交互式强度分筛选
|
||
- **详细模式**:显示枢轴点和拟合点
|
||
|
||
### 4. 批量处理
|
||
- 支持多日期、多股票批量检测
|
||
- 自动生成报告和图表
|
||
- 一键流水线脚本
|
||
|
||
## 📊 输出内容
|
||
|
||
### 1. 数据文件
|
||
```
|
||
outputs/converging_triangles/
|
||
├── all_results.csv # 完整检测结果(CSV格式)
|
||
├── YYYYMMDD_stocks.pkl # 单日结果(Pickle格式)
|
||
└── report.md # 可读性报告
|
||
```
|
||
|
||
### 2. 可视化
|
||
```
|
||
outputs/converging_triangles/
|
||
├── stock_viewer.html # HTML交互式查看器 ⭐
|
||
├── QUICK_START.md # 查看器快速指南
|
||
├── README_viewer.md # 查看器详细文档
|
||
└── charts/ # 图表图片
|
||
├── YYYYMMDD_代码_名称.png
|
||
└── YYYYMMDD_代码_名称_detail.png # 详细模式
|
||
```
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 最简使用(3步)
|
||
|
||
```powershell
|
||
# 1. 激活环境(首次需要创建和安装依赖)
|
||
python -m venv .venv
|
||
.venv\Scripts\activate
|
||
pip install numpy pandas matplotlib
|
||
|
||
# 2. 一键运行(生成所有数据和HTML查看器)
|
||
python scripts/pipeline_converging_triangle.py --all-stocks
|
||
|
||
# 3. 打开HTML查看器
|
||
start outputs/converging_triangles/stock_viewer.html
|
||
```
|
||
|
||
### 常用命令
|
||
|
||
```powershell
|
||
# 指定日期
|
||
python scripts/pipeline_converging_triangle.py --date 20260120 --all-stocks
|
||
|
||
# 详细模式(显示枢轴点和拟合点)
|
||
python scripts/pipeline_converging_triangle.py --show-details --all-stocks
|
||
|
||
# 只生成HTML(数据已存在)
|
||
python scripts/generate_stock_viewer.py --all-stocks
|
||
|
||
# 默认模式(仅满足条件的股票)
|
||
python scripts/pipeline_converging_triangle.py
|
||
```
|
||
|
||
## 📚 文档体系
|
||
|
||
### 入门文档(必读)
|
||
|
||
1. **README.md** - 项目概述和快速开始
|
||
2. **USAGE.md** - 完整使用指南(参数、数据格式等)⭐
|
||
3. **outputs/converging_triangles/QUICK_START.md** - HTML查看器快速指南
|
||
|
||
### 核心功能文档
|
||
|
||
4. **docs/突破强度计算方法.md** - 强度分算法详解(v3.0)
|
||
5. **docs/强度分计算示例.md** - 详细计算步骤与示例
|
||
6. **docs/all-stocks-feature.md** - 全股票图表功能说明
|
||
7. **docs/2026-01-27_HTML查看器功能.md** - HTML查看器设计与实现
|
||
|
||
### 算法原理文档
|
||
|
||
8. **docs/枢轴点检测原理.md** - 枢轴点算法详解
|
||
9. **docs/枢轴点分段选择算法详解.md** - 拟合点选择算法 ⭐
|
||
10. **docs/枢轴点边界问题分析.md** - 边界盲区问题与解决方案
|
||
11. **docs/2026-01-26_相向收敛约束改进.md** - 过滤通道形态的改进
|
||
12. **docs/2026-01-26_枢轴点检测与可视化修复.md** - 末端枢轴点问题修复
|
||
|
||
### 高级功能文档
|
||
|
||
13. **docs/方案4-混合策略详解.md** - 实时模式完整说明 ⭐
|
||
14. **docs/实时模式使用指南.md** - 实时模式快速上手
|
||
15. **docs/2026-01-26_图表详细模式功能.md** - 图表可视化改进
|
||
16. **docs/file-naming-fix.md** - ST股票文件名修复
|
||
|
||
### 其他文档
|
||
|
||
17. **docs/converging_triangles_outputs.md** - 输出字段说明
|
||
18. **docs/收敛三角形检测系统-使用指南.md** - 旧版使用指南
|
||
19. **outputs/converging_triangles/README_viewer.md** - HTML查看器详细文档
|
||
|
||
### 讨论与记录
|
||
|
||
20. **discuss/20260126-讨论.md** - 问题分析与解决方案记录
|
||
|
||
## 🎨 HTML查看器使用指南
|
||
|
||
### 功能特性
|
||
|
||
- ✅ **交互式滑块**:0.00 ~ 1.00 实时筛选强度分
|
||
- ✅ **全股票模式**:显示所有108只股票(包括无形态的)
|
||
- ✅ **实时统计**:总数、筛选数、平均强度分
|
||
- ✅ **图表放大**:点击图表全屏查看
|
||
- ✅ **颜色分级**:绿色(≥0.5) / 黄色(0.3~0.5) / 灰色(<0.3)
|
||
- ✅ **响应式设计**:适配PC/平板/手机
|
||
- ✅ **离线可用**:数据内嵌,无需服务器
|
||
|
||
### 使用场景
|
||
|
||
**场景1:快速筛选强势股**
|
||
```
|
||
1. 拖动滑块到 0.5
|
||
2. 只显示强度分 ≥ 0.5 的股票
|
||
3. 点击图表查看细节
|
||
```
|
||
|
||
**场景2:全面浏览**
|
||
```
|
||
1. 滑块保持在 0.00
|
||
2. 显示所有 108 只股票
|
||
3. 按强度分从高到低排序浏览
|
||
```
|
||
|
||
**场景3:渐进式分析**
|
||
```
|
||
1. 先看 ≥ 0.5 的强势股
|
||
2. 降到 ≥ 0.4 查看次强势
|
||
3. 降到 ≥ 0.3 查看中等强度
|
||
4. 对比不同强度级别的形态差异
|
||
```
|
||
|
||
### 数据更新
|
||
|
||
```powershell
|
||
# 每天收盘后运行
|
||
python scripts/pipeline_converging_triangle.py --all-stocks
|
||
|
||
# 刷新浏览器
|
||
F5
|
||
```
|
||
|
||
## 🔧 命令行参数
|
||
|
||
### pipeline_converging_triangle.py
|
||
|
||
| 参数 | 说明 | 默认值 |
|
||
|------|------|--------|
|
||
| `--date` | 检测日期(YYYYMMDD) | 最新交易日 |
|
||
| `--all-stocks` | 为所有108只股票生成图表 | 否 |
|
||
| `--show-details` | 图表显示枢轴点和拟合点 | 否 |
|
||
| `--skip-detection` | 跳过检测(仅生成报告和图表) | 否 |
|
||
| `--skip-viewer` | 跳过HTML查看器生成 | 否 |
|
||
|
||
### generate_stock_viewer.py
|
||
|
||
| 参数 | 说明 | 默认值 |
|
||
|------|------|--------|
|
||
| `--date` | 指定日期(YYYYMMDD) | 最新日期 |
|
||
| `--all-stocks` | 显示所有108只股票 | 否 |
|
||
| `--input` | 输入CSV路径 | `outputs/.../all_results.csv` |
|
||
| `--output` | 输出HTML路径 | `outputs/.../stock_viewer.html` |
|
||
|
||
### plot_converging_triangles.py
|
||
|
||
| 参数 | 说明 | 默认值 |
|
||
|------|------|--------|
|
||
| `--date` | 绘图日期(YYYYMMDD) | 最新日期 |
|
||
| `--all-stocks` | 为所有股票生成图表 | 否 |
|
||
| `--show-details` | 显示枢轴点和拟合点 | 否 |
|
||
| `--output-dir` | 输出目录 | `outputs/.../charts` |
|
||
|
||
## 📦 数据格式
|
||
|
||
### all_results.csv 字段说明
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `date` | int | 检测日期(YYYYMMDD) |
|
||
| `stock_idx` | int | 股票索引 |
|
||
| `stock_code` | str | 股票代码(如SH600000) |
|
||
| `stock_name` | str | 股票名称 |
|
||
| `breakout_strength_up` | float | 向上突破强度分(0~1) |
|
||
| `breakout_strength_down` | float | 向下突破强度分(0~1) |
|
||
| `breakout_dir` | str | 突破方向(up/down/none) |
|
||
| `width_ratio` | float | 宽度比(收敛程度) |
|
||
| `touches_upper` | int | 上沿触碰次数 |
|
||
| `touches_lower` | int | 下沿触碰次数 |
|
||
| `volume_confirmed` | str | 放量确认(是/否) |
|
||
| `price_score_*` | float | 价格突破分项得分 |
|
||
| `convergence_score` | float | 收敛程度分项得分 |
|
||
| `volume_score` | float | 成交量分项得分 |
|
||
| `fit_adherence_*` | float | 拟合贴合度分项得分 |
|
||
|
||
### HTML内嵌数据格式
|
||
|
||
```javascript
|
||
{
|
||
"code": "SH600000",
|
||
"name": "浦发银行",
|
||
"idx": 0,
|
||
"strength": 0.381, // 强度分(0~1)
|
||
"strengthUp": 0.381, // 向上突破强度
|
||
"strengthDown": 0.0, // 向下突破强度
|
||
"direction": "down", // 突破方向
|
||
"widthRatio": 0.13, // 宽度比
|
||
"touchesUpper": 3, // 上沿触碰次数
|
||
"touchesLower": 4, // 下沿触碰次数
|
||
"volumeConfirmed": "否", // 放量确认
|
||
"date": 20260120, // 日期
|
||
"chartPath": "charts/...", // 图表路径
|
||
"hasTriangle": true // 是否有三角形形态
|
||
}
|
||
```
|
||
|
||
## 🎯 典型工作流
|
||
|
||
### 工作流1:日常选股
|
||
|
||
```powershell
|
||
# 1. 每日收盘后运行(默认模式)
|
||
python scripts/pipeline_converging_triangle.py
|
||
|
||
# 2. 查看报告(快速浏览)
|
||
cat outputs/converging_triangles/report.md
|
||
|
||
# 3. 打开HTML查看器(交互式筛选)
|
||
start outputs/converging_triangles/stock_viewer.html
|
||
|
||
# 4. 调整滑块到 0.5,查看强势股
|
||
```
|
||
|
||
### 工作流2:全面研究
|
||
|
||
```powershell
|
||
# 1. 生成所有股票的数据(全股票模式)
|
||
python scripts/pipeline_converging_triangle.py --all-stocks --show-details
|
||
|
||
# 2. 打开HTML查看器
|
||
start outputs/converging_triangles/stock_viewer.html
|
||
|
||
# 3. 滑块保持 0.00,浏览所有 108 只股票
|
||
# 4. 对比有/无形态的股票差异
|
||
# 5. 点击图表查看详细的枢轴点和拟合点
|
||
```
|
||
|
||
### 工作流3:算法调试
|
||
|
||
```powershell
|
||
# 1. 指定日期,详细模式
|
||
python scripts/pipeline_converging_triangle.py --date 20260120 --all-stocks --show-details
|
||
|
||
# 2. 查看图表目录
|
||
ls outputs/converging_triangles/charts/*_detail.png
|
||
|
||
# 3. 验证枢轴点识别和拟合效果
|
||
# 4. 调整算法参数(如果需要)
|
||
# 5. 重新运行验证
|
||
```
|
||
|
||
### 工作流4:历史回测
|
||
|
||
```powershell
|
||
# 批量检测多个日期
|
||
for date in 20260115 20260116 20260117 20260120; do
|
||
python scripts/pipeline_converging_triangle.py --date $date --all-stocks
|
||
done
|
||
|
||
# 合并结果分析
|
||
python -c "import pandas as pd; df = pd.read_csv('outputs/converging_triangles/all_results.csv'); print(df.groupby('date')['breakout_strength_up'].mean())"
|
||
```
|
||
|
||
## 🔬 核心算法
|
||
|
||
### 1. 枢轴点检测
|
||
- **标准区域**(前220天):左右15天窗口
|
||
- **灵活区域**(后15天):对称短窗口
|
||
- **处理NaN值**:使用 `nanmin/nanmax`
|
||
- **末端候选**:包含未确认的潜在枢轴点
|
||
|
||
### 2. 拟合点选择
|
||
- **迭代离群点移除**:3轮迭代,每轮移除最差点
|
||
- **Z-score阈值**:2.0(正态分布下约5%异常点)
|
||
- **最小点数**:保留至少3个枢轴点
|
||
|
||
### 3. 收敛判断
|
||
- **相向收敛**:上沿斜率 < 0,下沿斜率 > 0
|
||
- **宽度比**:收敛端宽度 / 起始端宽度
|
||
- **触碰次数**:上沿≥2次,下沿≥2次
|
||
|
||
### 4. 强度分计算
|
||
```python
|
||
强度分 = 价格突破×50% + 收敛程度×20% + 成交量×15% + 拟合贴合度×15%
|
||
|
||
其中:
|
||
- 价格突破 = tanh(突破幅度% × 15) # 0~1
|
||
- 收敛程度 = 1 - width_ratio # 0~1
|
||
- 成交量 = 1 if 放量确认 else 0 # 0或1
|
||
- 拟合贴合度 = exp(-mean_rel_error × 20) # 0~1
|
||
```
|
||
|
||
## 🐛 已知问题与限制
|
||
|
||
1. **数据覆盖**:部分股票可能因停牌、退市缺少数据
|
||
2. **窗口限制**:检测窗口固定240天,可能漏掉更早的形态
|
||
3. **图片路径**:HTML查看器需要与charts目录在同一父目录
|
||
4. **浏览器兼容**:推荐Chrome 90+,其他浏览器可能有兼容问题
|
||
|
||
## 📈 性能指标
|
||
|
||
- **检测速度**:108只股票约30秒(Intel i7)
|
||
- **图表生成**:108张图约1分钟
|
||
- **HTML加载**:数据内嵌,<1秒即可打开
|
||
- **内存占用**:峰值约500MB(数据加载时)
|
||
|
||
## 🎓 学习路径
|
||
|
||
### 新手路径(1小时)
|
||
1. 阅读 `README.md` - 了解项目概述(5分钟)
|
||
2. 运行快速开始命令(10分钟)
|
||
3. 打开HTML查看器,体验交互(15分钟)
|
||
4. 阅读 `QUICK_START.md` - 掌握基本用法(10分钟)
|
||
5. 查看几个图表示例(20分钟)
|
||
|
||
### 进阶路径(半天)
|
||
6. 阅读 `USAGE.md` - 掌握所有参数(30分钟)
|
||
7. 阅读 `docs/突破强度计算方法.md` - 理解强度分(1小时)
|
||
8. 阅读 `docs/强度分计算示例.md` - 跟随示例计算(1小时)
|
||
9. 尝试不同参数组合,观察效果(1小时)
|
||
|
||
### 专家路径(1-2天)
|
||
10. 阅读所有算法原理文档(3小时)
|
||
11. 阅读源代码 `src/converging_triangle.py`(2小时)
|
||
12. 尝试修改参数、调整算法(2小时)
|
||
13. 运行历史回测,分析有效性(2小时)
|
||
14. 阅读讨论文档,理解设计决策(1小时)
|
||
|
||
## 🤝 贡献与反馈
|
||
|
||
- **问题反馈**:在讨论文档中记录问题和解决方案
|
||
- **功能建议**:在 `docs/` 目录创建新文档记录设计思路
|
||
- **代码改进**:遵循现有代码风格,添加完整注释和文档
|
||
|
||
## 📝 版本历史
|
||
|
||
- **v1.0**(2026-01-27):
|
||
- ✅ HTML可视化查看器
|
||
- ✅ 全股票图表生成
|
||
- ✅ 强度分评分系统(v3.0)
|
||
- ✅ 枢轴点末端识别修复
|
||
- ✅ 相向收敛约束
|
||
- ✅ 拟合点离群值移除
|
||
|
||
- **v0.9**(2026-01-26):
|
||
- ✅ 枢轴点检测系统
|
||
- ✅ 收敛三角形识别
|
||
- ✅ 图表详细模式
|
||
- ✅ 批量处理流水线
|
||
|
||
## 🔗 快速链接
|
||
|
||
### 必读文档
|
||
- [README.md](../README.md) - 项目概述
|
||
- [USAGE.md](../USAGE.md) - 使用指南
|
||
- [QUICK_START.md](../outputs/converging_triangles/QUICK_START.md) - HTML查看器快速指南
|
||
|
||
### 热门文档
|
||
- [强度分计算方法](./突破强度计算方法.md)
|
||
- [HTML查看器功能](./2026-01-27_HTML查看器功能.md)
|
||
- [全股票功能](./all-stocks-feature.md)
|
||
- [枢轴点算法详解](./枢轴点分段选择算法详解.md)
|
||
|
||
### 输出文件
|
||
- `outputs/converging_triangles/stock_viewer.html` - HTML查看器
|
||
- `outputs/converging_triangles/all_results.csv` - 检测结果
|
||
- `outputs/converging_triangles/charts/` - 图表图片
|
||
|
||
---
|
||
|
||
**最后更新**:2026-01-27
|
||
**维护者**:技术形态检测实验室
|