technical-patterns-lab/docs/2026-01-26_图表详细模式功能.md
褚宏光 95d13b2cce Enhance converging triangle analysis with detailed mode and outlier removal algorithm
- Added `--show-details` parameter to `pipeline_converging_triangle.py` for generating detailed charts that display all pivot points and fitting lines.
- Implemented an iterative outlier removal algorithm in `fit_pivot_line` to improve the accuracy of pivot point fitting by eliminating weak points.
- Updated `USAGE.md` to include new command examples for the detailed mode.
- Revised multiple documentation files to reflect recent changes and improvements in the pivot detection and visualization processes.
2026-01-26 18:43:18 +08:00

16 KiB
Raw Blame History

图表详细模式功能说明

日期: 2026-01-26
功能: 图表可视化改进 - 简洁模式与详细模式
版本: v2.0 (移除分段竖线 + 流水线支持)


📋 功能概述

为了满足不同使用场景的需求,我们为收敛三角形图表增加了简洁模式详细模式两种显示方式:

  • 简洁模式(默认): 仅显示收盘价、上沿线、下沿线,图表清爽易读
  • 详细模式: 显示所有枢轴点、拟合点,便于理解算法

v2.0 更新: 移除分段竖线(算法已改为迭代离群点移除)


🎯 使用场景

简洁模式

  • 日常使用和实盘选股
  • 快速查看三角形形态
  • 对外展示和报告
  • 减少视觉干扰

详细模式

  • 算法调试和验证
  • 理解枢轴点识别逻辑
  • 验证迭代拟合算法
  • 学习和教学用途

📊 两种模式对比

显示元素 简洁模式 详细模式 说明
收盘价线 黑色实线
上沿线 红色虚线
下沿线 绿色虚线
所有高点枢轴点 浅红色小实心圆
所有低点枢轴点 浅绿色小实心圆
上沿拟合点 深红色大空心圆(迭代算法选出)
下沿拟合点 深绿色大空心圆(迭代算法选出)
分段竖线 v2.0已移除
输出文件名 YYYYMMDD_代码_名称.png YYYYMMDD_代码_名称_detail.png

文件名说明:

  • 简洁模式文件不带后缀
  • 详细模式文件带 _detail 后缀
  • 两种模式可以同时保留,方便对比查看

🛠️ 如何启用

方法1: 流水线脚本(推荐)

# 简洁模式(默认)
python scripts/pipeline_converging_triangle.py

# 详细模式
python scripts/pipeline_converging_triangle.py --show-details

# 组合使用
python scripts/pipeline_converging_triangle.py --date 20260120 --show-details

方法2: 单独绘图脚本

# 简洁模式(默认)
python scripts/plot_converging_triangles.py

# 详细模式
python scripts/plot_converging_triangles.py --show-details

方法3: 配置文件(默认设置)

编辑 scripts/triangle_config.py:

# 图表详细模式(显示枢轴点等调试信息)
SHOW_CHART_DETAILS = False  # False=简洁模式默认True=详细模式

优先级: 命令行参数 > 配置文件

智能清理:

  • 简洁模式运行时,只清理简洁模式的旧图片
  • 详细模式运行时,只清理详细模式的旧图片
  • 两种模式互不影响,可以共存

📈 详细模式显示元素说明

1. 所有枢轴点(小实心圆)

作用: 显示算法识别的所有局部高点和低点

  • 高点枢轴点: 浅红色size=50alpha=0.4
  • 低点枢轴点: 浅绿色size=50alpha=0.4

标签: 所有高点枢轴点(N) / 所有低点枢轴点(N)

2. 拟合点(大空心圆)

作用: 显示迭代离群点移除算法最终选出的关键点

  • 上沿拟合点: 深红色空心圆size=120linewidth=2.5
  • 下沿拟合点: 深绿色空心圆size=120linewidth=2.5

标签: 上沿拟合点(N) / 下沿拟合点(N)

说明:

  • 使用迭代离群点移除算法选出代表性强的枢轴点
  • 自动过滤"弱"枢轴点(偏离趋势线过大的点)
  • 详见 枢轴点拟合算法详解

