- 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.
13 KiB
13 KiB
收敛三角形检测系统 - 功能与文档总览
更新时间: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步)
# 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
常用命令
# 指定日期
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
📚 文档体系
入门文档(必读)
- README.md - 项目概述和快速开始
- USAGE.md - 完整使用指南(参数、数据格式等)⭐
- outputs/converging_triangles/QUICK_START.md - HTML查看器快速指南
核心功能文档
- docs/突破强度计算方法.md - 强度分算法详解(v3.0)
- docs/强度分计算示例.md - 详细计算步骤与示例
- docs/all-stocks-feature.md - 全股票图表功能说明
- docs/2026-01-27_HTML查看器功能.md - HTML查看器设计与实现
算法原理文档
- docs/枢轴点检测原理.md - 枢轴点算法详解
- docs/枢轴点分段选择算法详解.md - 拟合点选择算法 ⭐
- docs/枢轴点边界问题分析.md - 边界盲区问题与解决方案
- docs/2026-01-26_相向收敛约束改进.md - 过滤通道形态的改进
- docs/2026-01-26_枢轴点检测与可视化修复.md - 末端枢轴点问题修复
高级功能文档
- docs/方案4-混合策略详解.md - 实时模式完整说明 ⭐
- docs/实时模式使用指南.md - 实时模式快速上手
- docs/2026-01-26_图表详细模式功能.md - 图表可视化改进
- docs/file-naming-fix.md - ST股票文件名修复
其他文档
- docs/converging_triangles_outputs.md - 输出字段说明
- docs/收敛三角形检测系统-使用指南.md - 旧版使用指南
- outputs/converging_triangles/README_viewer.md - HTML查看器详细文档
讨论与记录
- 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. 对比不同强度级别的形态差异
数据更新
# 每天收盘后运行
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内嵌数据格式
{
"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:日常选股
# 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:全面研究
# 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:算法调试
# 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:历史回测
# 批量检测多个日期
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. 强度分计算
强度分 = 价格突破×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
🐛 已知问题与限制
- 数据覆盖:部分股票可能因停牌、退市缺少数据
- 窗口限制:检测窗口固定240天,可能漏掉更早的形态
- 图片路径:HTML查看器需要与charts目录在同一父目录
- 浏览器兼容:推荐Chrome 90+,其他浏览器可能有兼容问题
📈 性能指标
- 检测速度:108只股票约30秒(Intel i7)
- 图表生成:108张图约1分钟
- HTML加载:数据内嵌,<1秒即可打开
- 内存占用:峰值约500MB(数据加载时)
🎓 学习路径
新手路径(1小时)
- 阅读
README.md- 了解项目概述(5分钟) - 运行快速开始命令(10分钟)
- 打开HTML查看器,体验交互(15分钟)
- 阅读
QUICK_START.md- 掌握基本用法(10分钟) - 查看几个图表示例(20分钟)
进阶路径(半天)
- 阅读
USAGE.md- 掌握所有参数(30分钟) - 阅读
docs/突破强度计算方法.md- 理解强度分(1小时) - 阅读
docs/强度分计算示例.md- 跟随示例计算(1小时) - 尝试不同参数组合,观察效果(1小时)
专家路径(1-2天)
- 阅读所有算法原理文档(3小时)
- 阅读源代码
src/converging_triangle.py(2小时) - 尝试修改参数、调整算法(2小时)
- 运行历史回测,分析有效性(2小时)
- 阅读讨论文档,理解设计决策(1小时)
🤝 贡献与反馈
- 问题反馈:在讨论文档中记录问题和解决方案
- 功能建议:在
docs/目录创建新文档记录设计思路 - 代码改进:遵循现有代码风格,添加完整注释和文档
📝 版本历史
-
v1.0(2026-01-27):
- ✅ HTML可视化查看器
- ✅ 全股票图表生成
- ✅ 强度分评分系统(v3.0)
- ✅ 枢轴点末端识别修复
- ✅ 相向收敛约束
- ✅ 拟合点离群值移除
-
v0.9(2026-01-26):
- ✅ 枢轴点检测系统
- ✅ 收敛三角形识别
- ✅ 图表详细模式
- ✅ 批量处理流水线
🔗 快速链接
必读文档
- README.md - 项目概述
- USAGE.md - 使用指南
- QUICK_START.md - HTML查看器快速指南
热门文档
输出文件
outputs/converging_triangles/stock_viewer.html- HTML查看器outputs/converging_triangles/all_results.csv- 检测结果outputs/converging_triangles/charts/- 图表图片
最后更新:2026-01-27
维护者:技术形态检测实验室