- Added pipeline_converging_triangle.py for streamlined execution of detection, reporting, and chart generation. - Introduced triangle_config.py for centralized parameter management across scripts. - Updated plot_converging_triangles.py to utilize parameters from the new config file. - Revised report_converging_triangles.py to reflect dynamic detection window based on configuration. - Enhanced existing scripts for improved error handling and output consistency. - Added new documentation files for usage instructions and parameter configurations.
348 lines
8.9 KiB
Markdown
348 lines
8.9 KiB
Markdown
# 收敛三角形检测系统 - 使用指南
|
||
|
||
> 最后更新:2026-01-22
|
||
> 版本:v1.0
|
||
|
||
## 目录
|
||
|
||
1. [系统概述](#系统概述)
|
||
2. [快速开始](#快速开始)
|
||
3. [参数配置](#参数配置)
|
||
4. [脚本说明](#脚本说明)
|
||
5. [输出文件](#输出文件)
|
||
6. [算法原理](#算法原理)
|
||
7. [常见问题](#常见问题)
|
||
|
||
---
|
||
|
||
## 系统概述
|
||
|
||
收敛三角形检测系统用于自动识别股票K线中的收敛三角形形态,并计算突破强度分数进行选股。
|
||
|
||
### 功能特点
|
||
|
||
- **批量检测**:支持多股票、多日期的滚动窗口检测
|
||
- **突破强度评分**:0~1 连续分数,量化突破有效性
|
||
- **可视化图表**:自动生成个股三角形图表
|
||
- **选股报告**:每日 Markdown 格式选股简报
|
||
|
||
### 系统架构
|
||
|
||
```
|
||
technical-patterns-lab/
|
||
├── src/
|
||
│ └── converging_triangle.py # 核心算法
|
||
├── scripts/
|
||
│ ├── triangle_config.py # 参数配置(统一管理)
|
||
│ ├── run_converging_triangle.py # 批量检测
|
||
│ ├── report_converging_triangles.py # 报告生成
|
||
│ ├── plot_converging_triangles.py # 图表绘制
|
||
│ └── pipeline_converging_triangle.py # 一键流水线
|
||
├── outputs/converging_triangles/
|
||
│ ├── all_results.csv # 全部检测结果
|
||
│ ├── report.md # 选股报告
|
||
│ └── charts/ # 个股图表
|
||
└── data/
|
||
└── pkl/ # OHLCV 数据文件
|
||
```
|
||
|
||
---
|
||
|
||
## 快速开始
|
||
|
||
### 1. 一键运行(推荐)
|
||
|
||
```bash
|
||
cd technical-patterns-lab
|
||
python scripts/pipeline_converging_triangle.py
|
||
```
|
||
|
||
这会依次执行:
|
||
1. 批量检测 → 生成 `all_results.csv`
|
||
2. 报告生成 → 生成 `report.md`
|
||
3. 图表绘制 → 生成 `charts/*.png`
|
||
|
||
### 2. 指定日期运行
|
||
|
||
```bash
|
||
python scripts/pipeline_converging_triangle.py --date 20260120
|
||
```
|
||
|
||
### 3. 跳过部分步骤
|
||
|
||
```bash
|
||
# 跳过检测(使用已有结果),只生成报告和图表
|
||
python scripts/pipeline_converging_triangle.py --skip-detection
|
||
|
||
# 只运行检测
|
||
python scripts/pipeline_converging_triangle.py --skip-report --skip-plot
|
||
```
|
||
|
||
### 4. 单独运行各步骤
|
||
|
||
```bash
|
||
# 批量检测
|
||
python scripts/run_converging_triangle.py
|
||
|
||
# 生成报告
|
||
python scripts/report_converging_triangles.py
|
||
|
||
# 绘制图表
|
||
python scripts/plot_converging_triangles.py
|
||
```
|
||
|
||
---
|
||
|
||
## 参数配置
|
||
|
||
所有参数统一在 `scripts/triangle_config.py` 中管理:
|
||
|
||
### 检测参数(当前使用严格模式)
|
||
|
||
| 参数 | 严格模式 | 默认模式 | 宽松模式 | 说明 |
|
||
|------|----------|----------|----------|------|
|
||
| `window` | 120 | 120 | 120 | 检测窗口(交易日) |
|
||
| `pivot_k` | 15 | 15 | 15 | 枢轴点检测周期 |
|
||
| `shrink_ratio` | **0.6** | 0.8 | 0.85 | 收敛比例阈值 |
|
||
| `break_tol` | **0.005** | 0.001 | 0.001 | 突破判定容差 |
|
||
| `vol_k` | **1.5** | 1.3 | 1.2 | 放量确认倍数 |
|
||
|
||
### 数据范围配置
|
||
|
||
| 参数 | 值 | 说明 |
|
||
|------|-----|------|
|
||
| `RECENT_DAYS` | 500 | 计算最近 N 个交易日 |
|
||
| `DISPLAY_WINDOW` | 500 | 图表显示范围 |
|
||
| `ONLY_VALID` | True | 只输出有效三角形 |
|
||
|
||
### 切换参数模式
|
||
|
||
编辑 `scripts/triangle_config.py`,修改 `DETECTION_PARAMS` 的定义:
|
||
|
||
```python
|
||
# 当前使用严格模式(推荐)
|
||
DETECTION_PARAMS = ConvergingTriangleParams(
|
||
shrink_ratio=0.6, # 更严格的收敛要求
|
||
break_tol=0.005, # 更明显的突破
|
||
vol_k=1.5, # 更强的放量要求
|
||
...
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## 脚本说明
|
||
|
||
### run_converging_triangle.py
|
||
|
||
**功能**:批量检测收敛三角形
|
||
|
||
**输出**:
|
||
- `outputs/converging_triangles/all_results.csv`
|
||
- `outputs/converging_triangles/strong_breakout_up.csv`
|
||
- `outputs/converging_triangles/strong_breakout_down.csv`
|
||
|
||
**耗时**:约 15-20 秒(108只股票 × 500天)
|
||
|
||
---
|
||
|
||
### report_converging_triangles.py
|
||
|
||
**功能**:生成 Markdown 选股报告
|
||
|
||
**参数**:
|
||
|
||
```bash
|
||
# 指定报告日期
|
||
python scripts/report_converging_triangles.py --report-date 20260120
|
||
|
||
# 指定输入输出路径
|
||
python scripts/report_converging_triangles.py \
|
||
--input outputs/converging_triangles/all_results.csv \
|
||
--output outputs/converging_triangles/report.md
|
||
```
|
||
|
||
**输出**:`outputs/converging_triangles/report.md`
|
||
|
||
---
|
||
|
||
### plot_converging_triangles.py
|
||
|
||
**功能**:绘制个股收敛三角形图表
|
||
|
||
**参数**:
|
||
|
||
```bash
|
||
# 指定日期
|
||
python scripts/plot_converging_triangles.py --date 20260120
|
||
|
||
# 指定输出目录
|
||
python scripts/plot_converging_triangles.py --output-dir outputs/converging_triangles/charts
|
||
```
|
||
|
||
**输出**:`outputs/converging_triangles/charts/*.png`
|
||
|
||
**特点**:
|
||
- 每次运行自动清空旧图片
|
||
- 显示 500 天历史走势
|
||
- 检测窗口 120 天高亮显示
|
||
- 支持中文字体(SimHei/Microsoft YaHei)
|
||
|
||
---
|
||
|
||
### pipeline_converging_triangle.py
|
||
|
||
**功能**:一键执行完整流水线
|
||
|
||
**参数**:
|
||
|
||
| 参数 | 说明 |
|
||
|------|------|
|
||
| `--date YYYYMMDD` | 指定目标日期 |
|
||
| `--skip-detection` | 跳过批量检测 |
|
||
| `--skip-report` | 跳过报告生成 |
|
||
| `--skip-plot` | 跳过图表绘制 |
|
||
|
||
**输出**:流水线执行摘要,包含各步骤耗时
|
||
|
||
---
|
||
|
||
## 输出文件
|
||
|
||
### all_results.csv
|
||
|
||
所有有效收敛三角形检测结果。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
|------|------|------|
|
||
| `stock_idx` | int | 股票索引 |
|
||
| `stock_code` | str | 股票代码 |
|
||
| `stock_name` | str | 股票名称 |
|
||
| `date` | int | 日期(YYYYMMDD) |
|
||
| `is_valid` | bool | 是否有效三角形 |
|
||
| `breakout_strength_up` | float | 向上突破强度(0~1) |
|
||
| `breakout_strength_down` | float | 向下突破强度(0~1) |
|
||
| `breakout_dir` | str | 突破方向:up/down/none |
|
||
| `width_ratio` | float | 收敛比例(末端/起始宽度) |
|
||
| `volume_confirmed` | bool | 是否放量确认 |
|
||
| `touches_upper` | int | 触碰上沿次数 |
|
||
| `touches_lower` | int | 触碰下沿次数 |
|
||
|
||
### report.md
|
||
|
||
每日选股简报,包含:
|
||
- 数据说明(股票池、检测窗口、算法)
|
||
- 当日统计(总数、向上/向下/无突破)
|
||
- 向上突破排名表
|
||
- 向下突破排名表
|
||
- 无突破形态列表
|
||
|
||
### charts/*.png
|
||
|
||
个股图表,文件名格式:`{date}_{stock_code}_{stock_name}.png`
|
||
|
||
图表内容:
|
||
- 上半部分:K线走势 + 趋势线
|
||
- 下半部分:成交量柱状图
|
||
- 标题:股票信息 + 检测/显示范围
|
||
|
||
---
|
||
|
||
## 算法原理
|
||
|
||
### 收敛三角形定义
|
||
|
||
收敛三角形是一种技术形态,特征为:
|
||
1. **上沿下倾**:高点连线斜率 ≤ 0(或轻微上倾)
|
||
2. **下沿上翘**:低点连线斜率 ≥ 0(或轻微下倾)
|
||
3. **逐渐收敛**:末端宽度 < 起始宽度
|
||
4. **多次触碰**:价格至少 2 次触碰上下沿
|
||
|
||
### 检测流程
|
||
|
||
```
|
||
1. 枢轴点检测
|
||
└── 使用分形方法找出局部高点/低点
|
||
|
||
2. 边界线拟合
|
||
└── 分段取极值 + 线性回归
|
||
|
||
3. 形态验证
|
||
├── 斜率约束检查
|
||
├── 收敛度检查(width_ratio < shrink_ratio)
|
||
└── 触碰程度检查(loss < touch_loss_max)
|
||
|
||
4. 突破判定
|
||
├── 向上突破:close > upper_line × (1 + break_tol)
|
||
└── 向下突破:close < lower_line × (1 - break_tol)
|
||
|
||
5. 强度计算
|
||
└── 加权求和:价格分(60%) + 收敛分(25%) + 成交量分(15%)
|
||
```
|
||
|
||
### 突破强度公式
|
||
|
||
```python
|
||
strength = 0.60 × tanh(突破幅度% × 15) + # 价格分
|
||
0.25 × (1 - width_ratio) + # 收敛分
|
||
0.15 × vol_bonus # 成交量分
|
||
```
|
||
|
||
详见 [突破强度计算方法.md](./突破强度计算方法.md)
|
||
|
||
---
|
||
|
||
## 常见问题
|
||
|
||
### Q1: 图表中文乱码?
|
||
|
||
确保系统安装了中文字体(SimHei 或 Microsoft YaHei)。脚本已配置:
|
||
|
||
```python
|
||
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'Arial Unicode MS']
|
||
plt.rcParams['axes.unicode_minus'] = False
|
||
```
|
||
|
||
### Q2: 检测结果太少/太多?
|
||
|
||
调整 `scripts/triangle_config.py` 中的参数:
|
||
- 结果太少 → 使用宽松模式(`shrink_ratio=0.85`)
|
||
- 结果太多 → 使用严格模式(`shrink_ratio=0.6`)
|
||
|
||
### Q3: 突破强度都很高?
|
||
|
||
旧版本公式有此问题,已在 v2.0 修复。确保使用最新的 `src/converging_triangle.py`。
|
||
|
||
### Q4: 如何添加新股票?
|
||
|
||
将 OHLCV 数据以 `.pkl` 格式放入 `data/pkl/` 目录,格式要求:
|
||
- 二维 numpy 数组,shape=(n_stocks, n_days)
|
||
- 文件名:`open.pkl`, `high.pkl`, `low.pkl`, `close.pkl`, `volume.pkl`
|
||
|
||
### Q5: 如何调整检测窗口?
|
||
|
||
修改 `scripts/triangle_config.py`:
|
||
|
||
```python
|
||
DETECTION_PARAMS = ConvergingTriangleParams(
|
||
window=120, # 修改此值(如 60, 90, 180)
|
||
...
|
||
)
|
||
```
|
||
|
||
---
|
||
|
||
## 版本历史
|
||
|
||
| 版本 | 日期 | 更新内容 |
|
||
|------|------|----------|
|
||
| v1.0 | 2026-01-22 | 初始版本,加权求和公式,严格模式 |
|
||
|
||
---
|
||
|
||
## 相关文档
|
||
|
||
- [突破强度计算方法.md](./突破强度计算方法.md) - 突破强度公式详解
|
||
- [converging_triangles_outputs.md](./converging_triangles_outputs.md) - 输出文件字段说明
|
||
- [2026-01-16_converging_triangle_algorithm.md](./2026-01-16_converging_triangle_algorithm.md) - 算法设计文档
|