Home / Indicators / Support & Resistance / OFS StructureMapper
SUBSCRIPTION OFS StructureMapper

OFS StructureMapper

Your platform can draw a trendline. What it cannot do is tell you which line deserves to exist, how many times price actually respected it, or that it broke two hours ago. That is this indicator's whole job: it draws only the levels worth drawing, scores every one of them 0-100, says BROKEN when the market genuinely left a level, and takes it off the chart once it stops mattering. Nothing extra required — no footprint, no market depth, no subscription.

Current version1.3.2 · 2026-09-10
CompatibilityATAS 8.0.14+ and ATAS X 8.0.14+
RequirementsWindows 10/11, .NET 10, ATAS or ATAS X - and nothing else. NO footprint or cluster data, NO market depth, NO external data feed and NO extra subscription of any kind. It reads the candles yo
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

Your platform already draws a perfect trendline the moment you click two points. What it does not do is decide WHICH two points deserve a line, count how many times price actually respected it, notice that it broke three hours ago, or take it off the chart when it stopped mattering. That is the whole job of OFS StructureMapper.

It answers four location questions, continuously and without being asked:
• Where is the nearest active structural support?
• Where is the nearest active structural resistance?
• Which diagonal trendline is currently valid?
• Has a level held, broken, flipped or expired?

It is not a signal generator. It maps location; whether the market is tradable is a different question, and so is when to press the button.

WHAT A MANUAL DRAWING TOOL CANNOT DO
The platform's line tool is precise and fast, and this indicator does not replace your own lines — it adds the part a drawing tool structurally cannot provide.

1. IT SCORES EVERY OBJECT OUT OF 100. Independent touches, base-segment cleanliness, anchor prominence, reaction strength, freshness, confluence and slope quality each contribute a weighted share — and every weight is yours to change. A line with four clean touches and a line drawn through the middle of six candles no longer look the same on your chart.

2. IT KNOWS WHEN A LEVEL DIED. Objects have a lifecycle — Candidate, Confirmed, Tested, Broken, Flip, Expired — and each transition has a rule. A line expires when it stops being touched. A broken level stops being extended forward at the break bar and waits a fixed window for its retest. Hand-drawn lines stay until you delete them, which is why old charts fill up with structure that stopped working days ago.

3. A WICK IS NOT A BREAK. A break is only called a break when the market genuinely left the level and stayed there. One spike through it is not enough, and one nervous bar is not enough - which is exactly why a BROKEN badge here means something. Three closes is available for noisy data. This is the single most common source of false breaks, and it is a rule here, not a judgement call.

4. IT IS BUILT NOT TO REPAINT. A swing point that needs three bars on its right cannot exist until those three bars have closed, so it does not appear retroactively; only bar-close logic changes a Confirmed, Broken, Flip or Expired state; and the optional intrabar preview lives in a separate style and can never become an anchor. That is the construction. The claim itself is only worth what the test behind it proves, so the indicator can write a diagnostic log of every object and every state change, so a live run and a reloaded run can be compared line by line — and they have to match exactly. Until that check has been signed off on your data, this is a design property and not a certified one, and the product deliberately does not call itself a non-repainting indicator.

5. CORE DISTANCES ADAPT TO THE MARKET. Excursion, touch tolerance, zone width, break threshold and required rejection are based on Volatility Units, with explicit tick, price-percent or price-increment floors where market metadata demands them. The unit re-measures itself from your chart instead of relying on a hard-coded point distance. The supplied NQ, ES, BTC and EUR/USD profiles are starting points and still require replay validation on the intended feed.

== SUPPORT AND RESISTANCE ARE AREAS, NOT LINES ==
A zone is built from the cluster of turns that actually formed it, so one extreme wick can neither shift it nor blow it up. Zones merge when they describe the same structure and stay separate when merging would produce one useless block. A zone that breaks and is then rejected from the opposite side is marked as a flip and keeps working in its new role.

Context levels are optional and clearly separate: prior session high and low, the opening range, the overnight high and low.

