Home / Indicators / Options & Gamma / OFS GammaWalls
SUBSCRIPTION OFS GammaWalls

OFS GammaWalls

OFS GammaWalls overlays gamma walls and reference levels reported by your own GEXBot Classic API account onto ATAS. It can show the 0DTE and optional broader data sets, Zero Gamma, major volume and open-interest strikes, live wall-strength changes, and in-memory level history. Independent freshness states, visible failure notices, and configurable price mapping help you judge whether the picture is usable. It is read-only market context, never an order or trading signal.

Current version1.2.6 · 2026-09-10
CompatibilityATAS 8.0.14+ and ATAS X 8.0.14+
RequirementsWindows 10/11, .NET 10, ATAS 8.0.14+ or ATAS X 8.0.14+, internet access, and your own paid GEXBot subscription with Classic API access. The GEXBot subscription is not included. No separate c
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

OFS GammaWalls places options gamma context from your own GEXBot account directly on an ATAS chart. It does not calculate entries, predict reactions, or place orders.

CURRENT GEXBOT DATA CONTRACT

The indicator uses the GEXBot v2 Classic API and requests the gex_zero category for the view labelled 0DTE. The broader view labelled 90-day uses gex_full and is requested only when at least one visible 90-day wall or level needs it. Each metric has its own schedule, connection state, last valid payload, timestamp, and age. One healthy feed cannot hide a stale or failed second feed.

Requests for the same ticker and metric are limited to once per second, and changing a setting never sends an extra request: the client keeps that spacing even while you type and does not cancel a request in flight. The defaults and minimum accepted refresh values are 1,000 ms. Each HTTP request has a one-second timeout, and HTTP Retry-After is respected after rate limiting. Rejected keys, timeouts, rate limits, server failures, malformed timestamps, and stale payloads become named chart states. Where a last valid picture exists, it can remain visible in a dimmed style for diagnosis; its age and state remain visible.

WALLS AND REFERENCE LEVELS

For either enabled aggregation, GammaWalls can draw a strike histogram whose length is based on absolute volume gamma. Gamma-sign colouring separates positive and negative values. Buyers/Sellers colouring instead classifies a wall by whether its mapped price is below or above the live chart price. These are display conventions and market context, not guaranteed support, resistance, demand, supply, or direction.

Five independently controlled reference levels are available for each aggregation: Zero Gamma, major positive and negative volume gamma, and major positive and negative open-interest gamma. Labels use the chart instrument's tick precision, include tick distance from live price, avoid each other where possible, and report enabled off-screen levels at the chart edge. Open-interest markers are selected independently of the volume-wall filters.

MAPPING AND HISTORY

Direct, Basis, and Ratio mapping modes place GEXBot prices on the chart scale. Auto compares GEXBot spot with the chart price at the time of GEXBot's own timestamp and chooses a mode. Auto switches mode only after five consecutive accepted updates outside its band and the anchor is smoothed slowly, so a brief price spike against a lagging spot does not move the levels; the chosen mapping is stable within an accepted data generation. The panel shows the active mode, GEXBot spot, chart price, and their difference so the pairing can be checked.

History dots use the actual accepted API timestamp and point-in-time spot or chart anchor. They show where enabled levels were approximately 1, 5, 15, 30, and 60 minutes ago. History exists only in memory after the indicator starts; it is not reconstructed. A dot is suppressed when the loaded bars or chart interval cannot represent its horizon truthfully. Wall-strength arrows likewise require enough live samples before they appear.

PANEL, ALERTS, AND CONTROL

The optional panel reports ticker, mapping, independent 0DTE and 90-day states and ages, received versus drawn wall counts, nearby walls, reference levels, licence state, and loaded version. Error and waiting notices (missing or rejected licence or key, first answer, STALE, RATE LIMITED, TIMEOUT, NO ANSWER) are shown by default even while the panel is hidden; they have their own switch, position and offsets, and Panel Background sets the colour and transparency shared by the panel, the age badge and the notices. Data age is measured against GEXBot's own clock, so a PC clock that is off by tens of seconds neither blocks nor falsely ages the data.

ATAS alerts and optional Telegram notifications can report a feed problem, a Zero Gamma cross, or a major wall change. Alert baselines continue to synchronize while delivery is disabled, and each event type has an independent cooldown. Telegram is best-effort external delivery and can be delayed or unavailable.

