- Introduced an interactive HTML stock viewer for visualizing strength scores and filtering stocks based on user-defined thresholds. - Added `--all-stocks` parameter to generate charts for all 108 stocks, including those not meeting convergence criteria. - Implemented a new scoring system for breakout strength, incorporating fitting adherence to improve accuracy. - Updated multiple documentation files, including usage instructions and feature overviews, to reflect recent enhancements. - Improved error handling and file naming conventions to ensure compatibility across platforms.
9.0 KiB
9.0 KiB
强度分计算详解与示例
创建时间:2026-01-27
版本:v1.0
概述
强度分是收敛三角形形态的综合质量评分(0~1),用于评估:
- 待突破形态的潜在价值(形态质量)
- 已突破形态的有效性(突破可信度)
核心公式:
强度分 = 价格突破×50% + 收敛程度×20% + 成交量×15% + 拟合贴合度×15%
计算流程
步骤1:价格突破分数(权重 50%)
公式
price_score = tanh(突破幅度% × 15)
计算步骤
场景A:向上突破
当前收盘价 = 10.5元
上沿线价格 = 10.0元
1. 计算突破幅度百分比
突破幅度 = (10.5 - 10.0) / 10.0 = 0.05 = 5%
2. 应用 tanh 函数归一化
price_score = tanh(0.05 × 15) = tanh(0.75) ≈ 0.64
3. 乘以权重计算贡献
价格贡献 = 0.64 × 0.50 = 0.32
场景B:未突破
当前收盘价 = 9.5元
上沿线价格 = 10.0元
下沿线价格 = 9.0元
价格在三角形内部,未突破任何一边
→ 突破幅度 = 0
→ price_score = 0
→ 价格贡献 = 0
映射表
| 突破幅度 | price_score | 贡献分数 (×50%) | 说明 |
|---|---|---|---|
| 0% | 0.00 | 0.000 | 未突破 |
| 1% | 0.15 | 0.075 | 微弱突破 |
| 2% | 0.29 | 0.145 | 轻度突破 |
| 3% | 0.42 | 0.210 | 中等突破 |
| 5% | 0.64 | 0.320 | 强势突破 |
| 8% | 0.83 | 0.415 | 大幅突破 |
| 10% | 0.91 | 0.455 | 极强突破 |
步骤2:收敛程度分数(权重 20%)
公式
convergence_score = 1 - width_ratio
width_ratio = 三角形末端宽度 / 起始宽度
计算步骤
三角形起始(窗口开始):
上沿价格 = 12.0元
下沿价格 = 8.0元
起始宽度 = 12.0 - 8.0 = 4.0元
三角形末端(检测日期):
上沿价格 = 10.0元
下沿价格 = 9.0元
末端宽度 = 10.0 - 9.0 = 1.0元
1. 计算宽度比
width_ratio = 1.0 / 4.0 = 0.25
2. 计算收敛分数
convergence_score = 1 - 0.25 = 0.75
3. 乘以权重计算贡献
收敛贡献 = 0.75 × 0.20 = 0.15
映射表
| width_ratio | 收敛程度 | convergence_score | 贡献分数 (×20%) | 说明 |
|---|---|---|---|---|
| 0.80 | 较弱 | 0.20 | 0.040 | 收窄20% |
| 0.60 | 中等 | 0.40 | 0.080 | 收窄40% |
| 0.40 | 较强 | 0.60 | 0.120 | 收窄60% |
| 0.25 | 很强 | 0.75 | 0.150 | 收窄75% |
| 0.10 | 极强 | 0.90 | 0.180 | 收窄90% |
| 0.05 | 极度收敛 | 0.95 | 0.190 | 收窄95% |
解读:三角形收得越窄,蓄势越充分,突破越有力。
步骤3:成交量分数(权重 15%)
公式
vol_score = min(1, max(0, volume_ratio - 1))
volume_ratio = 当日成交量 / 近20日平均成交量
计算步骤
当日成交量 = 150万股
近20日平均成交量 = 100万股
1. 计算成交量倍数
volume_ratio = 150 / 100 = 1.5
2. 计算成交量分数
vol_score = min(1, max(0, 1.5 - 1)) = 0.5
3. 乘以权重计算贡献
成交量贡献 = 0.5 × 0.15 = 0.075
映射表
| volume_ratio | 成交量状态 | vol_score | 贡献分数 (×15%) | 说明 |
|---|---|---|---|---|
| 0.8 | 缩量 | 0.00 | 0.000 | 成交量萎缩 |
| 1.0 | 平量 | 0.00 | 0.000 | 与均值持平 |
| 1.3 | 温和放量 | 0.30 | 0.045 | 放量30% |
| 1.5 | 中度放量 | 0.50 | 0.075 | 放量50% |
| 2.0 | 大幅放量 | 1.00 | 0.150 | 放量100% |
| 3.0 | 巨量 | 1.00 | 0.150 | 放量200%(上限) |
解读:放量突破更可信,但不是必要条件(有些有效突破不放量)。
步骤4:拟合贴合度分数(权重 15%)
公式
fitting_score = exp(-mean_rel_error × 20)
mean_rel_error = 枢轴点到拟合线的平均相对误差
计算步骤
上沿拟合贴合度:
选中的高点枢轴点(3个):
点1:实际价格 = 11.0元,拟合线价格 = 11.1元
点2:实际价格 = 10.5元,拟合线价格 = 10.4元
点3:实际价格 = 10.2元,拟合线价格 = 10.1元
1. 计算各点相对误差
误差1 = |11.0 - 11.1| / 11.1 = 0.009 = 0.9%
误差2 = |10.5 - 10.4| / 10.4 = 0.010 = 1.0%
误差3 = |10.2 - 10.1| / 10.1 = 0.010 = 1.0%
2. 计算平均相对误差
mean_rel_error = (0.009 + 0.010 + 0.010) / 3 ≈ 0.010 = 1.0%
3. 计算上沿贴合度
adherence_upper = exp(-0.01 × 20) = exp(-0.2) ≈ 0.82
下沿拟合贴合度(假设同样计算得到 0.82)
综合贴合度:
fitting_score = (adherence_upper + adherence_lower) / 2
= (0.82 + 0.82) / 2
= 0.82
拟合贴合度贡献 = 0.82 × 0.15 = 0.123
映射表
| 平均相对误差 | fitting_score | 贡献分数 (×15%) | 形态评价 |
|---|---|---|---|
| 0% | 1.00 | 0.150 | 完美拟合 |
| 0.5% | 0.90 | 0.135 | 极佳 |
| 1% | 0.82 | 0.123 | 优秀 |
| 2% | 0.67 | 0.100 | 良好 |
| 3% | 0.55 | 0.082 | 较好 |
| 5% | 0.37 | 0.055 | 一般 |
| 10% | 0.14 | 0.021 | 较差 |
解读:枢轴点越贴合拟合线,形态越标准、越"纯净"。
完整计算示例
案例:中度向上突破
输入数据:
├─ 当前收盘价: 10.5元
├─ 上沿线价格: 10.0元
├─ 下沿线价格: 9.0元
├─ 三角形起始宽度: 4.0元 (12-8)
├─ 三角形末端宽度: 1.0元 (10-9)
├─ 当日成交量: 150万股
├─ 20日平均成交量: 100万股
└─ 枢轴点平均相对误差: 1.0%
计算过程:
| 分量 | 原始分数 | 权重 | 贡献分数 | 计算过程 |
|---|---|---|---|---|
| 价格突破 | 0.64 | ×50% | 0.320 | tanh(5% × 15) ≈ 0.64 |
| 收敛程度 | 0.75 | ×20% | 0.150 | 1 - 0.25 = 0.75 |
| 成交量 | 0.50 | ×15% | 0.075 | 1.5 - 1 = 0.5 |
| 拟合贴合度 | 0.82 | ×15% | 0.123 | exp(-1% × 20) ≈ 0.82 |
| 强度分总计 | - | - | 0.668 | 四项求和 |
结果:
强度分 ≈ 0.67
评级:中度突破(0.5~0.7区间)
建议:有效突破,可作为参考信号
不同场景对比
场景1:强势突破(0.85分)
特征:
✓ 大幅突破(8%)
✓ 极度收敛(width_ratio = 0.05)
✓ 大幅放量(2倍)
✓ 形态标准(1%误差)
计算:
价格贡献 = 0.83 × 0.50 = 0.415
收敛贡献 = 0.95 × 0.20 = 0.190
成交量贡献 = 1.00 × 0.15 = 0.150
拟合贡献 = 0.82 × 0.15 = 0.123
────────────────────────────────
强度分 = 0.878 ≈ 0.88 (强势突破)
场景2:待突破形态(0.35分)
特征:
✗ 未突破(0%)
✓ 收敛较好(width_ratio = 0.25)
✗ 未放量(1倍)
✓ 形态标准(1%误差)
计算:
价格贡献 = 0.00 × 0.50 = 0.000 ← 未突破
收敛贡献 = 0.75 × 0.20 = 0.150
成交量贡献 = 0.00 × 0.15 = 0.000
拟合贡献 = 0.82 × 0.15 = 0.123
────────────────────────────────
强度分 = 0.273 ≈ 0.27 (待突破)
解读:虽然未突破,但形态质量不错,值得关注。
场景3:弱势突破(0.45分)
特征:
△ 小幅突破(2%)
△ 收敛一般(width_ratio = 0.60)
✗ 未放量(1倍)
△ 形态一般(3%误差)
计算:
价格贡献 = 0.29 × 0.50 = 0.145
收敛贡献 = 0.40 × 0.20 = 0.080
成交量贡献 = 0.00 × 0.15 = 0.000
拟合贡献 = 0.55 × 0.15 = 0.082
────────────────────────────────
强度分 = 0.307 + 0.15 = 0.457 ≈ 0.46 (轻度突破)
解读:突破幅度小且无放量确认,可信度较低。
强度等级参考
| 强度范围 | 等级 | 含义 | 建议 |
|---|---|---|---|
| 0.00 ~ 0.30 | 微弱 | 待突破或假突破风险高 | 谨慎观察 |
| 0.30 ~ 0.50 | 轻度 | 有突破迹象但不充分 | 需更多确认 |
| 0.50 ~ 0.70 | 中度 | 有效突破,可作为参考 | 可以关注 |
| 0.70 ~ 0.90 | 强势 | 高置信度突破 | 值得重点关注 |
| 0.90 ~ 1.00 | 极强 | 顶级突破信号 | 强烈关注 |
权重设计理由
| 分量 | 权重 | 理由 |
|---|---|---|
| 价格突破 | 50% | 最直接的信号,决定性因素 |
| 收敛程度 | 20% | 收敛越强,蓄势越充分,突破有效性越高 |
| 成交量 | 15% | 放量是确认信号,但非必要条件 |
| 拟合贴合度 | 15% | 形态纯度指标,过滤杂乱形态 |
总和 = 100%,确保分数在 0~1 范围内。
代码实现
详见:src/converging_triangle.py
calc_fitting_adherence()- 计算拟合贴合度calc_breakout_strength()- 计算强度分(主函数)detect_converging_triangle()- 调用强度计算