HOW TO READ THE PANEL
• Preset — which starting bundle is active, so it is never a guess which numbers the chart is running on.
• Nearest support — distance in ticks below price, the zone's score, its state, and QUALIFIES only when it is confirmed, clears your attention score and has enough opposing space. UNKNOWN means no zone exists on that side; if only a candidate exists, the panel says CANDIDATE and never marks it QUALIFIES.
• Nearest resistance — the same, above price.
• Active TL — the currently ranked primary trendline: direction, state, touch count, score.
• Space — the room between nearest support and nearest resistance, in volatility units and ticks. The built-in no-trade rule is too little room to the next opposing level, and the panel says TOO TIGHT when that happens; this is the number to check it against.
• Last event — what structure did most recently, in words: a touch waiting for its rejection, a confirmed rejection, a break watching for the retest, a flip, an expiry.
• Preview (optional) — what the forming bar is touching or approaching, on its own line. The confirmed state above it is never overwritten.
• Detailed panel mode adds the calibration numbers: the volatility unit in ticks, micro and structural pivots per 100 bars against the band the calibration aims for, how many objects are on the chart, and how many candidates were rejected and for which reason — slope, base cleanliness, excursion or anchor improvement.

READING THE CHART
Right-edge labels name every displayed object without covering the middle of the chart, and stagger themselves when prices overlap: TL-S | 82 | 4T | CONFIRMED for a rising-support line with four touches, S1 | 18452.50-18453.50 | 76 for the nearest support zone. Lifecycle decides the line pattern: Candidate and Broken objects are dashed, while Confirmed and Flip objects are solid; score controls visibility, opacity and emphasis. By default one winning line per direction and layer and up to three zones per side are drawn. Active, Broken and Balance lines share the same per-layer slots; detected, context, Broken and Balance zones share the same per-side budget. Explicit context is protected in ranking, so turning it on does not silently expand the chart past the configured limit.

THE FIVE-STEP READING SEQUENCE
1. Identify the nearest CONFIRMED support and resistance, not every visible object.
2. Check whether the active trendline agrees with the structural direction.
3. Watch HOW price approaches: a controlled pullback with smaller bars has a reasonable chance of a reaction; a single impulsive bar demands stronger confirmation; repeated tests with shrinking reactions mean the level is being consumed — do not fade it; compression straight into a level raises breakout risk; an overshoot with an immediate reclaim is a possible sweep.
4. Wait for a valid reaction or a confirmed break. Do not predict the outcome at first contact.
5. Measure the space to the next opposing object before you consider anything.

BUILT-IN STARTING PRESETS
NQ/MNQ 250-tick, ES/MES 500-tick, ES/MES 250-tick, BTC-USD 500-trade and EUR/USD 1-minute, each applied in one step — including the session handling that belongs to that market, not only its thresholds. They are engineering starting points, not claims of optimality — replay-test them on your own feed, venue and session template. The BTC preset carries a percent-of-price floor so that a one-cent quote increment cannot become a structural tolerance; the FX preset carries a minimum zone width in price increments, because spot FX has no centralized tape.

CALIBRATING A NEW SYMBOL
The indicator gives you the two numbers the procedure needs. The Detailed panel shows your structure density against the band the indicator aims for, so you can see at a glance whether the dial is right instead of guessing. Sensitivity AUTO finds that band on its own; if you would rather do it by hand, tune minimum excursion BEFORE touch tolerance — excursion controls noise, tolerance controls contact. Widen the zone merge distance only after pivot density is right. Raise the required break closes from two to three only if wick noise is still producing false breaks. Both counters and the rejection reasons are in the Detailed panel while you work.

== WHICH SETTINGS ACTUALLY MATTER ==
There are a great many settings, and that is on purpose — but you will only ever reach for a handful. This is that handful, in the order you should touch them.

• 06 · Mode & Inputs — PRESET. One click loads a starting bundle for your market, session handling included. Start here, and change nothing else until you have watched a session with it.

• 06 · Mode & Inputs — SENSITIVITY. The single dial that makes everything coarser or finer at once. AUTO holds the structure density in the band the indicator aims for, by itself. Leave it on AUTO unless you have a reason not to.

