Home / Indicators / Order Flow & Footprint / OFS ConfirmedAbsorption
SUBSCRIPTION OFS ConfirmedAbsorption

OFS ConfirmedAbsorption

Absorption that earned its line. Aggressive volume is only a candidate; a level appears after price rejects the zone and closes away from it. Tick-precise, non-repainting, adaptive and built for readable charts.

Current version1.1.4 · 2026-09-10
CompatibilityATAS and ATAS X with .NET 10 runtime
RequirementsWindows 10/11, .NET 10, ATAS or ATAS X with a data feed that provides Bid/Ask classified volume (footprint data) - and nothing else.
UpdatesAll future updates included
DeliveryATAS catalog (automatic) + download in your account
Choose your license VAT included
✔ Activates on your ATAS e-mail automatically after payment — the indicator appears directly in your ATAS catalog.

Description

Every footprint trader has seen it: a huge volume prints at the low, someone calls it absorption, and price sails straight through it. A big number alone is not absorption. Absorption is effort that failed: aggressive traders hit one side of the book, passive liquidity accepts that pressure, and price cannot continue. The proof is not the volume alone. The proof is the rejection.

OFS ConfirmedAbsorption examines every real tick level of a closed footprint candle. It checks the aggressive executed volume, the opposite-side volume one tick diagonally beyond it, their ratio, contiguous stacked levels and the location inside the candle. Wicks Only is the default because reversal absorption normally belongs at the extreme; Body Only and All remain available for research. A qualified print is still only a candidate. It becomes a confirmed level only when the candle closes away from the entire zone by the configured distance. No confirming close means no historical line.

Each confirmed tick is drawn as one horizontal line at one fixed price. The price never moves. While the market is far away the line stays short; as price approaches, it extends smoothly towards the current bar. The first return freezes the visible line at the touch bar, while the level underneath continues through its documented lifecycle. A touch starts a reaction window. If price moves away by the configured reaction distance, the level becomes USED and fades - a little more after every further use. It must then move far enough away to rearm before another touch can count. Repeated tests are tracked until the touch limit retires the level. A close through the zone marks it BROKEN; broken levels remain briefly visible for the selected number of bars. Old levels expire by session age. A small control panel toggles the absorptions and extends the untouched long or short levels to the current bar with one click.

Closed-bar detections never repaint. The optional live preview is clearly dotted and faint, uses the same RTH or ETH filter as the closed calculation and never changes historical diagnostics. Missing footprint data is not treated as an empty signal: the chart reports INSUFFICIENT DATA with the reason instead of silently pretending that no absorption exists - even while the panel is hidden.

Hybrid volume mode adapts the minimum to a percentile of recent aggressive tick volumes inside the Days Look Back window. Pools are kept independently for bullish and bearish pressure and independently for RTH and ETH, with configurable regular hours in New York time; Combined mode is the one explicit way to pool them. Only closed bars enter the pool, the current candidate cannot move its own threshold, and the rolling session window is deterministic after a restart or recalculation.

The diagnostics panel explains rejected candidates - zero counterpart, ratio, volume, candle location, run length, stack volume and confirmation - and shows how often each lifecycle branch ran on your chart: touches, reactions, timeouts, rearms, breaks and expiries. A licensed one-click CSV export writes the current levels with origin time, session, zone, candle part, volumes, ratios, touches, uses and break bars for calibration on your own data. Platform alerts and Telegram can report activation, touch, successful use and break events. Everything is off by default, historical events are never replayed as live notifications, and Telegram delivery cannot block the calculation.

The same protected DLL is built for classic ATAS and ATAS X on the current .NET 10 runtime. The pure detection engine is covered by automated tests derived from the written technical specification and by a replay over real one-minute footprint data that checks every lifecycle branch and proves that the live path and a plain recalculation produce identical levels bar by bar.