Display groups separately control the shared wall filters, both wall sets, both level sets, history, panel, alerts, and Telegram. Transparency is honoured through the colour alpha value. GammaWalls is read-only and contains no execution path.

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 GammaWalls 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.GammaWalls.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. Add OFS GammaWalls to an NQ/MNQ or ES/MES chart for the first check.
5. Under 01 - License, paste the OFS licence key for product code GW.
6. Under 02 - API - GEXBot, paste your own GEXBot API key and choose the matching ticker. Use NQ_NDX for NQ/MNQ and ES_SPX for ES/MES. Leave Price Mapping on Auto initially.
7. Keep both refresh values at the 1,000 ms defaults. Lower values are not accepted. The 90-day metric is requested only when a visible control in groups 08 or 10 needs it.
8. Temporarily enable 12 - Panel - Show Panel. Confirm the ticker, mapping, GEXBot spot, and an independent CONNECTED state for every data set you enabled. Error notices are on by default, so a missing or rejected key is reported even with the panel off; Show Notices, Notice Position and Panel Background in the same group control them.
9. Tune display density in 06 - Walls; 07 and 08 control the wall sets, 09 and 10 the reference levels, and 11 the in-memory history dots. Groups 13 and 14 control alerts and Telegram.
10. Use a fine enough intraday chart and enough loaded bars for history horizons. Current walls and levels can still display on other intervals, but history dots are suppressed when the chart cannot place them truthfully.
11. Treat STALE, RATE LIMITED, TIMEOUT, NO ANSWER, or API KEY REJECTED as a reason to verify the feed before using any displayed level.
Changelog — version 1.2.6
1.2.6 - 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.2.5 - 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.2.4 - SETTINGS TEMPLATE: LICENSE HEADER WITH THE GEXBOT KEY, TELEGRAM IN ONE FORM. WALLS, LEVELS AND DRAWING LOGIC UNCHANGED.

Group 01 - License now reads Product, License Key, Website, Version, Check For Updates and the GEXBot API Key - the second key this product needs - while 02 - API - GEXBot keeps the ticker, refresh and price mapping. The five Telegram rows carry the same names, order and help as every other OFS indicator. Alerts stay off by default.

1.2.3 - NOTICES BACK BY DEFAULT, LEVELS NO LONGER DRIFT WITH PRICE, POLITE POLLING.

Error and waiting notices - missing or rejected licence or GEXBot key, waiting for the first answer, STALE, RATE LIMITED, TIMEOUT, NO ANSWER - are shown again even while the panel is hidden. They have their own switch (Show Notices), position and offsets in 12 - Panel, and the new Panel Background setting gives the panel, the age badge and the notices one colour with adjustable transparency.

Auto price mapping no longer flips between Direct and Basis on a fast one-second move: the mode changes only after five consecutive accepted updates outside a wider band, the anchor is smoothed slowly and it is measured against the chart price at the time of GEXBot's own timestamp. Levels that used to drift with price for a few seconds now stay where GEXBot put them.

Changing a setting never sends an extra request: the client keeps at least one second between requests of the same ticker and metric, even while you type, and does not cancel the request in flight. Unchanged answers no longer rebuild the chart. After a server error the client backs off (2 to 30 seconds, Retry-After wins) and a rejected key is retried every five minutes instead of stopping for good.

Data age is measured against GEXBot's clock, so a PC clock that is off by tens of seconds neither blocks the data nor marks it stale, and the age badge keeps counting between updates. Level labels use the tick precision, 0DTE labels win over 90-day labels when they collide, and labels start after a histogram anchored on the left. An empty Custom ticker is reported instead of silently falling back to NQ_NDX. Regression coverage is 238 deterministic checks; live ATAS X acceptance remains required.

1.2.2 - PANEL LAYOUT AND VISIBILITY CONTROLS.

The main panel and age badge now move as one aligned group through all nine chart positions, including horizontal and vertical centering, and remain clamped inside the chart. Show Panel controls every panel variant, defaults to Off, and the enabled group defaults to Top Right with 20 px offsets. Check for Updates remains enabled by default. Gamma calculations and wall logic are unchanged.

1.2.1 - STEADY CHART UPDATES WITHOUT POLL FLICKER.

When 0DTE and 90-day data are due together, their changes now publish one combined chart notification instead of repainting once per metric. An age counter changing by one second no longer forces a full chart repaint; stale state transitions still do. The one combined notification rebuilds the Historical layer once, so new gamma data become visible without repeated whole-chart recomposition.