• 11 · Scoring & Ranking — MINIMUM DISPLAY SCORE. Too much on the chart? This is the first thing to raise. It hides weak objects rather than deleting them, so nothing stops being tracked in the background. Its partner is ATTENTION SCORE, which decides when the panel is allowed to say QUALIFIES.

• 08 · Swings — MINIMUM EXCURSION, one for each layer (Micro · and Structural ·). How big a turn has to be before it counts as a turn. This is your noise dial, and it is the one to tune BEFORE touch tolerance: excursion decides what exists, tolerance decides what touches it.

• 09 · Trendlines — TOUCH TOLERANCE. How close price has to come to be counted as a touch. Too tight and good lines never confirm; too loose and everything touches everything.

• 09 · Trendlines — STANDARD BREAK CLOSES and REQUIRE THIRD TOUCH TO CONFIRM. Your two strictness dials. Tighten them on noisy data and you get fewer objects, each of them meaning more.

• 10 · S&R Zones — MERGE DISTANCE and MAXIMUM ZONES PER SIDE. These two decide how readable the chart stays: how eagerly neighbouring zones become one, and how many are allowed per side at all.

• 11 · Scoring & Ranking — THE LINE AND ZONE WEIGHTS. Every ingredient of the 0-100 score is its own number, so a good level can mean what it means to YOU: touch count, a clean base, strong reactions, freshness, confluence. Most tools do not open this up at all.

• 14 · Panel — PANEL MODE set to Detailed while you tune. It shows the numbers you are tuning against, and why candidates were rejected. Put it back to Compact when you are done.

• 05 · Session & Time — TIME ZONE controls the offset written into alert timestamps; SESSION TEMPLATE and the separate Session Time Zone control session boundaries. Changing the alert zone never moves structure.

Everything else has a sensible default and can wait until you want it.

MACHINE-READABLE OUTPUT
Nearest support and resistance boundaries, both scores, the projected price of each active trendline, the lifecycle state of the ranked line and zone, the last structure event, the volatility unit, and the space to the next opposing level in ticks, price and VU — all as numeric series, so another module or an export can read the structure without parsing text. Alerts carry the full JSON payload: object id, type, state, score, tick-rounded price, tolerance and an ISO-8601 timestamp in the selected alert time zone.

HONESTY
When no zone exists on a side, the panel says UNKNOWN — not zero, not "clear". A visible but unconfirmed zone is named CANDIDATE and cannot receive QUALIFIES. Pending pivots are drawn only as a preview and never used as anchors. Nothing is inferred from the forming bar unless you switch the preview on. And the indicator will not tell you a level must hold: trendlines and support/resistance are analytical constructs, not barriers.

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 StructureMapper 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.StructureMapper.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 StructureMapper to a chart.
5. Open indicator settings → 01 · License → paste the license key from your OrderFlowSmith account (it is also sent by e-mail).
6. The settings show the licensed account; the panel footer shows the version and license status, and structure appears as soon as enough bars have been scanned.

First settings worth a look: 06 · Mode & Inputs → Preset if you trade NQ, ES, BTC or EUR/USD, and Sensitivity on AUTO for anything else; 14 · Panel → Panel Mode, switched to Detailed while you calibrate, so you can see pivot density and rejection reasons; 11 · Scoring & Ranking → Minimum Display Score if the chart is busier or emptier than you want. Every setting has a tooltip explaining what it does and why it exists.
Changelog — version 1.3.2
1.3.2 - 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.3.1 - 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.3.0 - SETTINGS TEMPLATE: LICENSE HEADER, PANEL BACKGROUND AND NOTICES, TELEGRAM IN ONE FORM. STRUCTURE LOGIC UNCHANGED.

14 - Panel gained Panel Background (transparency in the colour) and Show Notices with its own position and offsets: the licence notice now shows even while the panel is hidden, and it no longer prints the licence holder's e-mail. In 16 - Alerts the Alert Sound sits right under Enable Alerts. 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. Pivots, trendlines, zones, scoring and drawing are unchanged.

