- Created README.md and USAGE.md for project overview and usage instructions. - Added core algorithm in src/converging_triangle.py for batch processing of stock data. - Introduced data files (open.pkl, high.pkl, low.pkl, close.pkl, volume.pkl) for OHLCV data. - Developed output documentation for results and breakout strength calculations. - Implemented scripts for running the detection and generating reports. - Added SVG visualizations and markdown documentation for algorithm details and usage examples.
152 lines
3.8 KiB
Markdown
152 lines
3.8 KiB
Markdown
# 对称三角形批量检测日志
|
||
|
||
**日期**: 2026-01-16
|
||
**任务**: 从 pkl 文件批量检测对称三角形
|
||
|
||
---
|
||
|
||
## 1. 数据源分析
|
||
|
||
### pkl 文件结构
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `open.pkl.pkl` | 开盘价矩阵 |
|
||
| `high.pkl.pkl` | 最高价矩阵 |
|
||
| `low.pkl.pkl` | 最低价矩阵 |
|
||
| `close.pkl.pkl` | 收盘价矩阵 |
|
||
| `volume.pkl.pkl` | 成交量矩阵 |
|
||
|
||
### pkl 内部数据结构
|
||
|
||
```python
|
||
{
|
||
'mtx_save': ndarray (108, 5113), # 主数据矩阵: 108只股票 × 5113个交易日
|
||
'tot_c': ndarray (108,), # 列索引 [0,1,2,...,107]
|
||
'tot_r': ndarray (5113,), # 有效行索引(日期序号,非连续)
|
||
'shape_c': 108, # 原始列数
|
||
'shape_r': 7698, # 原始总行数(含空行)
|
||
}
|
||
```
|
||
|
||
### 加载方式
|
||
|
||
两种加载方式对比:
|
||
|
||
| 方式 | 返回值 | 适用场景 |
|
||
|------|--------|----------|
|
||
| 原生 `pickle.load` | `dict` | 需要完整元数据 |
|
||
| `g.load_pkl` | `ndarray` | dataServer 环境内,直接使用矩阵 |
|
||
|
||
**本次采用**: 原生 `pickle.load` + 空壳模块绕过 `model` 依赖
|
||
|
||
```python
|
||
class FakeModule:
|
||
ndarray = np.ndarray
|
||
|
||
sys.modules['model'] = FakeModule()
|
||
sys.modules['model.index_info'] = FakeModule()
|
||
|
||
with open(pkl_path, 'rb') as f:
|
||
data = pickle.load(f)
|
||
```
|
||
|
||
---
|
||
|
||
## 2. 检测参数
|
||
|
||
```python
|
||
WINDOW = 400 # 分析窗口大小
|
||
PIVOT_K = 20 # 枢轴点检测窗口
|
||
BOUNDARY_N_SEGMENTS = 2 # 边界线分段数
|
||
BOUNDARY_SOURCE = "full" # 使用全量 high/low 拟合
|
||
UPPER_SLOPE_MAX = 0.10 # 上沿斜率最大值
|
||
LOWER_SLOPE_MIN = -0.10 # 下沿斜率最小值
|
||
TOUCH_TOL = 0.10 # 触碰容差
|
||
TOUCH_LOSS_MAX = 0.10 # 损失函数阈值
|
||
SHRINK_RATIO = 0.8 # 收敛比阈值
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 运行结果
|
||
|
||
**扫描**: 108 只股票
|
||
**识别成功**: 10 只 (9.26%)
|
||
|
||
### 识别结果明细
|
||
|
||
| 股票 ID | 上沿斜率 | 下沿斜率 | 收敛比 | 触碰(上/下) | 突破方向 |
|
||
|---------|----------|----------|--------|-------------|----------|
|
||
| stock_017 | +0.0025 | +0.0071 | 0.25 | 5/3 | down |
|
||
| stock_019 | +0.0021 | +0.0056 | 0.63 | 5/4 | none |
|
||
| stock_025 | +0.0009 | +0.0020 | 0.75 | 5/5 | none |
|
||
| stock_031 | -0.0097 | -0.0042 | 0.64 | 3/4 | none |
|
||
| stock_057 | -0.0002 | +0.0036 | 0.46 | 5/4 | none |
|
||
| stock_063 | +0.0105 | +0.0329 | 0.19 | 7/6 | none |
|
||
| stock_066 | +0.0089 | +0.0115 | 0.62 | 5/4 | none |
|
||
| stock_079 | +0.0056 | +0.0081 | 0.55 | 4/5 | down |
|
||
| stock_081 | -0.0029 | +0.0029 | 0.15 | 4/3 | down |
|
||
| stock_095 | -0.0028 | +0.0025 | 0.38 | 5/3 | up |
|
||
|
||
### 突破统计
|
||
|
||
- **向上突破**: 1 只 (stock_095)
|
||
- **向下突破**: 3 只 (stock_017, stock_079, stock_081)
|
||
- **未突破**: 6 只
|
||
|
||
---
|
||
|
||
## 4. 输出文件
|
||
|
||
```
|
||
outputs/sym_triangles/
|
||
├── stock_017.png
|
||
├── stock_019.png
|
||
├── stock_025.png
|
||
├── stock_031.png
|
||
├── stock_057.png
|
||
├── stock_063.png
|
||
├── stock_066.png
|
||
├── stock_079.png
|
||
├── stock_081.png
|
||
├── stock_095.png
|
||
└── summary.csv
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 脚本使用方法
|
||
|
||
```powershell
|
||
# 进入项目目录
|
||
cd D:\project\technical-patterns-lab
|
||
|
||
# 激活虚拟环境
|
||
.\.venv\Scripts\Activate.ps1
|
||
|
||
# 运行批量检测
|
||
python scripts/run_sym_triangle_pkl.py
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 相关文件
|
||
|
||
| 文件 | 说明 |
|
||
|------|------|
|
||
| `scripts/run_sym_triangle_pkl.py` | 批量检测脚本 (pkl 数据源) |
|
||
| `scripts/run_sym_triangle_json.py` | 单股检测脚本 (JSON 数据源) |
|
||
| `src/sym_triangle.py` | 核心算法模块 |
|
||
| `data/*.pkl.pkl` | OHLCV 数据文件 |
|
||
| `data/map/stock_name.json` | 股票代码映射表 |
|
||
|
||
---
|
||
|
||
## 7. 待优化项
|
||
|
||
- [ ] 关联 `stock_name.json` 显示真实股票代码/名称
|
||
- [ ] 图表标题显示真实日期(当前显示索引)
|
||
- [ ] 支持自定义股票筛选范围
|
||
- [ ] 添加更多形态参数到汇总表
|