M2 KeyLevelModule · 水平关键位
⬡ claude-sonnet-4-6 · 2026-05-20
算法概述
注册名
horizontal_swing所属插槽M2 KeyLevelModule
状态stable
核心思路通过摆动高低点(Swing High / Swing Low)识别历史上价格多次触碰并反转的水平区域,输出为价格区间(zone_low ~ zone_high),而非单条价格线。
适用场景适合各周期,趋势和震荡市场均有效
识别逻辑
摆动点识别
向左向右各看
swing_window 根 K 线。若当前 K 线的 High 高于左右各 N 根 K 线的 High,则为摆动高点(Swing High),标记为潜在阻力区中轴。低点同理(Swing Low)。触碰验证与强度
识别到摆动点后,回扫历史 K 线统计在该价格区间内(中轴 ±
zone_atr_multiplier × ATR)触碰过的 K 线数量。触碰次数(touch_count)低于 min_touch 的摆动点被过滤掉。去重与合并
若两个摆动点的中轴价格相差小于
merge_atr_multiplier × ATR,则合并为同一个关键位,中轴取两点的价格均值,touch_count 相加。避免同一价格区域出现多个重叠关键位。参数配置
| 参数名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
swing_window | int | 5 | 识别摆动点的左右回溯根数 |
min_touch | int | 2 | 最少触碰次数,低于此值的摆动点不输出 |
zone_atr_multiplier | float | 0.5 | 区间宽度 = ATR × 此值 × 2(上下各一半) |
merge_atr_multiplier | float | 0.3 | 价格差小于 ATR × 此值时合并摆动点 |
atr_period | int | 14 | ATR 计算周期 |
max_levels | int | 6 | 最多输出的关键位数量(按触碰次数降序保留) |
lookback_candles | int | 200 | 向后扫描的 K 线根数范围 |
输出规格
返回 List[KeyLevel],每个 KeyLevel 的字段含义:
| 字段 | 本算法的输出值说明 |
|---|---|
price | 摆动点中轴价格 |
zone_low | price - ATR × zone_atr_multiplier × 0.5 |
zone_high | price + ATR × zone_atr_multiplier × 0.5 |
level_type | 摆动高点 → "resistance";摆动低点 → "support";被多次反向触碰 → "both" |
touch_count | 历史触碰次数 |
last_touch_time | 最近一次触碰该区间的 K 线收盘时间戳 |
method | 固定为 "horizontal_swing" |
区间宽度说明
区间宽度随 ATR 动态调整,而非固定点数。高波动市场下区间自动变宽,低波动市场下变窄,避免参数在不同市场环境下失效。
图表层展示时,
zone_low 和 zone_high 用填充矩形(半透明色块)绘制,不画单条水平线。接口对齐
本算法实现 KeyLevelModule ABC,输入输出类型参见 module_interface_spec.html。