1.2.12 - NO CUSTOMER LIMITS: WHOLE-CHART SCAN, LEVELS THAT NEVER EXPIRE, TRANSPARENCY IN THE COLOR.

Maximum Historical Scan accepts 0 = the whole loaded chart (a long chart just takes longer to open). Confirmed Lifetime and Confirmed Zone Lifetime accept 0 = never expires by time, so a confirmed line or zone stays until it breaks; Context Zone Lifetime has a new Never option. The four Opacity settings are gone: transparency now lives in the color pickers only - Support Zone Fill and Resistance Zone Fill are new colors whose alpha channel is the fill transparency, and the specification's state dimming (candidate 35 %, confirmed 70 %, primary 100 % of the color's alpha) is applied automatically. Diagnostic Mode and Diagnostic Log moved to a new last group, 18 - Diagnostics, so the everyday settings are not mixed with calibration tools. Structure calculations are unchanged.

1.2.11 - PANEL LAYOUT AND VISIBILITY CONTROLS.

Compact, detailed and status 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. Structure calculations and signal logic are unchanged.

1.2.10 - VISIBLE STRUCTURE NOW HONOURS ITS LIMITS.

Broken and Balance trendlines no longer add extra lines outside Lines Shown Per Layer; they compete with active structure for the same slot. Context, Broken and Balance zones now consume Maximum Zones Per Side as well, while explicitly enabled context remains protected in ranking. The engine still tracks every object internally; the change only removes chart clutter.

Regression evidence: 70 deterministic StructureMapper checks pass. Static build and encrypted release gates do not replace live ATAS visual and parity acceptance.

1.2.9 - DEEP SPECIFICATION HARDENING: HONEST LIFECYCLES, DETERMINISTIC PARITY AND ONE ATOMIC CHART FRAME.

A broken line or zone can now flip only after price approaches it from the genuinely broken side and rejects there. Zone identity and its independent-test clock begin at the source pivot rather than the later creation bar; Confirmed zones use the confirmed lifetime; Broken remnants cannot inflate confluence or outrank active Confirmed structure; Candidate and Broken styling stays dashed; and the configured second role change locks the object as non-directional Balance.

Session handling and identity are now deterministic at the boundaries that matter: NQ/ES Custom Hours use New York daylight-saving rules per bar, BTC resets at exactly 00:00 UTC, tick-chart IDs retain all seven fractional-second digits, alert strings are valid escaped JSON, prices are invariant and tick-rounded, and timestamps carry the selected time-zone offset without moving the structure itself.

The renderer and intrabar preview now consume and publish one immutable generation. A stale preview is rejected instead of being attached to a newer completed-bar frame, and tolerance geometry is captured with that frame. Diagnostics write a BarFrame heartbeat for every completed candle; the parity checker fails closed on duplicate keys, missing heartbeats, unequal final coverage and every required object/state/score/visibility difference.

Evidence before packaging: 67/67 deterministic StructureMapper checks, 6/6 parity-tool self-tests and 171/171 shared OFS checks. These are static and fixture-based gates, not a claim that ATAS runtime parity, visuals or performance have already passed; those remain mandatory in PREBIERKA before the encrypted release is called fully verified.

1.2.8 - 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.2.7 - SMALL AUDIT FIXES: EXACT CONFLUENCE, A STEADIER SECOND LINE, AND A DIAGNOSTIC LOG THAT KEEPS UP.

Confluence between a trendline and other objects is now measured on the exact bar being processed - during a fast catch-up it could read the line's projection one bar behind.

With Lines Shown Per Layer above one, the second line could swap on ties; within the score tie margin the line already drawn now keeps its place, the same anti-flicker rule zones and the primary line already follow.

The diagnostic log flushes to disk at least once a second, so a platform crash no longer loses the last quarter-megabyte of rows.

1.2.6 - ALERTS ACTUALLY FIRE NOW, AND TIMES ARE PICKED, NOT TYPED.

All seven alerts (candidate created, touch, third-touch confirmation, break, retest flip, expiry and approach) were silently dead: the guard that keeps alerts from replaying history was off by one bar, so it also swallowed every live event. It now uses the correct boundary and the alerts fire again - still only on the live market, never from a reload or a settings change.

