- 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.
3.8 KiB
3.8 KiB
对称三角形批量检测日志
日期: 2026-01-16
任务: 从 pkl 文件批量检测对称三角形
1. 数据源分析
pkl 文件结构
| 文件 | 说明 |
|---|---|
open.pkl.pkl |
开盘价矩阵 |
high.pkl.pkl |
最高价矩阵 |
low.pkl.pkl |
最低价矩阵 |
close.pkl.pkl |
收盘价矩阵 |
volume.pkl.pkl |
成交量矩阵 |
pkl 内部数据结构
{
'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 依赖
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. 检测参数
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. 脚本使用方法
# 进入项目目录
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显示真实股票代码/名称 - 图表标题显示真实日期(当前显示索引)
- 支持自定义股票筛选范围
- 添加更多形态参数到汇总表