Swing Failure Pattern (Hsaka)
Wick through an N-bar swing high/low, but the candle closes back below/above it. Shows a failed breakout attempt — often the start of a countermove.
Core idea
Popularized by Hsaka (@HsakaTrades) in the crypto community, related to the classic "liquidity grab" / "stop hunt" concept from smart-money analysis.
The Swing Failure Pattern describes a failed breakout attempt:
- price briefly exceeds a significant swing high (or low)
- but does not close above/below it
- most traders who bet on the breakout are now positioned on the wrong side
Signal logic
SHORT signal:
high_now > swing_high (wick through) AND close_now < swing_high (closes below)
LONG signal:
low_now < swing_low (wick through) AND close_now > swing_low (closes above)
swing_high = maximum of the last sfp_lookback bars (default: 20).
Why it works
- Stop clustering: stop orders and pending breakout entries accumulate above/below swing highs/lows.
- Liquidity run: smart money (market makers, large participants) deliberately pushes price into these zones to collect liquidity.
- Failed breakout = fuel for the reversal: after the wick, the buying/selling power for a genuine breakout is missing — a reversal follows.
Botty implementation
strategies/conditions.py → entry condition sfp. Checked on candle close (signal_on_close: true).
swing_high = df["high"].iloc[-sfp_lookback-1:-1].max()
if high_now > swing_high and close_now < swing_high:
return SHORT # failed breakout to the upside
if low_now < swing_low and close_now > swing_low:
return LONG # failed breakout to the downside
Parameter: sfp_lookback (default: 20) — number of bars for the swing range.
Context and filters
- Stronger when the swing level is a multiply touched level (more stop orders accumulated).
- Combining with an EMA-200 filter or session filter improves quality.
- Works especially well on 15m–4h in crypto.