Regular Hours Start and Regular Hours End use the platform's own time picker instead of a typed HH:mm text. Values are still shown in your selected Time Zone and anchored to the exchange clock underneath, so switching the zone never moves a session cut. If you had custom hours saved from an older version, set them once again - the old text values cannot carry over into the new editors.

1.2.5 - ZONES AT THEIR TRUE COLOUR, AND DRAW ABOVE CANDLES FINALLY WORKS.

The chart content was drawn in two layers on top of each other, which made every semi-transparent zone twice as dark as the colour you picked. It is drawn once now. As part of the same fix, the Draw Above Candles switch actually does something: content is composed in the one pass where the platform decides above-or-below the candles, so turning it off really puts the structure behind the price.

The new-version card also shows on its own now - it used to be tied to the panel and never appeared while the panel was hidden.

1.2.4 - 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.2.3 - DOTS SIT EXACTLY ON THE WICK.

The dots above and below wicks - pivot markers and touch points - were drawn one to two pixels to the side of the wick, and at odd bar widths the offset even changed as you scrolled, so the dots seemed to jump sideways. The cause: the coordinate the code asked the platform for is not the same coordinate the platform itself uses to draw the wick. The markers, the preview boxes and the endpoints of structure lines are now anchored with the exact same formula the chart uses for the wick, so they sit on it to the pixel at every zoom.

1.2.2 - 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.2.0 - TIME ZONE AND SESSIONS, WITHOUT MOVING YOUR STRUCTURE. A new settings group, 05 Session & Time, decides how times are shown and where the trading day is cut.

The important part is what does NOT happen: the structure stays anchored to the exchange clock, so switching the display zone never moves a session boundary and nothing on the chart jumps. Times arrive from the platform in UTC and UTC stays the default; the list is ordered by UTC offset, and Manual gives you a fixed offset with no daylight-saving switching.

Session Template follows the platform by default - it already handles daylight saving, which hard-coded logic must never try to do. Custom Hours lets you state regular trading hours yourself, entered in whichever zone you selected.

Also fixed: touch dots and preview boxes now sit exactly above and below the wick they mark. They were drawn a fraction off centre, which is the kind of detail you notice without being able to name it.

The settings groups are renumbered to match every other OFS indicator, so the window looks the same wherever you are — Mode & Inputs, Structure Display, Labels & Markers, Outputs and Alerts all moved down the list, and Context Panel is now simply Panel. If an older entry below names a group by its old number, this is why.

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.

EARLIER RELEASES - the short version. Everything below happened before 1.0 and is kept here because it says how the indicator got its rules. Note that the settings groups were renumbered in 1.2.0, so older entries name them by their old position.

0.3.15 - The context panel now starts hidden, so adding the indicator leaves the chart clean. Every alert was already off by default: nothing here makes a sound until you ask it to.

0.3.14 - FLIP and BALANCE tags off by default. The object is already drawn in the colour of its new role, so the tag only repeated what the colour said.

0.3.13 - A level no longer switches itself on and off as price drifts past it. An object already on the chart now leaves on a distinctly looser threshold than the one it arrived on - the same separate-enter-and-exit rule that governs object states, applied to the decision to show them.

0.3.12 - Sensitivity can calibrate itself. Every distance in this indicator already adapts to any market, because they are all measured in volatility units - but pivot strength is counted in BARS, and three bars either side means three minutes on a minute chart and about a second on a fast tick chart. That is why values tuned on one chart type are wrong on another. AUTO measures the indicator's own pivot density and moves the dial until it lands in the target band, deciding only from bars already behind it.

0.3.11 - The sensitivity dial became a named list instead of a signed number. A numeric editor that will not accept a minus sign swallows the value silently, and there is no way to tell it never arrived - which is exactly what had been happening. A dropdown cannot fail to register.

