注册名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_windowint5识别摆动点的左右回溯根数
min_touchint2最少触碰次数,低于此值的摆动点不输出
zone_atr_multiplierfloat0.5区间宽度 = ATR × 此值 × 2(上下各一半)
merge_atr_multiplierfloat0.3价格差小于 ATR × 此值时合并摆动点
atr_periodint14ATR 计算周期
max_levelsint6最多输出的关键位数量(按触碰次数降序保留)
lookback_candlesint200向后扫描的 K 线根数范围

返回 List[KeyLevel],每个 KeyLevel 的字段含义:

字段本算法的输出值说明
price摆动点中轴价格
zone_lowprice - ATR × zone_atr_multiplier × 0.5
zone_highprice + 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。