Knowledge · Terms · SFP

SFP

Indicator pattern
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

  1. Stop clustering: stop orders and pending breakout entries accumulate above/below swing highs/lows.
  2. Liquidity run: smart money (market makers, large participants) deliberately pushes price into these zones to collect liquidity.
  3. 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.