0.3.10 - The drawn line stopped changing several times a second. Which line to draw was being decided from scratch on every bar, and on a tick chart several bars close each second, so two closely scored lines kept swapping while the market itself had not moved. The line on the chart now keeps its place until a rival beats it by more than the tie margin AND holds that lead for the new Primary Hold setting. Zones follow the same principle.

0.3.9 - Everything drawn per bar was half a candle to the right. The platform's GetXByBar already returns the MIDDLE of a bar and the code added half a bar width on top. On a line that is invisible; on a touch dot it is the difference between marking a wick and sitting beside it.

0.3.8 - Touch dots and pivot markers moved outside the candle. A dot drawn at the price of the touch sits at the same height as the wick that made it, so it appeared beside the wick instead of marking it. They now sit clear of the candle, below the low or above the high.

0.3.7 - Trendlines stopped dying three bars after they were confirmed. The band that means price is still respecting a line and the threshold that means it broke overlapped, so the same bar could satisfy both. Measured on a real session, 67 percent of confirmed trendlines broke within five bars of confirmation, median three bars - so a line never lasted long enough to be useful. A break threshold can no longer fall below the contact band, whatever it is set to. Found in the diagnostic log; it was not visible by reading the code, because each threshold looked reasonable on its own and only their relationship was wrong.

0.3.6 - Turning the sensitivity down could empty the chart. The dial was cutting structure twice: fewer objects were found AND the score they had to clear was raised at the same time. It now controls how much structure is FOUND; what is worth showing stays your decision in Scoring & Ranking. The panel shows the sensitivity next to the preset whenever it is not zero - a dial that moves several thresholds at once has to be visible, otherwise the chart changes and nothing says why.

0.3.5 - The prior-session high stopped disappearing. Context levels were being treated as obstacles that could be broken, so once price traded through yesterday's high the level was removed - while the low stayed. A context level is a reference, not an obstacle: yesterday's high is worth watching all day precisely AFTER price has crossed it. Context levels can now be touched, but they no longer break or flip.

0.3.4 - An object can no longer flip roles forever. The log showed 815 objects flipping at least once, 249 of them four times or more, and one seventeen times. An object that flips seventeen times is not describing structure, it is describing price oscillating around a level. After the second role change an object is now locked as a BALANCE area: it keeps its place on the chart, but stops changing role, stops being reported as nearest support or resistance - it is neither - and no longer counts as an obstacle when space is measured.

0.3.3 - The panel and label offsets are no longer capped at a number with no reason behind it, which ran out on a large or high-resolution chart.

0.3.2 - Five fixes found by reading two charts three minutes apart. The panel and the chart could disagree about the same object, because nearest support and resistance were chosen by which side of price a zone sat on rather than by its role. The panel counted objects it had not actually drawn. A level was marked QUALIFIES on quality alone, when the bounce framework requires quality AND enough room to the next opposing object - so the Space row now says TOO TIGHT, in the warning colour, when there is not.

0.3.1 - The test instrument. Behaviour unchanged; this release only added the ability to observe it. Outputs -> Diagnostic Log records every transition - pivot confirmed, object created, touched, rejected, confirmed, broken, retested, flipped, expired - each with the reason it happened and the reason it left, keyed by candle TIME rather than bar index, because indices shift when a reload brings a different amount of history and times do not. The forming bar is never logged: only what the indicator declares as settled is recorded.

0.3.0 - A readable chart, and a settings window you can use. The per-layer limit had only decided which line was EMPHASIZED, not how many were drawn, so every line above the display score was on the chart at once. It now decides what is drawn: one rising and one falling line per layer by default, and every other line waits in the engine until it ranks first. Objects projected far from price are no longer drawn at all - a trendline well below the market is not information, it is a line into the corner of the screen. New: Sensitivity, one dial instead of four expert groups; and Show Advanced Settings, off by default, so the window opens on the handful of controls you normally touch.

0.2.2 and 0.2.1 - Structure is drawn beneath the candles, and the drawing order became yours to choose. A zone rectangle painted over the bars hides the very reaction the zone exists to explain. It is deliberately one switch for the whole indicator: the platform gives an indicator a single drawing order for everything it draws, so structure and panel cannot sit on opposite sides of the candles.