3. 分段竖线(已移除)

v2.0 更新: 由于算法改为迭代离群点移除,不再使用分段策略,因此移除了分段竖线。


💡 图表解读示例

简洁模式(默认)

图表内容:
├─ 黑色实线:收盘价
├─ 红色虚线:上沿线(向下)
└─ 绿色虚线:下沿线(向上)

图例:
- 收盘价
- 上沿
- 下沿

优点:

  • 清晰直观
  • 无视觉干扰
  • 适合日常使用

详细模式(--show-details

图表内容:
├─ 黑色实线:收盘价
├─ 红色虚线:上沿线
├─ 绿色虚线:下沿线
├─ 浅红小圆:所有高点枢轴点
├─ 浅绿小圆:所有低点枢轴点
├─ 深红大圆:上沿拟合点(迭代算法选出)
└─ 深绿大圆:下沿拟合点(迭代算法选出)

图例:
- 收盘价
- 上沿
- 下沿
- 所有高点枢轴点(N)
- 所有低点枢轴点(N)
- 上沿拟合点(N)
- 下沿拟合点(N)

优点:

  • 完整展示算法逻辑
  • 便于验证和调试
  • 有助于理解原理

🎨 视觉层次设计

图表元素的 Z-order从后到前

1. 网格线alpha=0.3
2. 价格曲线黑色zorder=默认)
3. 所有枢轴点浅色小圆alpha=0.4zorder=4
4. 拟合点深色大圆zorder=5
5. 趋势线(红/绿虚线zorder=默认)

设计原则:

  • 详细信息放在后层(不遮挡主要信息)
  • 关键信息拟合点突出显示zorder高
  • 使用透明度alpha区分重要性

📝 代码实现要点

1. 流水线参数传递

# pipeline_converging_triangle.py
parser.add_argument("--show-details", action="store_true")

# 传递给绘图脚本
if args.show_details:
    cmd_args.append("--show-details")

2. 绘图脚本参数

# plot_converging_triangles.py
parser.add_argument(
    "--show-details",
    action="store_true",
    help="显示详细调试信息(枢轴点、拟合点等)",
)

3. 条件渲染

# 详细模式:显示所有枢轴点和拟合点
if show_details:
    # 绘制所有枢轴点
    ax1.scatter(ph_display_idx, high_win[ph_idx], ...)
    
    # 绘制拟合点
    ax1.scatter(selected_ph_display, high_win[selected_ph_pos], ...)

测试验证

测试用例1: 流水线简洁模式(默认)

python scripts/pipeline_converging_triangle.py

预期结果:

  • 控制台显示:"图表模式: 简洁模式(仅显示价格和趋势线)"
  • 图表只显示收盘价、上沿、下沿
  • 输出文件: 20260120_SZ300278_华昌达.png

测试用例2: 流水线详细模式

python scripts/pipeline_converging_triangle.py --show-details

预期结果:

  • 控制台显示:"图表模式: 详情模式(显示所有枢轴点)"
  • 图表显示所有枢轴点和拟合点
  • 输出文件: 20260120_SZ300278_华昌达_detail.png

📚 相关文档


🎉 总结

通过添加简洁模式详细模式,图表功能更加灵活:

  • 对于日常用户: 简洁清爽的图表,快速查看形态
  • 对于研究者: 完整的算法细节,深入理解逻辑
  • 对于开发者: 便于调试和验证算法正确性

v2.0 改进:

  • 移除了不再适用的分段竖线
  • 流水线脚本支持详情模式
  • 更符合新的迭代拟合算法

这个功能提升了项目的易用性和专业性!🎯


🎯 使用场景

简洁模式

  • 日常使用和实盘选股
  • 快速查看三角形形态
  • 对外展示和报告
  • 减少视觉干扰

详细模式

  • 算法调试和验证
  • 理解枢轴点识别逻辑
  • 验证分段选择算法
  • 学习和教学用途

📊 两种模式对比

