Back to Guides
Guide

What Is Absorption in Trading? Three Different Tests

What is absorption in trading: large passive orders soaking up the aggressive ones hitting them. Three published tests, and what each one actually selects.

Absorption is large passive orders taking in the aggressive orders hitting them, so price stops where it is instead of moving on. TradeZella's version: it "happens when large limit orders absorb aggressive market orders, stopping prices from moving further", and you spot it when "buyers are aggressively hitting the ask, but the price won't go up".

The word covers three incompatible tests, one of which needs no order flow at all. And every published checklist asks you to judge a word that carries no number: large, unusually heavy, stalling, significantly. Those are settings you choose, and no source tells you so.

Absorption against exhaustion

They are opposite explanations for the same thing on your screen. TradeZella separates them: "Absorption stops the price from moving. Exhaustion makes the price stop on its own."

So absorption is a move being stopped by something pushing back. Exhaustion is a move running out of fuel with nothing opposing it. The same source defines the second as momentum fading "because volume dries up", with the sign being that "A strong trend should have increasing volume. If the volume starts decreasing as the price moves, it indicate exhaustion."

The volume behaves oppositely in each case, which is what you can check. Heavy volume with no progress points at absorption. Thinning volume with no progress points at exhaustion. Without the volume reading, both look identical to a quiet market.

One side, both sides, or neither

Three sources state three different requirements, and they do not select the same bars.

TestWhat it needsWho states it
One-sidedPassive size on one side soaking up aggressive orders from the otherTradeZella, IntelligentHQ, Jigsaw Trading, ProTraderDashboard
Two-sided"unusually heavy volume trades on both the bid and the ask at the same time"Trader Dale
Price only"the market repeatedly tests a price level without breaking through", with no volume conditionCMC Markets

Trader Dale states the two-sided version twice, once in the body and once under its own heading, so it is deliberate. It also fixes the interval: five-minute and thirty-minute charts.

CMC Markets' version is the outlier, and the only one of the three you can run on ordinary bars. Price repeatedly testing a level is the observation; large limit orders defending the area is an inference drawn from it, not something the test measures.

The first two nearly contradict each other. One says heavy aggression meets heavy passive size on the opposite side. The other says both sides trade heavily at once. Which definition you adopt decides what you find, so pick one deliberately and write it down.

What counts as unusually heavy, and what counts as not moving

No source gives a number, and we are not inventing one. What a given choice costs is measurable.

The count of bars at or above a volume percentile and at or below a range percentile runs on 198,327 five-minute EUR/USD bars covering 2024 to the end of August 2026. That crosses the two vague words: heavy volume, and price not going anywhere.

range at or below p10range at or below p25range at or below p50
volume at or above p9067 (0.03%)273 (0.14%)1,269 (0.64%)
volume at or above p9532 (0.02%)87 (0.04%)335 (0.17%)
volume at or above p993 (0.00%)11 (0.01%)26 (0.01%)

The loosest reading of those same two words picks out 423 times as many bars as the strictest, and the strictest finds three bars in two years and eight months. On thirty-minute bars the grid runs from 179 bars down to two in total.

A five-minute range is a coarse quantity: it clusters on whole points of a five-decimal quote, and around the tenth percentile roughly four thousand bars share each single point. Cumulative share passes 9.63% at a range of 10 points and 11.68% at 11. So the p10 line lands inside a block of ties, and shifting it by a fraction of a point moves that cell by tens of bars. Anything that sensitive to the definition of a percentile is too sensitive to pick casually as a signal threshold.

The counts come from our own data, sourced from Dukascopy and cleaned to remove anomalies, so they describe that series rather than any other feed. None of it is a recommended setting; the sources leave the choice to you.

Why that corner is nearly empty

Range and volume move together, so a bar with heavy volume and a small range runs against the usual behaviour of the two. The correlation on five-minute bars is 0.6114 by Pearson and 0.6436 by Spearman, with much the same on single minutes and on thirty-minute bars.

The pattern really is unusual, which is a point in its favour as something worth noticing. It also means a backtest will contain very few examples, so plan the sample size before you start rather than discovering it at the end.

The clock matters as much as the threshold. Take the p90 volume and p25 range corner on five-minute bars and the share of qualifying bars runs from 0.04% in the 06:00 UTC hour to 0.39% in the 20:00 hour, a factor of about ten.

