褚宏光 59622a6ef7 feat: 增加命令行参数以支持自定义枢轴点窗口、收敛比和最小收敛比例
docs: 更新 README 示例以包含比亚迪的日、周、月 K 线图
fix: 修复趋势线绘制逻辑,支持周K/月K聚合后的日期匹配
docs: 添加 K 线形态参数调整建议文档
2026-03-04 17:39:27 +08:00

4.9 KiB
Raw Permalink Blame History

triangle-validator

收敛三角形Converging Triangle形态检测可视化验证工具。

通过调用远程 HTTP API 执行公式并拉取结果,绘制 K 线图 + 三角形趋势线, 帮助快速目测验证形态检测结果是否准确。无需本地数据库,无需 dunhe 虚拟环境。

支持 A 股和美股(如英伟达、苹果等)。

技术文档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+)及两个依赖包:

pip install requests mplfinance

单股验证

# 基本用法日K弹出窗口
python validate.py 中远海控

# 使用中文名称(自动搜索转换为股票代码)
python validate.py 比亚迪 日 --window 3Y --save --no-show 
python validate.py 比亚迪 周 --window 10Y --save --no-show 
python validate.py 比亚迪 月 --window 3Y --save --no-show 
# 美股也支持
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

批量验证

# 默认批量(内置测试列表,日/周/月各一批)
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: 报错 ConnectionError404 A: 检查 config.py 中的 GPT_SERVER_URL / DATA_SERVER_URL 是否正确,以及 token 是否过期。

Q: 公式执行失败,未返回 _id A: 确认 ticker 名称正确,或改用标准代码(如 SH600519)。

Q: 图表中文乱码(显示方框) A: 安装中文字体,推荐 Microsoft YaHeiWindows 自带)或 SimHei。chart.py 会自动检测并应用。

Q: 美股 K 线数据获取失败 A: 使用中文名称(如"英伟达")而非股票代码,程序会自动通过搜索接口获取正确的 ticker。