Regression coverage is 195 deterministic checks. Live ATAS X acceptance remains required.

1.2.0 - DATA, DRAWING, HISTORY, AND ALERTS HARDENED.

GammaWalls now follows the GEXBot v2 Classic contract with gex_zero and gex_full, a 1,000 ms minimum per ticker and metric, one-second request timeout, Retry-After handling, and independent 0DTE/90-day state and age. Invalid OFS licensing stops polling, cancels active work, and clears the working API key.

Generation-safe polling prevents an old ticker or key response from entering a new configuration. Historical samples use accepted API timestamps and point-in-time mapping anchors. Live rendering is independent of chart scroll, mapping is stable per accepted generation, labels use tick precision and collision handling, and coarse charts suppress misleading history dots.

Alert baselines stay synchronized while delivery is off, event types have independent cooldowns, and 0DTE/90-day feed problems are evaluated separately. The release includes 193 deterministic tests and a new English user manual. Live ATAS behaviour must still be verified in the customer's own chart, licence, and GEXBot environment.

1.1.13 - THE UPDATE CARD NOW TELLS YOU WHAT IS NEW.

The centred new-version card - product name, your version and the new one, a Close button - now also shows a short description of what each release brings. Identical in every OFS indicator.

1.1.12 - ALERTS WORK IN EVERY TIME ZONE, AND THE UI SITS ABOVE THE CANDLES.

Alert timestamps were taken from the computer's local clock, but the guard that keeps alerts from replaying history reads them as UTC. West of UTC that made every event look hours old, so the Zero Gamma cross, wall-moved and data-problem alerts never fired there. Alerts now use UTC and fire the same way in every time zone.

The panel, the status notices and the new-version card are drawn in the top layer now, so the forming candle can no longer paint over them - and the new-version card shows in every state: without a licence, without an API key, on a rejected key and while waiting for data alike.

1.1.11 - TEMPLATE COMPLIANCE: STEADY DEEP ZOOM, HONEST ALERTS, SITE COLOURS.

Levels and the gamma history no longer disappear at a deep zoom - positions come from one anchored price map instead of per-price chart lookups.

Changing a setting can no longer fire a false alert about levels having moved: the alert baseline now resets together with every recalculation.

Sell-side defaults follow the site palette (violet A855F7), matching the negative-gamma lines that already used it. The alert sound description was empty and is filled in.

1.1.10 - NEW UPDATE CARD, CENTRED AND WITH DIRECT LINKS.

The card that appears when a newer version is available has been redesigned, identically for every OFS indicator. It now sits exactly in the centre of the chart, shows each product with its current and new version, recommends updating, and carries clearly visible buttons: an Info button that opens the product's page on orderflowsmith.com directly, a Close button at the bottom and the familiar cross in the corner. When several OFS indicators on one chart have updates at once, they all share the single card - one line and one Info button each.

1.1.9 - ALERT SOUND IS A LIST WITH A PLAY BUTTON.

The alert sound used to be a text field with "alert1" typed into it. If you did not already know what the sound files are called, there was no way to find out from inside the indicator, and a typo produced silence rather than an error. It is now the platform's own sound picker: a drop-down of the installed sounds with a small play button beside it, so you can hear a sound before you settle on it. It is the same control ATAS uses in its own indicators.

Because the list comes from the platform rather than from us, it also shows sounds you added yourself - drop a .wav into the platform's Sounds folder and it appears.

A sound you had chosen before is kept.


1.1.7 - THE UPDATE CARD'S CLOSE BUTTON IS A REAL BUTTON - a framed, highlighted square instead of a faint cross, comfortably clickable.

1.1.6 - THE PANEL FOOTER NO LONGER SHOWS YOUR E-MAIL ADDRESS. It read Licensed to: your@address - expires <date>, so anyone you sent a screenshot to could read who the license belongs to. It now reads v1.1.6 - license OK: version first, then the state of the license and nothing else, the same in every OFS indicator. Who the license belongs to stays in the settings, where only you see it.

1.1.5 - A NEW VERSION NOTICE. Once a day the indicator asks orderflowsmith.com whether a newer version has been released and, if so, shows a small card on the chart with what the new version brings you.

