Liquidity Grab

Hi @antwerks

Hope all is well. I have a question, and perhaps others may be wondering the same thing.

Let’s say you are working with a liquidity grab on the 15-minute time frame, and let’s say you have the ability to drill down to the 1-minute time frame. What would you look for? ATR expansion/contraction? CVD? Volume pressure?
 
E — all the above. I try to capture each of those signals across three studies:


1. Adaptive V13 → ATR Regime + Microstructure Shift

Covers the volatility and structure side:

  • ATR expansion / contraction
  • Volatility regime shifts
  • Micro CHOCH
  • Structure flips
  • Trend acceleration / deceleration
This is my “ATR + microstructure” layer.


2. Overwatch → Pressure, Absorption, and Intent

Handles the orderflow‑by‑proxy side:

  • Volume‑pressure imbalance
  • Effort vs result
  • Absorption
  • Trap behavior
  • Environment context
This is my “pressure + intent” layer.


3. Climax‑Traps → Liquidity Events + Exhaustion

Handles the extremes:

  • Liquidity grabs
  • Exhaustion wicks
  • Volume spikes
  • Trap signatures
  • Reversal zones
  • Displacement extremes
This is my “liquidity + exhaustion” layer.
 
Yes, I’d drill into the 1-minute for exactly those things, but I would not use just one. On a 15-minute liquidity grab, I want the 1-minute to answer one question:

Was that sweep actual acceptance through the level, or a stop-run that immediately lost sponsorship?


That means I’m looking for a short list of very specific confirmations.

What I care about most on the 1-minute
1. Immediate response after the sweep

This is the biggest one.
After the liquidity grab, does price:
  • snap back inside the prior range quickly or
  • keep accepting beyond the level?
If it re-enters fast and cannot continue, that is your first real clue the sweep was a trap, not a breakout.

2. Volume spike on the sweep, then failure to continue
I want to see:
  • large volume on the grab
  • but poor follow-through on the next 1 to 3 candles
That often means:
  • stops got triggered
  • aggressive traders chased
  • but real continuation demand/supply was not there
3. 1-minute ATR expansion into the sweep, then contraction

Yes, ATR matters.
A good reversal-style liquidity grab often looks like:
  • volatility expands sharply into the stop-run
  • then immediately compresses as the move stalls
  • then price rotates back
If ATR keeps expanding after the sweep and price keeps accepting, that is less likely to be a clean fade.

4. CVD / delta divergence
This is useful if you have good data.
What I want to see is:
  • price makes the sweep
  • CVD pushes hard with it
  • but price cannot hold the extension
That tells me aggressive market orders hit, but they were absorbed.

So yes, CVD divergence / absorption is one of the best confirms if your feed is reliable.

5. Tape speed / candle efficiency
I care a lot about whether the candles after the sweep are:
  • large and directional or
  • wicky, overlapping, hesitant
A real trap often gives:
  • impulsive sweep
  • then messy, inefficient candles
  • then reversal back through micro structure
6. Micro reclaim / breakdown level
After the grab, I want a 1-minute structure trigger, like:
  • reclaim of the pre-sweep high/low
  • reclaim of VWAP or a micro pivot
  • failure of the last impulse leg
That is often the actual execution trigger.

My priority order
If I rank them:
  1. Price acceptance vs rejection after the sweep
  2. Volume spike with poor follow-through
  3. Micro structure reclaim / failure
  4. CVD / delta absorption
  5. ATR expansion then stall/contraction
What I’d want for a bullish reversal after a downside liquidity grab
  • flush below the 15m low
  • 1m volume spike
  • little or no downside continuation
  • fast reclaim back above the swept low / prior micro range
  • CVD still negative or heavy selling, but price holds anyway
  • then 1m higher low
That is a much better long than just buying the first flush.

For a bearish reversal after an upside liquidity grab
Same thing flipped:
  • poke above the 15m high
  • 1m volume spike
  • no clean continuation
  • quick rejection back below the level
  • aggressive buying absorbed
  • lower high on 1m, then breakdown
So, yes, I’d look at ATR expansion/contraction, CVD, and volume pressure, but the most important thing is still whether the 1-minute accepts or rejects the sweep. The best liquidity grabs show volume/volatility expansion into the stop-run, weak follow-through, absorption, and then a fast reclaim of micro structure.

Try this rewritten Liquidity trap detector that looks for what we just talked about. TOS has some limitations so this is as close to "perfect" I can get.

Code:
# =========================================
# Liquidity Trap Detector v2 - Price Overlay
# Filtered stop-hunt / sweep markers on price chart
# Adds volume, ATR/range expansion, reclaim quality, and confirmation
# =========================================

declare upper;

input sweepLookback = 10;
input volumeLength = 20;
input volumeSpikeMult = 1.5;
input atrLength = 14;
input rangeExpansionMult = 1.2;
input minReclaimPercent = 0.20;
input showLabels = yes;
input showConfirmation = yes;
input confirmationLookback = 3;

def na = Double.NaN;
def c = close;
def o = open;
def h = high;
def l = low;
def v = volume;

