- 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.
127 lines
4.5 KiB
Markdown
127 lines
4.5 KiB
Markdown
## 问题1: 末端枢轴点未识别
|
||
|
||

|
||
|
||
**现象**: 图表最右边明显的低点/高点没有被标记为枢轴点
|
||
|
||
**根因**:
|
||
1. 数据中有空值(NaN)导致比较失效
|
||
2. 只检测窗口前235天的枢轴点,最后5天被忽略
|
||
3. 绘图时丢弃了末端的"候选枢轴点"
|
||
|
||
**解决**:
|
||
1. 用 `nanmin/nanmax` 替代 `min/max`,自动跳过空值
|
||
2. 把"灵活区域"从5天扩大到15天,覆盖更多末端数据
|
||
3. 对称短窗口:右边只有N天时,左边也只看N天(而不是固定15天)
|
||
4. 绘图时把"确认枢轴点"和"候选枢轴点"合并显示
|
||
|
||
详见 [枢轴点检测与可视化修复](../docs/2026-01-26_枢轴点检测与可视化修复.md)
|
||
|
||
---
|
||
|
||
## 问题2: 拟合点选择不合理
|
||
|
||

|
||
|
||
**现象**: 某些"弱"枢轴点(如5.8元的低高点)被用于拟合,拉偏趋势线
|
||
|
||

|
||
|
||
**解决**: 迭代离群点移除算法
|
||
1. 先用所有点画一条拟合线
|
||
2. 找出离拟合线太远的"异常点"
|
||
3. 去掉最差的那个点,重新画线
|
||
4. 重复2-3次,直到没有异常点
|
||
|
||
详见 [枢轴点拟合算法详解](../docs/枢轴点分段选择算法详解.md)
|
||
|
||
---
|
||
|
||
## 问题3: 非收敛形态误判
|
||
|
||
**现象**: "上升三角形"(上沿水平)被误判为"收敛三角形"
|
||

|
||
**解决**: 收紧斜率限制
|
||
- 上沿必须向下(或至少水平),不能向上
|
||
- 下沿必须向上(或至少水平),不能向下
|
||
- 这样就能过滤掉"上升三角形"和"下降通道"等非收敛形态
|
||
|
||
---
|
||
|
||
## ~~待办~~: 强度分评分系统(已完成)
|
||
|
||

|
||
| 分量 | 权重 | 说明 |
|
||
|------|------|------|
|
||
| 价格突破 | 50% | 突破幅度(未突破时为0) |
|
||
| 收敛程度 | 20% | 蓄势充分度 |
|
||
| 成交量 | 15% | 放量确认 |
|
||
| 拟合贴合度 | 15% | 枢轴点到拟合线的平均距离,反映形态纯度 |
|
||
|
||
**强度分说明**:
|
||
- 综合评估收敛三角形的质量,无论是否突破都计算得分
|
||
- 可用于评估"待突破"形态的潜在价值,或"已突破"形态的有效性
|
||
- 公式:`强度分 = 价格×50% + 收敛×20% + 成交量×15% + 拟合贴合度×15%`
|
||
|
||
**拟合贴合度计算**:
|
||
- 计算选中的枢轴点到对应拟合线(上沿/下沿)的相对距离
|
||
- 距离越小,说明形态越标准、越"纯净"
|
||
- 距离大表示形态杂乱,枢轴点散乱分布
|
||
- 使用指数衰减函数 `exp(-mean_rel_error * 20)` 归一化为 0~1 分数
|
||
|
||
**实施状态**: ✅ 已完成(2026-01-27)
|
||
- 代码实现:`src/converging_triangle.py`
|
||
- 详细文档:`docs/突破强度计算方法.md` (v3.0)
|
||
- **计算示例**:[强度分计算示例.md](../docs/强度分计算示例.md) - 包含完整计算步骤与多场景对比 ⭐
|
||
- 图表显示:已集成到图表标题第三行
|
||
- **可视化查看器**:`outputs/converging_triangles/stock_viewer.html` - 交互式强度分筛选 ⭐
|
||
|
||
---
|
||
|
||
## 新增功能: HTML可视化查看器(2026-01-27)
|
||
|
||

|
||
|
||
**功能亮点**:
|
||
- 🎚️ **交互式滑块**:实时调整强度分阈值(0.00 ~ 1.00)
|
||
- 📊 **全股票模式**:显示所有108只股票,无形态的强度分为0
|
||
- 📈 **统计面板**:总数、筛选数、平均强度分实时更新
|
||
- 🔍 **图表放大**:点击图表全屏查看细节
|
||
- 📱 **响应式设计**:自适应各种屏幕尺寸
|
||
- 💾 **离线可用**:数据内嵌在HTML中,无需服务器
|
||
|
||
**使用方法**:
|
||
```powershell
|
||
# 一键生成(推荐)
|
||
python scripts/pipeline_converging_triangle.py --all-stocks
|
||
|
||
# 单独生成HTML
|
||
python scripts/generate_stock_viewer.py --all-stocks # 显示所有108只
|
||
python scripts/generate_stock_viewer.py # 仅显示满足条件的
|
||
|
||
# 打开查看器
|
||
start outputs/converging_triangles/stock_viewer.html
|
||
```
|
||
|
||
**技术特性**:
|
||
- 数据内嵌方案:解决浏览器CORS限制,可直接双击打开
|
||
- 紫色渐变主题:现代化视觉设计
|
||
- 实时过滤:无延迟的交互体验
|
||
- 颜色分级:绿色(≥0.5)/黄色(0.3~0.5)/灰色(<0.3)
|
||
|
||
**相关文档**:
|
||
- 快速指南:`outputs/converging_triangles/QUICK_START.md`
|
||
- 详细文档:`outputs/converging_triangles/README_viewer.md`
|
||
- 功能说明:`docs/2026-01-27_HTML查看器功能.md`
|
||
|
||
---
|
||
|
||
## 附注
|
||
|
||
**tanh函数**:
|
||
- 双曲正切函数,输出范围 (-1, 1),用于归一化价格突破幅度
|
||
- 公式:`price_score = tanh(突破幅度% × 15)`
|
||
- 特点:小幅突破时敏感(分数增长快),大幅突破时饱和(分数增长慢)
|
||
- 示例:1%→0.15分,3%→0.42分,5%→0.64分,10%→0.91分
|
||
|