It sends nothing at all - no license key, no product name, not a single parameter - so the request cannot tell anyone what you use, and one request covers every OFS indicator on the chart. The answer is signed with the same key as your license, so nothing else can put text on your chart. It never blocks anything and it stays silent when there is no connection.

There is one card per chart, not one per indicator, and it lists every product that has an update. Close it and it will not come back until the next release. It can be switched off in Settings under 01 License.

1.1.4 - LICENCE GATE ON NOTIFICATIONS. Platform alerts and Telegram messages now require a valid key, exactly like the drawing on the chart does. The gate sits in the place where a notification is actually sent, not at the caller, so it cannot be bypassed by a new call site. Any queued notifications are discarded while the key is missing, so they do not pile up and all fire at once the moment a key is entered.

0.1.2 - every level GEXBot sends is now drawn by default. The display filters inherited from the old heatmap were quietly cutting the picture down: measured on NQ_NDX, GEXBot delivers 143 strikes and the old 4% strength threshold left 21 of them on the chart. Min Strength now defaults to 0 (hide nothing) and Max Walls defaults to 0 = no limit, with the ceiling raised from 60 to 2,000 so a full chain always fits. Both filters are still there for when you deliberately want only the dominant walls, and their descriptions now carry the measured numbers so nobody is surprised again. The panel row that reports how many walls arrived versus how many are drawn is what makes this visible at a glance.

0.1.1 - the refresh rates moved from seconds to MILLISECONDS. Today's data is now pulled every 250 ms and the 90-day set every 500 ms by default, both adjustable from 100 ms up. One answer carries the strike volumes, the zero gamma, the major levels and the spot together, so all of them refresh at that same rate. The chart repaints only when something actually changed, the change arrows and the history dots are still computed from every single answer but sampled sparsely in memory, and if GEXBot starts refusing requests the client keeps the last picture, backs off progressively (2, 4, 8 ... up to 30 s) and the panel says plainly that it was slowed down.

0.1.0 - first release. Live GEXBot gamma straight on the price axis, with the API key entered in the settings and no collector or helper application of any kind. Both aggregations at once: today's 0DTE (classic/zero) and the 90-day structural set (classic/full), each drawn as its own histogram anchored to its own edge of the chart, with its own width, thickness, offset, colors and transparency. Five switchable levels per set - zero gamma, major positive and major negative by volume, major positive and major negative by open interest - each with its own color, transparency and line width, labelled with its price and distance in ticks, and always broken around the label. Every level leaves a trail of dots marking where it stood 1, 5, 15, 30 and 60 minutes ago, placed at the bar of that moment, sized and colored per age. Walls can be colored by gamma sign or by buyers versus sellers, the nearest wall above and below price is outlined, open-interest heavy walls are marked, and a wall whose strength moved during the last minute carries an arrow. Ticker list taken from GEXBot's own catalogue with the futures chains first (NQ_NDX, ES_SPX), price mapping (Auto / Direct / Basis / Ratio) anchored and smoothed so levels never breathe, and a context panel that separates what arrived from what is actually drawn. Everything updates in real time - the chart repaints the moment an answer arrives - and stale or missing data is always reported on the chart, never hidden.

Frequently asked questions