Installation guide
1. Create or sign in to your OrderFlowSmith account with the same e-mail address used by your ATAS account. When access to OFS ConfirmedAbsorption is activated and the e-mails match, ATAS delivers the indicator automatically; do not install a DLL manually.
2. Open or fully restart ATAS so the automatically delivered indicator becomes available in the indicator catalogue. Whenever an update is released through ATAS, fully restart the platform; ATAS downloads and loads the new version automatically.
3. Only if the OrderFlowSmith and ATAS e-mails are different, download OFS.ConfirmedAbsorption.dll from your OrderFlowSmith account and install it manually: %APPDATA%\ATAS\Indicators for classic ATAS or %APPDATA%\ATAS X\Indicators for ATAS X. After every update, download and replace the DLL manually, then fully restart ATAS. If Windows blocked the file, open DLL Properties and select Unblock.
4. Open a chart and add OFS ConfirmedAbsorption from the OrderFlowSmith group.
5. Paste your OFS license key into 01 - License. The key is verified locally.
6. Make sure the feed provides Bid/Ask footprint volume. If it does not, the chart shows INSUFFICIENT DATA with the reason; if the loaded history is shorter than Days Look Back, the notice says how many sessions are covered.
7. If your instrument has other regular hours than 09:30-16:00 New York, set RTH Start and RTH End in 05 - Session & Time.
8. Start with the defaults and calibrate Ratio, Stacked Levels, Minimum Volume, Confirm Close Distance and the lifecycle settings on your own data using the CSV export in 15 - Diagnostics.
Changelog — version 1.1.4
1.1.4 - MANUAL UPDATE CHECK.

Check For Updates: unticking it and ticking it again now runs the version check immediately and shows the new-version card again, even if you had closed it for that version. Nothing else changed.

1.1.3 - PRODUCT ROW SHOWS THE NAME ONLY.

The Product row in 01 - License now shows the product name only. No internal code is displayed anywhere in the settings. Nothing else changed.

1.1.2 - SETTINGS TEMPLATE: LICENSE HEADER, USED COLOURS INSTEAD OF USED OPACITY, TELEGRAM IN ONE FORM. DETECTION AND LIFECYCLE LOGIC UNCHANGED.

The separate Used Opacity setting is gone: a level that passed a test now has its own Bullish Used Colour / Bearish Used Colour (10 - Visual) with the transparency in the colour itself; every further use fades the level again by the same ratio, exactly as before. Group 01 - License now reads Product, License Key, Website, Version and Check For Updates - the same header in every OFS indicator. The five Telegram rows (Enable Telegram, Bot Token, Chat ID, Get Chat ID Now, Send Test Message) carry the same names, order and help everywhere. Alerts stay off by default.

1.1.1 - CONTROL PANEL DEFAULTS TO TOP CENTRE; INSTANT CLICK FRAME.

The ABS / LONG / SHORT control panel now opens at the top centre of the chart (Control Panel Position in 12 - Control Panel; it used to be top left). A chart that already saved its own position keeps it. The white click frame on ABS / LONG / SHORT now appears on the very next repaint and follows the button (the same mechanism as OFS F4 WaveFade) instead of lagging behind the platform redraw. Detection, lifecycle and drawing logic are unchanged.

1.1.0 - REALTIME SEQUENCE: SEE A CONFIRMED LEVEL DURING THE BAR.

New Detection Mode (08 - Confirmation), off by default. Closed Bar keeps the audited behaviour - a level is confirmed only when the bar CLOSES beyond the zone, never repainted. Realtime Sequence draws the level solid the moment the forming live bar already closes beyond the zone, instead of waiting for the bar to finish; if price returns before the close it retracts. A faster live signal at the cost of intra-bar repainting. Closed history is always Closed Bar, so saved charts and past levels are unchanged.

The closed-bar detection is byte-for-byte identical - proven again by the replay determinism check over 68,512 bars - and five new engine tests cover the confirmed-then-retract flow (69 in total). Default colours stay green and red.

1.0.0 - FULL AUDIT AGAINST THE TECHNICAL SPECIFICATION.

