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 version | 1.2.6 · 2026-09-10 |
| Compatibility | ATAS 8.0.14+ and ATAS X 8.0.14+ |
| Requirements | Windows 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 |
| Updates | All future updates included |
| Delivery | ATAS catalog (automatic) + download in your account |
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
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
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?
Which chart and which timeframe should I use?
What is the difference between the 0DTE and the 90-day set?
How do the history dots work?
Positive and negative gamma, or buyers and sellers?
My strikes sit at the wrong prices. What happened?
How often does it update?
What happens when the data is old or the connection breaks?
Does it repaint or lag the chart?
Which tickers are available?
Can it trade or place orders?
Why did the levels seem to drift with price for a few seconds?
Reviews
No reviews yet — be the first verified buyer to share your experience.