显示元素 简洁模式 详细模式 说明
收盘价线 黑色实线
上沿线 红色虚线
下沿线 绿色虚线
所有高点枢轴点 浅红色小实心圆 (6个)
所有低点枢轴点 浅绿色小实心圆 (4个)
上沿拟合点 深红色大空心圆 (3个)
下沿拟合点 深绿色大空心圆 (4个)
高点分段线 红色点划线 + "高1|2"标签
低点分段线 绿色点划线 + "低1|2"标签
输出文件名 YYYYMMDD_代码_名称.png YYYYMMDD_代码_名称_detail.png
文件大小 约 135KB 约 155KB

文件名说明:

  • 简洁模式文件不带后缀
  • 详细模式文件带 _detail 后缀
  • 两种模式可以同时保留,方便对比查看

🛠️ 如何启用

方法1: 配置文件(默认设置)

编辑 scripts/triangle_config.py:

# 图表详细模式(显示枢轴点、分段线等调试信息)
SHOW_CHART_DETAILS = False  # False=简洁模式默认True=详细模式

方法2: 命令行参数(临时启用)

# 简洁模式(默认)
# 输出: 20260120_SZ002343_慈文传媒.png
python scripts/plot_converging_triangles.py

# 详细模式(临时启用)
# 输出: 20260120_SZ002343_慈文传媒_detail.png
python scripts/plot_converging_triangles.py --show-details

# 对比查看:同时生成两种模式
python scripts/plot_converging_triangles.py              # 生成简洁版
python scripts/plot_converging_triangles.py --show-details # 生成详细版
# 两个文件会同时保留文件名不同详细版带_detail后缀

优先级: 命令行参数 > 配置文件

智能清理:

  • 简洁模式运行时,只清理简洁模式的旧图片
  • 详细模式运行时,只清理详细模式的旧图片
  • 两种模式互不影响,可以共存

📈 详细模式显示元素说明

1. 所有枢轴点(小实心圆)

作用: 显示算法识别的所有局部高点和低点

  • 高点枢轴点: 浅红色size=50alpha=0.4
  • 低点枢轴点: 浅绿色size=50alpha=0.4

标签: 所有高点枢轴点(6) / 所有低点枢轴点(4)

2. 拟合点(大空心圆)

作用: 显示最终用于线性回归拟合趋势线的代表性点

  • 上沿拟合点: 深红色空心圆size=120linewidth=2.5
  • 下沿拟合点: 深绿色空心圆size=120linewidth=2.5

标签: 上沿拟合点(3) / 下沿拟合点(4)

说明:

  • 如果枢轴点 > 4分3段每段选1个最高/最低)
  • 如果枢轴点 ≤ 4全部使用

3. 分段竖线(点划线)

作用: 显示算法如何将枢轴点按时间分段

  • 高点分段线: 红色点划线,标签位于顶部

    • 高1|2: 第1段和第2段分界
    • 高2|3: 第2段和第3段分界
  • 低点分段线: 绿色点划线,标签位于底部

    • 低1|2: 第1段和第2段分界
    • 低2|3: 第2段和第3段分界

说明: 只有当枢轴点 > 4 时才显示分段线


🔍 分段逻辑说明

高点和低点独立分段

高点枢轴点和低点枢轴点分别独立进行分段,互不影响:

# 高点枢轴点6个
n_high = 6 > 4   需要分段
segment_size = 6 // 3 = 2

第1段: [0, 2)  2个点  选最高的1个
第2段: [2, 4)  2个点  选最高的1个
第3段: [4, 6)  2个点  选最高的1个

结果: 3个拟合点红色大空心圆

# 低点枢轴点4个
n_low = 4  4   不分段

结果: 全部4个都用于拟合绿色大空心圆

为什么这样设计?

  1. 时间均衡: 确保前、中、后三个时间段都有代表点
  2. 代表性强: 每段选最极值点,确保线是真正的边界
  3. 稳定性好: 多点回归比两点连线更稳健
  4. 覆盖性好: 确保趋势线能包络所有枢轴点

💡 图表解读示例

简洁模式(默认)