Every rule of the written specification was checked against the code line by line, the engine was replayed over 68,512 real one-minute MNQ bars with simulated live ticks, and every lifecycle branch (touch, reaction, timeout, rearm, break, expiry by touches and by age) was measured on that data. The live path and a plain recalculation produce identical levels bar by bar.

Fixed: the adaptive volume percentile now uses the Days Look Back window as specified (it used Max Age before); Session Mode Combined is the one explicit way to pool RTH and ETH volumes - Chart template keeps them apart; Used Opacity is applied again after every successful test; the quality score measures volume against the effective threshold. Approach Start and Full Extend no longer clamp each other, so saved chart settings load exactly as saved.

New: RTH Start / RTH End in New York time (05 - Session & Time), Formation Counts As Use (09 - Lifecycle), Panel Background, Show Notices with an own position and offsets (11 - Panel) - the licence, INSUFFICIENT DATA and WARMING UP notices now appear with their reason even while the panel is hidden. Diagnostics show how often each lifecycle branch ran on your chart; the CSV export carries origin time, session, group, zone, candle part, volumes, ratios, touches, uses, first-return and break bars.

Display: levels use one anchored price scale (no vanishing at deep zoom), the touch marker sits on the bar of the current test, Broken Display no longer recomputes the history, and most numeric limits were widened. Settings groups follow the OFS template (05 - Session & Time up to 15 - Diagnostics); property names are unchanged, so saved charts keep their values.

0.2.0 - CONTROL PANEL: ABS, LONG AND SHORT AT ONE CLICK.

A small control panel with three buttons: ABS shows or hides the absorptions, LONG and SHORT draw the untouched levels of that side all the way to the current bar - only levels price has not come back to yet; a level price already returned to keeps its end bar. A distant absorption is therefore visible on the right edge before the market reacts to it. The buttons remember their state, and the panel is fully placeable: nine positions, X and Y offsets, font size, background and border colors. The retracted far lines are never shorter than their strength percentage, so the number no longer disappears. Detection and lifecycle logic are unchanged.

0.1.12 - PANEL LAYOUT AND VISIBILITY CONTROLS.

The main, license and insufficient-data panel variants now share all nine chart positions, including horizontal and vertical centering, and remain clamped inside the chart. The panel defaults to Off; when enabled it defaults to Top Right with 20 px offsets. Check for Updates remains enabled by default. Absorption detection and signal logic are unchanged.

0.1.11 - RELIABILITY AND LIVE-LIFECYCLE AUDIT.

Missing footprint data now reports INSUFFICIENT instead of looking like an empty signal. Adaptive pools keep the exact configured number of sessions, the initial scan covers every session required by the active level and percentile windows, and provisional candidates respect the selected RTH or ETH mode without changing historical diagnostics.

Live price movement and provisional candidates now request a throttled redraw, while a first touch redraws immediately. Shared render data is copied under one short lock, fonts and pens are reused, CSV export requires a valid license, and the Telegram worker is disposed with the indicator.

Reaction measurement now starts after the touch bar because closed OHLC data cannot prove whether that bar's extreme happened before or after the touch. Re-armed levels visibly enter TOUCHED again, successful retests return to USED, and broken levels remain for the configured number of bars even across a session boundary.

Historical alert startup is now one linear initialization pass instead of repeatedly scanning every accumulated level after every bar. Expired alert state is pruned. Diagnostics include location, stack-volume and missing-footprint counters. The release gate runs all pure-engine tests before building and obfuscating.

0.1.10 - The update card now describes what a new release brings.

0.1.8 - Recalculation performance was reduced from roughly two minutes to under one second in the 100,000-bar benchmark, and the documented touch, reaction, rearm, touch-limit and break lifecycle was restored.

0.1.7 - Absorption levels and strength labels moved behind the candles.

0.1.0 - First release of the documented, tick-precise confirmed-absorption detector.

Frequently asked questions

