OPEN-SOURCE SCRIPT

Failed Auction Detector

896
Failed Auction Detector — footprint-confirmed rejection at swept reference levels

Every push through a level is the market asking a question: is there real business up here, or was that just noise wearing conviction's clothes? Most of the time nobody answers the question properly. A wick forms, the candle closes back inside the level, and every "stop hunt" or "liquidity sweep" indicator on the platform declares victory — because that's all they ever look at: the shape left behind, not what actually traded while it was being made.

That's the gap this script was built to close. A market is a two-sided auction. When price extends beyond a reference level — a swing extreme, a session high or low, the prior day's high or low — the auction is testing whether new business exists at the new price. It either finds acceptance and the range expands, or it finds nothing and snaps back. The candle can't tell you which one happened; the volume that traded during the extension can.

The problem with wicks

A wick past a level that closes back inside is a necessary condition for a failed auction. It is nowhere near sufficient. Thin resting liquidity, a single oversized print, plain noise — all of these can leave the exact same shadow on a chart with no real shift in who was willing to transact at the new price. Build a rule on candle shape alone and you're building a rule that mostly detects candle shapes, not auctions failing.

How a signal earns its place

I decomposed "failed auction" into three conditions, checked in order, not one threshold:

Sweep — price trades through a reference level you've enabled (a confirmed swing pivot, the developing session high/low, and/or the prior day's high/low; run any combination at once).
Rejection in the footprint — the part that actually does the work. "Rejection" isn't one observable event; it's a state that several distinct microstructure mechanisms can each produce on their own, so instead of one blanket volume-and-range test, the script checks four independent ways an auction can lose its nerve: an aggressive imbalance stepping in against the move, exhaustion of the side that pushed the extreme (its own volume thinning out relative to the session's point of control), absorption (heavy volume at the extreme that produced no further ground given), or an outright reversal in net delta at the extreme itself. A signal needs the sweep and reclaim plus any one of these four — alternative evidence for the same event, not four boxes that all have to tick, because real failures don't always announce themselves the same way twice.
Reclaim — the bar closes back inside the level. The extension didn't hold.

Conviction, not a coin flip

Two failed auctions can carry very different weight, and collapsing that to a plain yes/no throws away exactly the information that separates them. Every confirmed signal earns a 0–6 score from reclaim distance in ATR, rejection-wick size, whether the footprint imbalance fired, whether any rejection mechanism was present at all, volume significance against its recent average, and confluence with the prior day's level. That resolution is what lets a score bucket be tested against forward outcomes later, instead of trusted on faith because it's printed on the chart. Score ≥ 5 gets marked separately as high conviction.

You choose which levels are worth defending

Not every reference level deserves the same attention on every instrument. Rather than hardcoding one definition, the level itself is a checkbox input — swing pivot, session extreme, prior-day high/low, any combination. That turns "which level construction actually produces the more reliable signal" into something you get to test on your own market, not an assumption baked into the code before you ever loaded it. A freshness filter keeps the script from re-flagging a level the market is only drifting through, and each level fires once until it's freshly swept again, so the chart doesn't fill with the same tired flag on a level nobody's testing anymore.

Where the real work is: levels that hold, and levels that give way

The script reads buy and sell volume off each traded price row directly from TradingView's footprint engine — not the bar's high or low, the actual rows underneath it. That's the difference between a level that's genuinely protected (swept, then rejected by real opposing size) and one that was merely visited on the way through. The script signals only the protected case, on purpose: when a level is swept and the footprint shows the opposite picture — the aggressing side still winning at the extreme, no imbalance, no exhaustion, no absorption — that's the auction finding real business at the new price, and it isn't a separate detector, it's the same evidence read the other way. I use that same row-level data, sitting in the on-chart table and the data window, to make that read myself.

From evidence to a trade

The shaded zone on each signal and the dotted reclaim line aren't decoration — their edges are built from the same executed volume the detection ran on, so they sit exactly where the auction actually failed, not where a candle makes it look like it failed. That gives two of the three numbers a trade needs, for free:

Invalidation sits beyond the genuine sweep extreme — the specific high or low the market actually rejected — instead of a generic ATR multiple bolted on afterward with no connection to the real event.
Entry is typically the reclaim itself, or a retest of the reclaimed level, because that's the exact price where the failure got confirmed.

The same table reporting the signal also reports the trade data behind it — bar delta, delta at the extreme, top or bottom-zone volume against the point-of-control row, whether the imbalance flag fired — so a given entry's conviction is graded from real orderflow, not taken on the label's word alone. "Precise" here means anchored to where actual buying and selling happened. It isn't a claim about win rate, and the next section is exactly what would earn the right to make one.

No time travel

Swing levels use a confirmed pivot lag, never the current unconfirmed bar. Session levels reference only bars before the current one. Prior-day levels come through with lookahead explicitly switched off. Every plotted value and every signal only ever sees what was actually knowable at the time it fired.

What's proven, and what isn't yet

This is a rule-based detector, not a validated statistical signal — an honest hypothesis about how orderflow behaves at rejected levels, not a claim that it has forward-return content. That claim gets earned with a conditional event study: forward returns at several horizons for every fired signal, split by score bucket, testing whether score actually rank-orders the outcome instead of just looking like it should — plus a placebo run of the same logic against price levels that were never real reference points, to make sure the signature isn't just "high volume happened here" dressed up in more specific language. Until that's done, treat this as what it is: a discretionary confirmation tool that flags a failed auction with a graded conviction score, not a system that manages your entries, stops, targets, or size. A level's past reaction is not a promise about its next one.

Limitations

  • Requires a TradingView Premium or Ultimate plan — the footprint API is gated to those plans.
  • Built for standard candlestick charts. Sweep and reclaim logic will misread the market on Heikin Ashi, Renko, or other synthetic chart types.
  • Default thresholds for imbalance, exhaustion, absorption, and volume significance are tuned for a liquid futures instrument; thinner symbols or very low timeframes may need the detection inputs adjusted.

면책사항

해당 정보와 게시물은 금융, 투자, 트레이딩 또는 기타 유형의 조언이나 권장 사항으로 간주되지 않으며, 트레이딩뷰에서 제공하거나 보증하는 것이 아닙니다. 자세한 내용은 이용 약관을 참조하세요.