图表内容:
├─ 黑色实线:收盘价
├─ 红色虚线:上沿线(向下)
└─ 绿色虚线:下沿线(向上)

图例:
- 收盘价
- 上沿
- 下沿

优点:

  • 清晰直观
  • 无视觉干扰
  • 适合日常使用

详细模式(--show-details

图表内容:
├─ 黑色实线:收盘价
├─ 红色虚线:上沿线
├─ 绿色虚线:下沿线
├─ 浅红小圆所有6个高点枢轴点
├─ 浅绿小圆所有4个低点枢轴点
├─ 深红大圆上沿拟合点3个从6个中选出
├─ 深绿大圆下沿拟合点4个全部使用
├─ 红色竖线:高点分段线("高1|2"、"高2|3"
└─ 低点因≤4无分段线

图例:
- 收盘价
- 上沿
- 下沿
- 所有高点枢轴点(6)
- 所有低点枢轴点(4)
- 上沿拟合点(3)
- 下沿拟合点(4)

优点:

  • 完整展示算法逻辑
  • 便于验证和调试
  • 有助于理解原理

🎨 视觉层次设计

图表元素的 Z-order从后到前

1. 网格线alpha=0.3
2. 价格曲线黑色zorder=默认)
3. 分段竖线(红/绿alpha=0.4zorder=3
4. 所有枢轴点浅色小圆alpha=0.4zorder=4
5. 拟合点深色大圆zorder=5
6. 趋势线(红/绿虚线zorder=默认)

设计原则:

  • 详细信息放在后层(不遮挡主要信息)
  • 关键信息拟合点突出显示zorder高
  • 使用透明度alpha区分重要性

📝 代码实现要点

1. 配置参数

# triangle_config.py
SHOW_CHART_DETAILS = False  # 默认简洁模式

2. 函数签名

def plot_triangle(
    # ... 其他参数
    show_details: bool = False,  # 是否显示详细信息
) -> None:

3. 条件渲染

# 详细模式:显示所有枢轴点、拟合点、分段线
if show_details:
    # 绘制所有枢轴点
    ax1.scatter(ph_display_idx, high_win[ph_idx], ...)
    
    # 绘制拟合点
    ax1.scatter(selected_ph_display, high_win[selected_ph_pos], ...)
    
    # 绘制分段线
    if len(ph_idx) > 4:
        ax1.axvline(boundary_1, ...)

4. 命令行参数

parser.add_argument(
    "--show-details",
    action="store_true",
    help="显示详细调试信息(枢轴点、拟合点、分段线等)",
)

🔧 维护建议

未来可能的改进

  1. 更多可视化选项

    • 支持只显示枢轴点(不显示分段线)
    • 支持自定义颜色方案
    • 支持调整标记大小
  2. 交互式图表

    • 使用 plotly 实现交互式图表
    • 鼠标悬停显示详细信息
    • 可点击切换详细模式
  3. 配置模板

    • 预设多种显示模板(极简、标准、详细)
    • 支持保存自定义配置

测试验证

测试用例1: 默认简洁模式

python scripts/plot_converging_triangles.py

预期结果:

  • 控制台显示:"详细模式: 关闭 (简洁模式)"
  • 图表只显示收盘价、上沿、下沿
  • 图例简洁3项

测试用例2: 命令行启用详细模式

python scripts/plot_converging_triangles.py --show-details

预期结果:

  • 控制台显示:"详细模式: 开启 (--show-details)"
  • 图表显示所有枢轴点、拟合点、分段线
  • 图例详细7项

测试用例3: 配置文件启用详细模式

修改 triangle_config.py:

SHOW_CHART_DETAILS = True

运行:

python scripts/plot_converging_triangles.py

预期结果:

  • 详细模式生效(即使不加 --show-details

📚 相关文档


🎉 总结

通过添加简洁模式详细模式,图表功能更加灵活:

  • 对于日常用户: 简洁清爽的图表,快速查看形态
  • 对于研究者: 完整的算法细节,深入理解逻辑
  • 对于开发者: 便于调试和验证算法正确性

这个功能提升了项目的易用性和专业性!🎯