How is this different from the built-in ATAS Absorption indicator?
The built-in indicator does not publish its internal equation, so OFS ConfirmedAbsorption does not claim to clone it. It uses its own documented contract: real tick data, diagonal ratio, location and stack filters, followed by mandatory rejection confirmation.
Why does a huge volume sometimes not get a line?
Because volume alone is only a candidate. The candle must close away from the whole zone by the configured distance. Aggressive volume that price simply runs through is not confirmed absorption.
What data do I need?
A feed that provides Bid/Ask classified executed volume for each footprint price level. If traded candles arrive without usable footprint rows, or the loaded history is shorter than Days Look Back, the chart shows INSUFFICIENT DATA with the reason instead of inventing zeros.
Does it repaint?
Closed-bar results do not repaint. The optional current-bar preview is dotted and faint, and it never becomes a historical level unless the closed candle passes confirmation. A recalculation or reload produces exactly the same levels as the uninterrupted live chart.
What does Wicks Only mean and why is it the default?
Bullish absorption is only accepted in the lower wick and bearish only in the upper wick. Reversal absorption happens at the extremes - a big volume inside the body is usually rotation, not a passive player stopping the move. All and Body Only modes exist for research.
What is the diagonal ratio?
Bullish detection compares aggressive sells at a price with aggressive buys one tick above it. Bearish detection compares aggressive buys with sells one tick below. A missing or zero counterpart rejects the tick by default.
What does USED mean?
Price touched the level and then moved away by the configured reaction distance inside the reaction window, measured from the bars after the touch bar. The level fades - a little more after every further use - but can be tested again after price moves far enough away to rearm it. The visible line remains frozen at its first touch.
When does a level disappear?
It expires after the configured session age or after the configured number of successful tests. A close through the zone marks it BROKEN and keeps it dashed for the selected number of bars before removal.
How should I set Minimum Volume for my instrument?
Start with the Hybrid mode: your number acts as an absolute floor and an adaptive percentile of recent aggressive tick volumes raises it to match current activity. Then use the CSV export in Diagnostics to calibrate on your own sessions. There is no universal number and the indicator does not pretend there is one.
Why do the lines change length?
Untouched lines remain short while price is far away and extend smoothly as price approaches. Their price never changes. The first market return freezes the visible end at that bar. The LONG and SHORT buttons of the control panel extend the untouched levels of that side to the current bar instead.
Does it work in ATAS X?
The same .NET 10 DLL is built against both the installed classic ATAS and ATAS X references. Native macOS operation depends on the ATAS X runtime and data-feed support available on that machine.
Does a confirmed level guarantee a bounce?
No. It proves that the configured footprint pressure and rejection occurred once. It is a location for analysis, not a promise of future price behaviour.
Why do I see so many lines with the defaults?
The default Ratio, Stacked Levels and Minimum Volume are starting values, not a calibration. With Wicks Only and Confirm Close Distance 1 every wick print that passes the volume and ratio filters is confirmed, because a wick zone is always at least one tick inside the close. Raise Stacked Levels to 2, Confirm Close Distance to 2 or more, Ratio or Minimum Volume, and use the CSV export to see which levels actually held on your instrument.
My instrument has other regular hours than the US session.
Set RTH Start and RTH End in 05 - Session & Time, in New York time with daylight saving handled per bar. They define what counts as RTH for Session Mode and for the separate RTH and ETH adaptive thresholds; Combined mode pools both.
The panel is off - will I still see a problem?
Yes. Licence, INSUFFICIENT DATA and WARMING UP notices have their own switch, Show Notices, with an own position and offsets, and they appear even while the panel is hidden. Only switching Show Notices off makes the chart silent.
⚠ OFS ConfirmedAbsorption is an analytical decision-support tool. Neither footprint data nor a confirmed absorption level guarantees a future reaction or trading result. Validate the settings on your own data before using them for live decisions. Trading futures involves substantial risk of loss.

Reviews

No reviews yet — be the first verified buyer to share your experience.