# -------------------------
# Reference liquidity
# -------------------------
def sweepRefHigh = Highest(high[1], sweepLookback);
def sweepRefLow = Lowest(low[1], sweepLookback);

# -------------------------
# Volatility / range filters
# -------------------------
def tr = TrueRange(h, c, l);
def atr = Average(tr, atrLength);
def barRange = h - l;
def rangeExpanded = barRange > atr * rangeExpansionMult;

# -------------------------
# Volume filter
# -------------------------
def avgVol = Average(v, volumeLength);
def volSpike = v > avgVol * volumeSpikeMult;

# -------------------------
# Reclaim depth / rejection quality
# -------------------------
def reclaimAmountHigh = sweepRefHigh - c;
def reclaimAmountLow = c - sweepRefLow;

def reclaimHighOK =
    h > sweepRefHigh and
    reclaimAmountHigh >= barRange * minReclaimPercent;

def reclaimLowOK =
    l < sweepRefLow and
    reclaimAmountLow >= barRange * minReclaimPercent;

# -------------------------
# Core sweep logic
# -------------------------
def rawSweepHigh =
    h > sweepRefHigh and
    c < sweepRefHigh and
    c < o;

def rawSweepLow =
    l < sweepRefLow and
    c > sweepRefLow and
    c > o;

def sweepHigh =
    rawSweepHigh and
    volSpike and
    rangeExpanded and
    reclaimHighOK;

def sweepLow =
    rawSweepLow and
    volSpike and
    rangeExpanded and
    reclaimLowOK;

# -------------------------
# Confirmation logic
# -------------------------
def recentMicroLow = Lowest(low[1], confirmationLookback);
def recentMicroHigh = Highest(high[1], confirmationLookback);

def highTrapArmed =
    if sweepHigh then 1
    else if highTrapArmed[1] == 1 and !sweepLow then 1
    else 0;

def lowTrapArmed =
    if sweepLow then 1
    else if lowTrapArmed[1] == 1 and !sweepHigh then 1
    else 0;

def confirmHighTrapRaw =
    highTrapArmed[1] == 1 and
    c < recentMicroLow;

def confirmLowTrapRaw =
    lowTrapArmed[1] == 1 and
    c > recentMicroHigh;

def confirmHighTrap =
    confirmHighTrapRaw and !confirmHighTrapRaw[1];

def confirmLowTrap =
    confirmLowTrapRaw and !confirmLowTrapRaw[1];

# -------------------------
# Plot prior sweep reference levels (optional visual context)
# -------------------------
plot RefHigh = sweepRefHigh;
plot RefLow = sweepRefLow;

RefHigh.SetDefaultColor(Color.DARK_RED);
RefLow.SetDefaultColor(Color.DARK_GREEN);
RefHigh.SetStyle(Curve.SHORT_DASH);
RefLow.SetStyle(Curve.SHORT_DASH);

# -------------------------
# Sweep arrows on price chart
# -------------------------
plot StopHuntAbove =
    if sweepHigh then h + atr * 0.15 else na;
plot StopHuntBelow =
    if sweepLow then l - atr * 0.15 else na;

StopHuntAbove.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
StopHuntBelow.SetPaintingStrategy(PaintingStrategy.ARROW_UP);

StopHuntAbove.SetDefaultColor(Color.RED);
StopHuntBelow.SetDefaultColor(Color.GREEN);

StopHuntAbove.SetLineWeight(3);
StopHuntBelow.SetLineWeight(3);

# -------------------------
# Confirmation arrows on price chart
# -------------------------
plot ConfirmShort =
    if showConfirmation and confirmHighTrap then h + atr * 0.30 else na;
plot ConfirmLong =
    if showConfirmation and confirmLowTrap then l - atr * 0.30 else na;

ConfirmShort.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
ConfirmLong.SetPaintingStrategy(PaintingStrategy.ARROW_UP);

ConfirmShort.SetDefaultColor(Color.ORANGE);
ConfirmLong.SetDefaultColor(Color.CYAN);

ConfirmShort.SetLineWeight(3);
ConfirmLong.SetLineWeight(3);

# -------------------------
# Optional labels
# -------------------------
AddLabel(showLabels,
    if sweepHigh then "FILTERED STOP HUNT ABOVE"
    else if sweepLow then "FILTERED STOP HUNT BELOW"
    else if confirmHighTrap then "CONFIRMATION: SHORT BIAS"
    else if confirmLowTrap then "CONFIRMATION: LONG BIAS"
    else "NO FILTERED LIQUIDITY SWEEP",
    if sweepHigh then Color.RED
    else if sweepLow then Color.GREEN
    else if confirmHighTrap then Color.ORANGE
    else if confirmLowTrap then Color.CYAN
    else Color.GRAY
);

AddLabel(showLabels,
    "Lookback: " + sweepLookback +
    " | Vol x" + volumeSpikeMult +
    " | Range x" + rangeExpansionMult,
    Color.DARK_GRAY
);
 
Last edited:

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
2368 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top