0.2.0 - A full cross-check against the design document, section by section, and everything it found. Forty fixes, of which the ones worth naming: three lifetime settings had no effect at all; a flipped trendline was frozen and could be closed through repeatedly with no break and no alert; a candidate that price accepted through could become BROKEN and then flip, presenting structure that had never earned a second test; on a tick chart some trendlines were never created, because object identity used a timestamp accurate to one second and several bars a second are routine; only one line was built per new swing point however many were valid, which is why raising the lines-per-layer setting never showed more; overnight high and low were created and expired on the same bar; reaction strength was effectively a yes/no flag, so a level that produced a large thrust scored the same as one that barely rejected; and presets leaked into eac

Frequently asked questions

I can already draw a trendline in ATAS. What does this add?
The drawing tool is precise and fast, and this does not replace your own lines. What it adds is everything after the line exists: choosing which swing pairs deserve a line at all, counting the independent touches, scoring the line out of 100 against your own weights, refusing to confirm it until price has actually rejected it, detecting the break by closes rather than by a wick, and retiring it when it stops being touched. A hand-drawn line stays until you delete it — which is why old charts fill up with structure that stopped working days ago.
Does the indicator repaint?
It is engineered so completed structure does not repaint. A swing point that requires three bars on its right does not exist until those three bars have closed, only bar-close logic changes a Confirmed, Broken, Flip or Expired state, and the optional intrabar preview draws in a separate style on its own channel and can never become an anchor. We would rather you verified that than believed it: switch on 15 · Outputs → Diagnostic Log, run the chart live, then reload it from the beginning and compare the two logs. Every object, every anchor and every state change is written down with the reason for it, so the live run and the reloaded run can be checked against each other line by line: missing objects, extra objects, anchor differences, state differences and retroactively changed reasons all have to be zero. Until that comparison has been signed off on your own data and feed, we describe this as how the indicator is built rather than as a certified property.
Why is a wick through my level not a break?
Because it is the single most common source of false breaks. A break requires acceptance: either the configured number of consecutive closes beyond the object plus a tolerance, or a single decisive bar that both travels far enough and closes far enough past the level to count on its own. Both of those are yours to set in 09 · Trendlines. If your feed is noisy, raise the required closes to three — that is the conservative mode.
What is a Volatility Unit (VU)?
A Volatility Unit is how far this market typically travels right now. It is measured from your own chart, re-measured as conditions change, and floored so that a frozen market cannot collapse every tolerance to zero. It is deliberately built so that one extreme bar cannot stretch every distance on the chart at once. Excursion, touch tolerance, zone width, break thresholds and required rejection are VU-based, with explicit tick, percent or price-increment floors where needed. This makes profiles portable starting points, but it does not remove feed-specific replay calibration.
What is the difference between Candidate and Confirmed?
Two anchors define a candidate: a higher low after a swing low, or a lower high after a swing high, with a clean base segment between them. Confirmed requires a third independent touch that price then rejects by the required distance within the rejection window, and no break in the meantime. That is a trading-design rule rather than a market law, so you can turn it off and confirm on the second touch instead.
Why do some lines never appear?
Four filters reject them, and Detailed panel mode counts each: the normalized slope was outside the accepted band (too flat belongs to horizontal clustering, too steep is an impulse that normal pullbacks will not respect); the base segment was not clean enough — a close crossed the line, too many wicks penetrated it, or too much of the candle bodies sat on the wrong side; the two extremes were not far enough apart to count as a real higher low or lower high; or the swing itself did not travel far enough from the previous opposite pivot to be more than noise.
Why are support and resistance drawn as areas instead of lines?
Because price does not react at one exact number. A zone is built from the cluster of turns that formed it and is never allowed to become a hairline, so one extreme wick can neither shift it nor blow it up. Touches, rejections and breaks are always evaluated against the area, not against a single price. A single price line is drawn for context levels where an exact number is what you asked for.
What does FLIP mean?
That the object was confirmed, was then broken by a real acceptance, and was afterwards retested from the opposite side and rejected there. Broken support acting as resistance, or the reverse. It keeps working in its new role and is marked so you can see that its history is mixed. An object can never jump straight to a flip — a confirmed break is always required first.
How do I calibrate it for a symbol that is not in the presets?
Switch Panel Mode to Detailed and use the two counters. They show your micro and structural pivot density against the band the indicator aims for, so adjust pivot strength until both sit inside it — or simply leave Sensitivity on AUTO and let it find that band for you. Then tune minimum excursion before touch tolerance — excursion controls noise, tolerance controls contact. Set the zone merge width only after pivot density is right. Raise the break closes from two to three only if false breaks persist. Finally check object lifetimes: stale lines must leave the chart before they dominate it.
There are too many objects on my chart. What do I change first?
Raise Minimum Display Score first — it hides weak objects without changing what the engine tracks. If that is not enough, increase pivot strength or minimum excursion (not touch tolerance, which would make contact sloppier), reduce the maximum zones per side, or shorten the candidate lifetimes. Widening zones is almost never the right first move: it merges independent structures into one block that explains nothing.
What do the presets actually change, and can I trust them?
Pivot strength, minimum excursion, touch tolerance, zone half-width, anchor spacing, break confirmation and the session handling for that market and chart type. They are engineering starting points, not claims of optimality — the documentation is explicit that no fixed parameter set can be objectively correct for every market and feed. Replay-test a preset on your own data provider, venue and session template before trading it, and save your result as your own setup.
Does it work on both ATAS and ATAS X?
The same DLL is built against the classic-compatible ATAS API and is intended for both classic ATAS Platform and ATAS X. Runtime acceptance is recorded separately for each platform. Classic ATAS loads indicators at startup, so after installing a new version close it completely and start it again; otherwise the previously loaded DLL remains in memory.
Can other indicators read its output?
Yes. With Publish Machine Series switched on you get the nearest support and resistance boundaries, both scores, the projected price of each active trendline, the lifecycle state of the ranked line and zone, the last structure event, the volatility unit, and the space to the next opposing level in ticks, price and VU — all as numeric data series. Alerts carry the same information as a JSON payload with object id, type, state, score, price, tolerance and timestamp.
Do settings take effect immediately?
Yes. Every setting applies the moment you change it — appearance settings redraw straight away, and settings that change what is calculated recompute the history once you stop adjusting them. You never need to remove and re-add the indicator. After switching a preset, close and re-open the settings window to see the values it wrote.
Where do I enter my license key?
In the indicator settings, group 01 · License — the first group in the list. Paste the key from your OrderFlowSmith account. It is verified locally, so no internet connection is required while trading.
Is there a trial?
Yes, a 7-day trial with full functionality — one trial per ATAS e-mail and product.
Does it place orders or tell me when to enter?
No. It answers where price should react, break or retest. Whether the market is worth trading at all is a separate question, and so is the trigger. Entries, exits, position size and risk stay entirely with you — the documentation is explicit that a line or a zone alone is never sufficient reason for a trade.
⚠ OFS StructureMapper is an analytical decision-support tool only. Trendlines and support/resistance areas are analytical constructs, not guaranteed barriers: the indicator does not predict that a level will hold, does not generate trade signals and does not guarantee any outcome. Tick-chart appearance depends on the data feed and trade aggregation; spot FX has no single centralized tape, so results there are broker-specific, and crypto structure can differ between venues. No preset removes the need for replay testing across several volatility regimes. Position size, stop-loss, daily loss limits and whether to trade at all are your decisions, not the indicator's. Trading futures, forex and crypto carries a substantial risk of loss and is not suitable for everyone. This product is analysis software — it is not financial, investment or trading advice, and it cannot guarantee any profit. Every decision stays with you: whether to trade at all, position size, stop-loss and when to walk away. Any performance figures we publish come from historical testing; hypothetical and back-tested results have inherent limitations and never guarantee future results. To the maximum extent permitted by law, OrderFlowSmith is not liable for trading losses, missed opportunities or other damage arising from the use of this software. Never trade with money you cannot afford to lose.

Reviews

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