Can you see it without order flow?

The one-sided and two-sided tests, no. Both need a feed that tags each trade with the side of the quote it hit, and a chart carries no such tag. The usual substitute is to guess the side from whether each small bar closed above or below its own open, which tells you about the rule you invented rather than about the market.

The price-only test, yes. A level, a count of touches and a judgement about breaking through are all recorded in ordinary bars. Just be clear about what it selects: price refusing a level. Whether large limit orders caused that is the inference, and bars cannot confirm it.

On a footprint chart, absorption is a price row where heavy volume traded and price did not leave, which TradeZella puts as "a price level where high volume appears, but the price doesn't move much". And absorption is not the same thing as an iceberg order, though the terms get swapped. Jigsaw Trading, which calls these events "stopping volume" and says they are often referred to as an iceberg order, is still plain that it "doesn't HAVE to be an iceberg order". An iceberg is a specific order type with published mechanics; absorption is an observation about what happened at a price.

As for an absorption candle, none of these sources defines one, or uses the phrase at all, so we are not inventing a definition for it.

How to test a rule built on absorption

Use the price-only definition, since it is the only one bars can carry, and fix every choice in writing before you start.

  1. Fix how the level is produced: a session high or low, a prior day's extreme, a round number, a drawn zone. Write the rule, not the levels.
  2. Fix the touch tolerance. One pip, two, a fraction of the day's range? The counts swing hard on that choice.
  3. Fix the number of touches. Repeatedly is not a number.
  4. Fix what breaking through means: a close beyond the level, a wick beyond it, or a distance beyond it.
  5. Fix the interval and the session hours. A rule with no session window is a rule with a hidden setting worth a factor of about ten.
  6. Step the chart forward with the future hidden, mark each candidate as it appears, and record what price did afterwards over a stated number of bars.

Per occurrence, record the date and time, the level and how it was derived, the touch count, the tolerance, the interval, any volume reading, and the outcome window. Without those, two runs of the same rule are not comparable.

The only mechanical rule anyone publishes

A TradingView community indicator states one: it "records volume accumulated at a price level", and "If the price bounces back to at least where it was before the current price move, the indicator records this as absorption, provided it meets the Volume Requirement and optional Time Requirement."

Both of those requirements are named and neither has a published default. So we ran the retrace half on the same five-minute closes with the two settings swept: a move of at least X away from a level, then a return to where it started, inside a window of W bars.

movewindow 3 barswindow 6 barswindow 12 bars
1.0 pip18.13%38.51%57.10%
2.0 pips8.38%23.26%42.60%
5.0 pips1.17%5.23%15.07%

The unstated time window alone moves the share of qualifying bars by a factor of 3.15 at a one-pip move, and the unstated move size by 3.79 at a twelve-bar window. Between them they span everything from about one bar in eighty-five to more than half of all bars.

That table runs the retrace half and nothing else, with both unpublished settings swept, so the figures are upper bounds on what the full rule selects rather than a reproduction of it. Adding the volume condition can only cut them further. The author's own caveats point the same way: detection in historical data is "less accurately than in real-time due to OHLCV aggregation", and "it is not always the case that such bullish absorption will initiate a trend".

Running the test in ChartLabs

We draw no footprint, no depth of market ladder, no delta and no order flow, and there is no absorption indicator to switch on.

The manual part suits the price-only version. You step historical charts forward bar by bar with the future hidden, mark your candidates as they appear rather than after the fact, and take the trades the rule asks for. Every trade keeps the chart exactly as it looked at entry, which matters for a pattern this rare: when a year of testing gives you a few dozen examples, you want to be able to go back and check that each one really met the definition you wrote down.

Tag the absorption candidates and filter the analytics by that tag, and you can look at those trades on their own instead of losing them inside everything else you tested.

For the method, start with the beginner's guide to backtesting a trading strategy, then the forex backtesting guide for pair and session choices, and backtesting accuracy, slippage and data quality, which matters a lot when your candidates are measured in single pips of range.

Want to test the version your data can support? Start a free trial of ChartLabs. One plan, everything included.

Related Topics

absorptionexhaustionorder-flowsetup-explainervolumemanual-backtesting