triangle-validator/README.md

155 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# triangle-validator
收敛三角形Converging Triangle形态检测可视化验证工具。
通过调用远程 HTTP API 执行公式并拉取结果,绘制 K 线图 + 三角形趋势线,
帮助快速目测验证形态检测结果是否准确。**无需本地数据库,无需 dunhe 虚拟环境。**
**支持 A 股和美股**(如英伟达、苹果等)。
**技术文档**[docs/triangle-validator-guide_20260304.md](docs/triangle-validator-guide_20260304.md)
---
## 目录结构
```
triangle-validator/
├── validate.py # 主入口:单股验证
├── batch_validate.py # 批量验证多只股票
├── chart.py # K 线 + 三角形绘图模块
├── config.py # API 端点 & 认证配置
├── requirements.txt # Python 依赖
├── output/ # 生成的图片(自动创建)
└── README.md
```
---
## 前提条件
只需要系统 Python3.8+)及两个依赖包:
```bash
pip install requests mplfinance
```
---
## 单股验证
```bash
# 基本用法日K弹出窗口
python validate.py 中远海控
# 使用中文名称(自动搜索转换为股票代码)
python validate.py 中控技术 日 --window 3Y --save
# 美股也支持
python validate.py 英伟达 日 --window 3Y --save
# 周K保存图片
python validate.py 中远海控 周 --save
# 月K不弹窗只保存
python validate.py SH600519 月 --no-show --save
# 指定截止日期
python validate.py 贵州茅台 日 --date 20260120 --save
# 使用激进模式mode=1
python validate.py 宁德时代 周 --mode 1 --save
```
### 参数说明
| 参数 | 说明 |
|------|------|
| `ticker` | 股票名称(如"中远海控"、"英伟达")或代码(如"SH601919"|
| `freq` | 频率:`日` / `周` / `月`,默认 `日` |
| `--save` | 保存 PNG 到 `output/` 目录 |
| `--no-show` | 不弹出交互窗口(适合服务器/批量场景)|
| `--date` | 截止日期,格式 `YYYYMMDD`,默认最新数据日 |
| `--mode` | 强度模式0=等权 1=激进 2=保守 3=放量,默认 0 |
| `--window` | K 线时间窗口:`1Y` / `3Y` / `5Y` / `ALL`,默认 `3Y` |
---
## 批量验证
```bash
# 默认批量(内置测试列表,日/周/月各一批)
python batch_validate.py
# 只保存,不弹窗
python batch_validate.py --no-show --save
```
修改 `batch_validate.py` 中的 `BATCH_CASES` 列表可自定义验证标的。
---
## 图表说明
生成的图表包含以下元素:
| 元素 | 颜色 | 含义 |
|------|------|------|
| 红色趋势线 | `#ef4444` | 上沿(压力线),从窗口起点延伸到终点 |
| 绿色趋势线 | `#10b981` | 下沿(支撑线),从窗口起点延伸到终点 |
| 红色虚线 | `#ef4444` | 上突破价位 |
| 绿色虚线 | `#10b981` | 下突破价位 |
标题格式:`{ticker} {频率}K 强度={score:.3f} {方向} 窗口 yyyyMMdd ~ yyyyMMdd`
---
## 数据流
```
validate.py
① GET {SEARCH_API_URL}/smartstock/assets/search?q=<关键词>
→ 获取正确的 ticker如 "中控技术" → "SH688777"
② POST {GPT_SERVER_URL}/innerServer/runOneFormula
body: { formula_str: "结果=收敛三角形详情(ticker,freq,True,mode)" }
→ response.output = MongoDB _id
③ GET {DATA_SERVER_URL}/api/timeSeries/requestIndexDetail?id=<_id>
header: Authorization: Bearer <token>
→ data.data_info.detail
├─ strength / direction / is_valid
├─ breakout_price_up / breakout_price_down
└─ chart_data
├─ upper_line / lower_line (趋势线端点)
├─ upper_pivots / lower_pivots (枢轴点)
└─ window_start_date / window_end_date
④ GET {KLINE_API_URL}/dataSupport/getKLineDataByTicker?ticker=<ticker>&begin_date=<begin_date>
→ 获取 K 线 OHLC 数据3年历史
⑤ chart.draw_triangle_chart(detail)
→ mplfinance 绘制 K 线 + 趋势线
→ Y 轴自动调整以包含趋势线
→ output/{ticker}_{freq}K_{date}.png
```
---
## 常见问题
**Q: 报错 `ModuleNotFoundError: No module named 'requests'`**
A: 执行 `pip install requests mplfinance`
**Q: 报错 `ConnectionError` 或 `404`**
A: 检查 `config.py` 中的 `GPT_SERVER_URL` / `DATA_SERVER_URL` 是否正确,以及 token 是否过期。
**Q: 公式执行失败,未返回 _id**
A: 确认 ticker 名称正确,或改用标准代码(如 `SH600519`)。
**Q: 图表中文乱码(显示方框)**
A: 安装中文字体,推荐 `Microsoft YaHei`Windows 自带)或 `SimHei`。chart.py 会自动检测并应用。
**Q: 美股 K 线数据获取失败**
A: 使用中文名称(如"英伟达")而非股票代码,程序会自动通过搜索接口获取正确的 ticker。