Do I need anything besides the indicator?
You need Windows 10 or 11, ATAS 8.0.14+ or ATAS X 8.0.14+, internet access, an OFS GammaWalls licence, and your own paid GEXBot plan with Classic API access. The GEXBot subscription is separate and not included. GammaWalls calls the API directly; no separate collector or helper service is required.
Which chart and which timeframe should I use?
Start with NQ_NDX on NQ/MNQ or ES_SPX on ES/MES. Current walls and levels can display on different chart intervals because they use the price axis. The 1, 5, 15, 30, and 60-minute history dots also need loaded bars and a chart interval fine enough to place each horizon truthfully; coarse intervals suppress unsuitable dots instead of implying false precision.
What is the difference between the 0DTE and the 90-day set?
GammaWalls requests GEXBot's gex_zero category for the view labelled 0DTE and gex_full for the broader view labelled 90-day. They have independent schedules, state, data age, history, colours, and display controls. The broader metric is not requested unless at least one visible 90-day wall or level uses it. Agreement between the views is context, not proof that a level will hold.
How do the history dots work?
After an accepted payload, the indicator stores level values with the payload's actual timestamp and point-in-time mapping anchor. It can then mark approximately 1, 5, 15, 30, and 60 minutes ago on the corresponding loaded bar. History starts when GammaWalls starts, is held only in memory, and cannot recreate earlier values. Dots are omitted when the bars or interval cannot represent a horizon accurately enough.
Positive and negative gamma, or buyers and sellers?
Gamma Sign colours walls by the sign of reported volume gamma. Buyers/Sellers colours them by side of the live mapped price: below or above. These are visual interpretations for context; neither mode proves actual resting demand or supply, predicts direction, or guarantees a reaction. The panel reports the nearest displayed wall on each side.
My strikes sit at the wrong prices. What happened?
First match ticker to chart: NQ_NDX for NQ/MNQ and ES_SPX for ES/MES. Then compare GEXBot Spot with chart price in the panel. Auto mapping chooses Direct, Basis, or Ratio from that relationship and keeps the mapping stable within each accepted data generation. If the instruments are deliberately paired differently, force a mapping mode only after checking the displayed values.
How often does it update?
The default and minimum interval is 1,000 ms for each metric, matching the current limit of no more than one request per second for the same ticker and metric. Each metric is scheduled independently, a request times out after one second, and HTTP Retry-After is respected. The chart is notified when a valid response is accepted; the 90-day request is skipped entirely when no enabled feature needs it.
What happens when the data is old or the connection breaks?
0DTE and 90-day freshness are evaluated independently. A rejected key, rate limit, timeout, server failure, malformed timestamp, or stale payload receives a named state and age. If a last valid payload exists, it may remain dimmed so you can diagnose the interruption, but retained data must not be treated as current. The state badge and the notices are shown by default even when the panel is hidden and can be switched off or moved in 12 - Panel. After a server error the client backs off (2 to 30 seconds, Retry-After wins) and a rejected key is retried every five minutes.
Does it repaint or lag the chart?
GammaWalls redraws from accepted API snapshots; those values can legitimately change whenever GEXBot publishes a new snapshot. Historical dots preserve accepted point-in-time values rather than rewriting them from the current mapping. Network work runs outside the chart calculation path, but API latency, rendering load, ATAS, and the operating system can still affect when an update becomes visible.
Which tickers are available?
The settings include NQ_NDX, ES_SPX, major indexes and ETFs, and a configured list of individual symbols, plus a Custom field for another API ticker. Actual availability and entitlement are controlled by GEXBot and can change. Choose a symbol that your Classic API plan currently serves and verify the returned ticker and spot in the panel.
Can it trade or place orders?
No. GammaWalls is read-only and contains no execution path. It does not access a broker account, submit, modify, or cancel orders, calculate position size, or manage risk. It supplies options-positioning context for decisions you make and execute elsewhere.
Why did the levels seem to drift with price for a few seconds?
Before 1.2.3, Auto mapping re-decided Direct versus Basis on every accepted update with a narrow band, and a fast one-second move against a lagging GEXBot spot could flip it and move every level by that lag until the spot caught up. Since 1.2.3 the mode changes only after five consecutive accepted updates outside a wider band, the anchor is smoothed slowly and it is measured against the chart price at the time of GEXBot's own timestamp. If you want no conversion at all on NQ_NDX or ES_SPX, force Direct in Price Mapping; the panel Mapping row always shows what is in use.
⚠ This indicator is read-only: it has no order-entry or account-management path. It displays gamma positioning reported by GEXBot as contextual market data. Positive gamma, negative gamma, buyers, sellers, Zero Gamma, and major walls do not guarantee support, resistance, volatility, direction, liquidity, or execution quality. A paid GEXBot subscription with Classic API access is required and is not included. Output depends on GEXBot's payload, entitlement, timestamp, service availability, the selected ticker, the chart instrument and tick size, loaded bars, and the indicator's in-memory history. Data can be unavailable, incomplete, delayed, rate-limited, malformed, or stale. A retained last-good picture is diagnostic continuity, not proof that the levels are current. ATAS, Windows, internet connectivity, and Telegram can also delay or lose notifications. Trading futures, forex, crypto, equities, and options carries substantial risk of loss and is not suitable for everyone. GammaWalls is analysis software, not financial, investment, or trading advice, and it cannot guarantee profit. Every entry, exit, position size, stop, connectivity check, and trading decision remains your responsibility. Test this release in your own ATAS environment before relying on it in live decision-making, and never trade money you cannot afford to lose.

Reviews

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