# Cival Liquidity Map — Guide

Release 1.0.0-atas · archive SHA-256 `2c0bc40c75295dcb1ab07630f0499bd7a948a3dfba2e7ec094df7e9c314490ab` · 189,712 bytes

Contents: install guide · reading the indicator · trading playbook · settings reference · platform compatibility

## Cival Liquidity Map — Install Guide

Version 1.0.0 · file `Cival.LiquidityMap.dll` · name in ATAS: **Cival Liquidity Map**

Cival Liquidity Map is a compiled ATAS plugin. This guide takes you from the downloaded zip to a verified, working indicator. The full list of settings is in `02-Settings-Reference.md`.

## 1. Requirements

| Item | What you need |
|---|---|
| Platform | ATAS Platform **8.0.15 or newer**. The plugin runs on the .NET 10 runtime that ATAS ships; you install nothing else. |
| Data | **Ordinary price candles.** Cival Liquidity Map uses only open, high, low and close. It does **not** need footprint data and it does not read the order book. |
| Instrument | A tick size known to ATAS (equal highs and lows are matched within a number of ticks). |
| History | A few hundred bars at least, so that swing highs and lows can be confirmed and zones can live and end. The indicator processes at most the last **Maximum bars back** bars (default 10,000). |
| Windows | You can write to `%APPDATA%\ATAS\Indicators`. |

## 2. Install with the included script

1. **Close ATAS completely** (check the Windows task manager that no ATAS process is left; a running ATAS locks the DLL).
2. Extract `Cival-Liquidity-Map-v1.0.0.zip` to a normal folder and open PowerShell in it.
3. Run:

   ```powershell
   .\ATAS\Install.ps1
   ```

   The script copies `Cival.LiquidityMap.dll` to `%APPDATA%\ATAS\Indicators`, keeps a backup of any DLL with the same name that was already there, and verifies the SHA-256 of the copied file against the value recorded in the package. If it reports a mismatch, stop and download the product again.
4. If Windows blocks the script because of the execution policy, run it for this session only:

   ```powershell
   powershell -ExecutionPolicy Bypass -File .\ATAS\Install.ps1
   ```
5. Start ATAS.

## 3. Manual install

1. Close ATAS.
2. Check the file: `Get-FileHash .\ATAS\Cival.LiquidityMap.dll -Algorithm SHA256` and compare the value with the `Cival.LiquidityMap.dll` line in `SHA256SUMS.txt`.
3. If `%APPDATA%\ATAS\Indicators\Cival.LiquidityMap.dll` already exists, copy it somewhere safe first.
4. Copy `ATAS\Cival.LiquidityMap.dll` into `%APPDATA%\ATAS\Indicators`.
5. Start ATAS. ATAS only loads the new DLL when it starts.

## 4. First load

1. Open a candle chart of the market you study, on the timeframe you use. Load some history.
2. Open the indicator catalog, search for **Cival Liquidity Map** and add it.
3. Wait for the historical calculation to finish.
4. The panel appears at the top-left of the chart, about 50 pixels below the top edge.

**What the first panel lines mean**

| What you see | Meaning |
|---|---|
| `Cival Liquidity Map` / `Waiting for closed candles / historical calculation` | No closed bar has been delivered yet. |
| `Cival Liquidity Map` / `Active • N bars • no qualifying setup yet` | Bars are arriving but the 7 bars needed to confirm a first swing (with the default 3-bar confirmation) have not closed, or nothing has formed yet. |
| `Confirmed pivots: 3-bar delay` | Line 2 once calculation runs: swing highs and lows are only confirmed 3 bars (the **Pivot confirmation bars** setting) after they print. |
| `Active zones 10; nearest 12 shown` | Line 3: how many zones have not been closed through, and how many of them (at most) the chart draws. |

**You will see only three lines at first.** With the default **Compact panel (title + two lines)** switched on, ATAS shows only the title and the next two lines. The three legend lines (`EQH/EQL …`, `OB/BRK …`, `SWP …`) are hidden. Untick **Compact panel (title + two lines)** in the *Information panel* group to see all six.

**On the chart.** Short horizontal lines for equal highs/lows (`EQH`, `EQL`), shaded rectangles for structural blocks and broken blocks, and arrows for sweeps and structure breaks. By default ATAS spells common abbreviations out, so you will read labels such as `Liquidity sweep high (price pattern)`, `Structure break displacement` and `Structure zone structural New` (section 4 of `03-Reading-the-Indicator.md` lists them all).

## 5. Settings to touch first

1. **Pivot confirmation bars** (default 3), **Equal high/low tolerance (ticks)** (default 2), **Displacement / prior ATR** (default 1.5): the three rules that define what is drawn.
2. **Maximum visible zones** (default 12): lower it if the chart is crowded (6 to 12 is usually readable).
3. **Show touched levels**: off by default; on also draws zones that have been closed through (grey, ending where they ended).
4. **Compact panel (title + two lines)**: untick to see the legend.

## 6. Verify it works — checklist

Tick each item.

1. `Get-FileHash` of `%APPDATA%\ATAS\Indicators\Cival.LiquidityMap.dll` matches the `SHA256SUMS.txt` line.
2. After restarting ATAS, **Cival Liquidity Map** appears in the indicator catalog.
3. Added to a candle chart, the panel title reads `Cival Liquidity Map` and line 2 reads `Confirmed pivots: 3-bar delay`.
4. On a chart with a few hundred bars you can see arrows (sweeps, structure breaks) and at least some horizontal lines or shaded rectangles.
5. Changing **Pivot confirmation bars** from 3 to 5 changes line 2 to `Confirmed pivots: 5-bar delay` and usually reduces the number of pivots, lines and arrows.
6. Each rectangle's label ends with its state (`New` or `Tested`; `Invalidated` only if **Show touched levels** is on).
7. Raising **Maximum visible zones** draws more zones; lowering it to 3 leaves only the nearest three.
8. With a CSV export folder set, `LiquidityMap-signals.csv` and `LiquidityMap-zones.csv` exist after the calculation finishes.

## 7. Updating

1. Close ATAS completely.
2. Extract the new zip and run its `.\ATAS\Install.ps1`. The previous same-named DLL is backed up automatically.
3. Start ATAS and re-add or reload the indicator on your charts.
4. Before updating, save a chart template and note your three structure settings. If a new version renames or removes a setting, ATAS may fall back to the default for that one setting.
5. Keep the old zip so that you can return to an older version (close ATAS and copy the older DLL back).

## 8. Uninstalling

1. Remove Cival Liquidity Map from your charts and templates.
2. Close ATAS.
3. Run `.\ATAS\Uninstall.ps1` from the extracted folder, **or** delete `%APPDATA%\ATAS\Indicators\Cival.LiquidityMap.dll` yourself.
4. Exported CSV files stay where you wrote them.

## 9. Troubleshooting

| Symptom | Likely cause | What to do |
|---|---|---|
| Cival Liquidity Map is not in the indicator list | ATAS was open during install or not restarted; wrong folder; installer blocked | Close ATAS fully, check the DLL is in `%APPDATA%\ATAS\Indicators`, start ATAS, search for `Cival`. Use the `-ExecutionPolicy Bypass` form if the script was blocked. |
| Panel shows only three lines | **Compact panel (title + two lines)** is on (default) | Untick it. |
| No panel at all | **Show information panel** is off; other Cival panels fill the space (a gold message at the bottom-left says how many panels need space); or the chart is very small | Tick **Show information panel**; hide unused panels. |
| Nothing is drawn | Fewer bars than the confirmation window needs, no confirmed swing yet, every zone already closed through, or **Maximum visible zones** is too low for the area on screen | Check the loaded history, symbol and timeframe first. Scroll to a busier part of the history, tick **Show touched levels** to see ended zones, raise **Maximum visible zones**. An empty chart is not a measured zero; it means nothing qualified under the rules. Do not loosen **Pivot confirmation bars**, tolerance or displacement merely to force objects to appear. |
| Too many arrows and rectangles | The rules are frequent on lower timeframes (the demo sample has 110 sweeps and 51 structure breaks in 4.8 days of 5-minute bars) | Raise **Pivot confirmation bars** or **Displacement / prior ATR**, lower **Maximum visible zones**, or turn **Show labels** off. |
| Labels are missing | **Show labels** is off; the chart is zoomed out beyond **Minimum bar spacing for signal labels (pixels)** (default 6); or a label would overlap another (labels are hidden, never moved) | Zoom in, tick **Show labels**, or untick **Avoid overlapping labels**. |
| Zones vanish after a time | A bar closed through them; ended zones are not drawn unless **Show touched levels** is on | This is the intended lifecycle. See the reading guide. |
| DLL is locked during install or update | An ATAS process is still running | Close ATAS, end leftover processes, run the installer again. |
| Settings reset after an update | A setting was renamed or changed in the new version | Re-enter your settings from your notes; load your saved template. |
| CSV files do not appear | Folder blank or not writable; calculation not finished | Set a writable folder; check for a `CSV export failed:` line in the panel. |
| Chart looks different after changing timeframe or history | Swings, blocks and zones are rebuilt from the bars loaded | Expected. Compare like with like. |
| A sweep arrow appears but I cannot see the swing it refers to | The remembered swing highs and lows are not drawn; only equal pairs (`EQH`/`EQL`) become lines | Audit it by eye: look back for the latest bar, at least **Pivot confirmation bars** bars before the arrow, whose high (for a sweep of a high) is strictly above the bars on both sides, and check that the arrow bar traded beyond it and closed back. Section 9 of `03-Reading-the-Indicator.md` walks through it. |
| The same rectangle changed colour | A structural block was closed through; its range is redrawn as a broken block (`BRK`) with the opposite side. The original block ended on that close. | Read the label: `OB structural` is the original, `BRK structural` the broken-block counterpart. |
| Equal-high and equal-low lines are rare | Equal tolerance is measured in ticks, and a 2-tick tolerance is a tight definition of "equal" on a market with a small tick relative to price | Leave it, or choose a wider tolerance on purpose. It changes what "equal" means, so do not change it merely to make more lines appear. |
| The settings do not match this guide | A saved chart or template carries its own values and overrides the defaults | Open the indicator settings and compare each value with `02-Settings-Reference.md`; reset any you do not recognise. |

Still stuck? Email `support@civalsystems.com` with the product version (`1.0.0`), your ATAS version, a screenshot with the panel expanded and what you expected to see.



## Cival Liquidity Map — Reading the Indicator

Despite its name, Cival Liquidity Map **does not measure liquidity**. It does not read the order book, it does not see resting orders and it cannot identify stop orders (the panel says so: `stops not identified`). It maps **market structure from closed candles**: confirmed swing highs and lows, equal highs and equal lows, bars that poke beyond a swing and close back, bars that close through a swing with a large body, the candle range behind such a break, and what happens to that range afterwards. Every object is a rule applied to open, high, low and close. Structural liquidity here is not measured resting dollars, hidden stop inventory or liquidation pools. For observed resting quotes you need a separate depth or heatmap tool.

Everything below comes from the shipped plugin (v1.0.0). Defaults are the ones the indicator starts with.

## 1. What is drawn on the chart

| Element | Look | Meaning |
|---|---|---|
| **Equal high / equal low** (`EQH`, `EQL`) | one-tick-thick horizontal band with a line, running to the right | Two confirmed swing highs (or lows) within the tolerance. `EQH` is red, `EQL` green. |
| **Structural block** (`OB structural`) | shaded rectangle across a candle's high-low range, with a line at its midpoint | The candle range that preceded a displacement break. Green = bullish block (the break was upward), red = bearish block. |
| **Broken block** (`BRK structural`) | same rectangle, opposite colour | A structural block that a bar has closed through; its range is re-drawn with the opposite side. |
| **Sweep arrow** (`SWP high / low (price pattern)`) | ▼ above a bar's high (red) or ▲ below a bar's low (green) | A bar traded beyond the latest confirmed swing and closed back on the other side of it. |
| **Structure-break arrow** (`BOS displacement`) | ▲/▼ at the bar's close | A bar closed through the latest confirmed swing with a body of at least 1.5 times the prior 20-bar average true range. |
| **Information panel** | top-left, 50 px below the top edge | Six lines (section 5). |

Colors: **Bull color** (default green `#3CB371`) and **Bear color** (default red `#FF6347`). A rectangle's fill is about 20% opaque for equal levels and structural blocks and about 10% for broken blocks; the midpoint line is fully opaque. A zone that has been tested turns grey (only visible when **Show touched levels** is on and the zone has ended).

The remembered swing highs and lows themselves are not drawn; only equal pairs become lines (section 9 shows how to check the swing behind an arrow).

Where objects start: a line or rectangle starts on the bar **after** the bar that confirmed it, never on the original swing bar, so nothing is drawn with hindsight. It runs to the right edge of the chart until a bar closes through it, then it ends at that bar.

## 2. The rules

Let **N** be **Pivot confirmation bars** (default 3).

**2.1 Confirmed swing.** Look at a window of 2N+1 closed bars (7 by default). The middle bar is a *swing high* if its high is strictly above the high of every other bar in the window, and a *swing low* if its low is strictly below the low of every other bar. A tie disqualifies it. The swing is confirmed only when the last bar of the window closes, N bars after the middle bar. The indicator remembers only the **latest confirmed swing high and the latest confirmed swing low**.

**2.2 Equal highs / equal lows.** When a new swing high is confirmed and the remembered previous swing high is within **Equal high/low tolerance (ticks)** (default 2 ticks; 0 means exactly equal), an `EQH` line is drawn at the *new* swing's price. The same for lows (`EQL`). The tolerance is in ticks, so on a market with a very small tick relative to price (the demo has a 1-dollar tick on a BTC price near 81,000) a 2-tick tolerance is a tight definition of "equal" and equal levels are rare. You may choose a wider tolerance on purpose, but that changes what "equal" means; do not change it merely to make more lines appear. After a structure break in a direction the remembered swing on that side is cleared, so no pair is formed across a break.

**2.3 Sweep.** A closed bar whose **high is above the remembered swing high but whose close is below it** gets a ▼ `SWP high (price pattern)` at its high. A closed bar whose **low is below the remembered swing low but whose close is above it** gets a ▲ `SWP low (price pattern)` at its low. The same swing can be swept again and again; each bar gets its own arrow. The label says "price pattern" on purpose: the indicator does not know whether any order was near that swing.

**2.4 Structure break with displacement.** A closed bar closes above the remembered swing high (up) or below the remembered swing low (down), **and** its body `|close − open|` is at least **Displacement / prior ATR** (default 1.5) times the average true range of the previous 20 bars. The ATR is the plain average of those bars' true ranges (the first of them uses high minus low; the others use the prior close). If both conditions hold, a `BOS displacement` arrow is drawn at the bar's close, the swing that was broken is forgotten, and a structural block is created if the next step finds a candle. A close through the swing with a smaller body does nothing.

**2.5 Structural block.** Among the 10 bars before the break bar, take the **latest candle of the opposite colour** to the break (for an upward break, the latest down candle; for a downward break, the latest up candle). The block is that candle's low-to-high range, with a line at the midpoint. It has the side of the break (green for upward) and starts on the bar after the break bar. If there is no opposite candle in those 10 bars the arrow is drawn but no block.

**2.6 Closed through.** Every zone ends when a bar **closes** beyond its far side: a green zone when the close is below its low, a red zone when the close is above its high. A wick through the zone does not end it. Equal-level lines are one tick thick, so they end on a close beyond the line (plus half a tick).

**2.7 Broken block.** When a structural block is closed through, the same range is drawn again as a `BRK structural` zone with the opposite side, starting on the next bar. A broken block is not flipped a second time; when it is closed through it simply ends.

## 3. Lifecycle and what is shown

| State (label suffix) | Meaning | Drawn |
|---|---|---|
| **New** | No bar has traded into the zone since it started | Yes |
| **Tested** | A bar's high-low range has overlapped the zone (a wick is enough; this includes the bar still forming) | Yes. For this indicator a touch is information only; the zone stays until it is closed through. |
| **Invalidated** | A bar has closed through the zone (2.6) | No, unless **Show touched levels** is on. The zone then ends at that bar and is drawn grey. |

Which zones are drawn: the nearest **Maximum visible zones** (default 12) that are still active in the visible time range. Ranking uses the distance from the last price to the zone's midpoint, divided by the zone's strength (equal levels and blocks 2, broken blocks 1), with a mild penalty for age (up to double at 1,000 bars old). Closer, stronger and younger zones are preferred. Zones that are not drawn still exist: they are still tracked (touched, closed through) and still written to the CSV zones file. **Maximum visible zones** only limits what is drawn.

Zone labels end with the state: `EQH New`, `Structure zone structural Tested`, and so on.

## 4. Text on screen

Labels are stored in short form (as in the CSV files). By default (**Full analysis detail** on) ATAS spells out some abbreviations on screen; with the compact display they become short descriptions.

| Stored label | Default on-screen text | Compact display text |
|---|---|---|
| `EQH <state>` / `EQL <state>` | `EQH New` / `EQL Tested` (unchanged) | `Equal highs <price>` / `Equal lows <price>` |
| `OB structural <state>` | `Structure zone structural New` | `Bullish structure zone <price>` / `Bearish structure zone <price>` |
| `BRK structural <state>` | `Broken structure structural New` | `Broken structure <price>` |
| `SWP high (price pattern)` | `Liquidity sweep high (price pattern)` | `High swept and rejected` |
| `SWP low (price pattern)` | `Liquidity sweep low (price pattern)` | `Low swept and reclaimed` |
| `BOS displacement` | `Structure break displacement` | `Upward structure break` / `Downward structure break` |

`OB` stands for *order block* in many trading texts; here it only means "structural block", a candle range, and carries no claim about orders. Equal levels and blocks are labelled at their midpoint price in the compact display.

## 5. The panel, line by line

The panel has six lines. By default only the first three are visible; untick **Compact panel (title + two lines)** (group *Information panel*) to see all of them. Until the first swing can be confirmed (7 bars with the default setting) the panel shows `Cival Liquidity Map` and `Active • N bars • no qualifying setup yet`.

| # | Text (example from the demo) | Meaning |
|---|---|---|
| 1 | `Cival Liquidity Map` | Title (gold). |
| 2 | `Confirmed pivots: 3-bar delay` | Your **Pivot confirmation bars** setting. Swings appear that many bars after they print. |
| 3 | `Active zones 10; nearest 12 shown` | Number of zones not yet closed through (New or Tested, including equal levels) and your **Maximum visible zones**. |
| 4 | `EQH/EQL = equal highs/lows` | Legend. |
| 5 | `OB/BRK = structural block / broken block` | Legend. On screen by default: `Structure zone/Broken structure = structural block / broken block`. |
| 6 | `SWP = price sweep; stops not identified` | Legend. On screen by default: `Liquidity sweep = price sweep; stops not identified`. |

If a CSV problem occurs, an extra line with the message is inserted as line 2.

## 6. Compact display (optional)

Under group *00 Chart clarity*, **Full analysis detail** (default on) and **Compact display (full detail must be off)** (default on) work together. With the defaults you get everything described above. If you turn **Full analysis detail** off, the chart switches to a short style: at most 3 zones and 8 recent arrows (last 21 bars), short names (previous section), the large panel is replaced by a board in the top-right corner (`CIVAL / CURRENT CHART READ`) with one line of the form `Structure levels: Above <price> | below <price>` (the nearest active zones above and below the last price), and **Show touched levels** is ignored.

## 7. Alerts and CSV export

- **Alerts on closed signal / level touch** (default off) plays **Alert sound** (default `alert1`) when a bar closes with an arrow (`Cival SWP high (price pattern): <price>`, `Cival BOS displacement: <price>`) and when a zone is touched for the first time (`Cival level touched: <label> <low>–<high>`). These are observations, not instructions. Recalculating the history does not fire alerts for old arrows.
- **CSV export folder (blank disables)** writes `LiquidityMap-signals.csv` (columns `time, available_time, bar, price, side, kind, label, volume`; `kind` is `sweep` or `structure`; `volume` is always 1; arrows older than the last 1,000 retained bars are omitted) and `LiquidityMap-zones.csv` (columns `available_bar, low, high, poc, side, label, state, touched_bar, invalidated_bar`; `poc` is the zone's midpoint; `state` is `New`, `Tested` or `Invalidated`; `side` is 1 for green, −1 for red). The files are rewritten when history finishes calculating and when a new arrow appears live; a zone's later state shows in the file only at the next write. Use a separate folder per chart.

## 8. Settings that matter, and settings that do nothing here

| Setting | Effect |
|---|---|
| Pivot confirmation bars (1–50), default 3 | Window of 2N+1 bars for a swing; also the delay. |
| Equal high/low tolerance (ticks) (0–100), default 2 | How close two swings must be to form `EQH`/`EQL`. |
| Displacement / prior ATR (0.1–10), default 1.5 | Required body size for a structure break. |
| Maximum visible zones (1–100), default 12; Show touched levels, default off | Which zones are drawn. |
| Show labels, Minimum bar spacing for signal labels (pixels) (default 6), Avoid overlapping labels, Bull color, Bear color | Labels and colors. Labels are hidden, never moved; arrows stay. |
| Show information panel, Panel top offset, Panel width, Automatic panel placement, Panel font size, Compact panel | Panel display. Panel top offset applies only when automatic placement is off; width is limited to 220–700 px. |
| Maximum bars back, default 10,000 | Only the latest N bars are processed. |
| **No effect here:** Session start, Session timezone, Initial balance minutes, Show readiness/status panel, Show bubble volume numbers, Bubble number color, Compact volume numbers | Not used by this indicator (swings and zones do not depend on sessions). |

Changing a calculation setting (the three structure settings or **Maximum bars back**) recalculates the whole history. So can source corrections, a different history prefix (loading more or fewer bars) and a change of timeframe. Panning, zooming or moving the cursor changes only what is drawn, never the swings, arrows or zone states. Hiding the panel or the labels does not remove the underlying objects or CSV rows.

## 9. Auditing an object: source swing, break and candle

Every object follows from a few bars you can find on the chart. The remembered swing highs and lows are **not drawn** (only equal pairs become `EQH`/`EQL` lines), so check them by eye. Use this when something looks surprising, or before you rely on an object.

| To check | Look for |
|---|---|
| A sweep arrow ▼ (high) | The latest swing high before the arrow: a bar, at least N bars before the arrow bar, whose high is strictly above the highs of the N bars on each side. The arrow bar's high must be above it and its close below it. For ▲ use lows in the mirror image. The swing must already have been confirmed (N bars after it printed) before the sweep bar. |
| A structure-break arrow | The same kind of swing; the arrow bar closes beyond it, and its body is clearly larger than the typical range of the previous 20 bars (the rule is 1.5 times their average true range by default). |
| A structural block | The latest candle of the opposite colour among the 10 bars before the break bar. Its high-low range is the block. |
| The end of a block | The first bar after the block started whose close is beyond its far side (below the low of a green block, above the high of a red block). A wick is not enough. |
| A broken block | The same range as an ended block, in the opposite colour, starting on the bar after the closing bar. Original and broken blocks are told apart by the label (`OB structural` or `BRK structural`) and by the colour. |

If you cannot find the source swing, break bar or candle, treat the object with suspicion and check **Pivot confirmation bars**, the loaded history and whether the chart has been recalculated since a setting changed.

## 10. Worked example — real numbers from the demo

**Source.** The store demo: Hyperliquid BTC perpetual, **5-minute bars** (tick size 1.0) built from trades recorded by the Cival order-flow recorder, 17–21 October 2026, 1,380 closed bars (about 4.8 days). Default settings (3-bar confirmation, 2-tick tolerance, 1.5 ATR). Raw output: `demo\out\liquidity-map.json`; bars and the annotated excerpt: `demo\web\cival-liquidity-map.json`. All times are UTC on 17 October.

**From swing to block.**
1. The 15:55 bar printed a low of **81,258**, strictly lower than the three bars either side of it. It was confirmed when the 16:10 bar closed.
2. The 16:15 bar (open 81,351, high 81,351, low 81,255, close **81,255**) closed below that swing low. Its body was **96**. The average true range of the previous 20 bars (computed from the demo bars) was about 52.3, and 1.5 × 52.3 ≈ 78.4, so 96 qualified: a ▼ `BOS displacement` was drawn at 81,255.
3. The latest up-candle in the 10 bars before the break was the 16:00 bar (low **81,318**, high **81,417**). That range became a red (bearish) structural block starting on the 16:20 bar.

**From block to broken block.** The block stayed active until a bar *closed* above its far side, 81,417. That happened on the 18:00 bar (close **81,473**). The block was marked Invalidated and the same range, 81,318–81,417, was re-drawn as a green `BRK structural` zone from the 18:05 bar, 21 bars after the block had started.

**Sweeps in the same stretch.** The 14:15 bar (low 81,415, close 81,449) and the 14:20 bar (high 81,515, close 81,493) were each marked as sweeps because they traded beyond a remembered swing and closed back on the other side.

**What the sample shows overall.**

| Count in 4.8 days of 5-minute bars | Number |
|---|---|
| Sweep arrows | 110 (67 of highs, 43 of lows), about one every 12 bars |
| Structure-break arrows | 51 (26 down, 25 up) |
| Structural blocks created | 51 |
| Blocks closed through (flipped to broken blocks) | 46 (the other 5 were still open when the sample ended) |
| Broken blocks closed through again | 41 of 46 |
| Equal-level lines (`EQH`/`EQL`) | 3 (1 `EQH`, 2 `EQL`), all closed through by the end |
| Active zones at the end | 10 |

Read this honestly. Sweeps are frequent, so a sweep arrow on its own is a weak piece of information. In this sample structural blocks were closed through far more often than they were left alone. A block is a record of where a candle traded, not a promise of support or resistance. This is one market over a short sample.

## 11. What the indicator can and cannot know

| It can | It cannot |
|---|---|
| Find swing highs and lows by a fixed, confirmed rule | Know where stop orders, resting orders or liquidation levels are |
| Mark bars that traded beyond a swing and closed back, and bars that closed through a swing with a large body | Say why a bar did so, or who was involved |
| Keep a candle range and follow it until a close goes through | Say that a block will hold, bounce or break |
| Show an object only from the bar after it was confirmed | Remove the subjectivity of what counts as "equal" (your tolerance) or "large" (your ATR multiple) |
| Rebuild everything from the loaded bars | Show the same swings on another timeframe or history length |
| Show nothing when nothing qualifies | Treat an empty chart as a measured zero: unavailable data or a missing swing is not evidence that nothing happened |



## Cival Liquidity Map — Trading Playbook

This playbook describes how a discretionary trader can *think* with the structure that Cival Liquidity Map draws, and where the indicator's own reference prices sit. It is not a list of trades to take. Nothing on the chart is an order, a target or a prediction. Every playbook ends with the conditions that cancel it.

## Context first

- **Structure, not stops.** The indicator marks candle geometry around confirmed swings. It does not see resting orders or stop orders; its own panel says `stops not identified`. "Equal highs" and "sweeps" are patterns of price. Whether anyone's orders were there is unknown.
- **Frequency matters.** In the demo sample (4.8 days of BTC 5-minute bars) the indicator marked 110 sweeps and 51 structure breaks, and 46 of its 51 structural blocks were eventually closed through. Sweeps are common and blocks often fail. Treat them as reference prices to watch, not as support and resistance that will hold.
- **Everything is delayed on purpose.** Swings are confirmed N bars after they print (default 3), objects start on the bar after confirmation, and arrows appear after the bar closes. That is what makes the picture honest; it also means the best prices have often passed by the time something is drawn.
- **Higher timeframe first.** Decide the bigger picture (trend, range, session levels) before you look at 5-minute structure. A sweep inside a strong trend means something different from a sweep inside a range.
- **Use it with other context**: session highs and lows, a volume profile, the volume-weighted average price, your footprint (is there aggressive buying or selling at the reference?), scheduled news. No single reference is a reason to trade.
- **Reference prices are not orders.** The lines and blocks are reference prices produced by rules.
- **Observed quotes are a different question.** Structural liquidity is not measured resting dollars, hidden stop inventory or liquidation pools. If you want to see resting orders, use a separate depth or heatmap tool alongside, and remember that quotes can be pulled.

## Playbook A — Equal highs / equal lows as places to watch

**Setup.** An `EQH` (red) or `EQL` (green) line appears: two confirmed swing highs (or lows) within your tolerance (default 2 ticks).

**What must be true on the chart.**
- The line is still active (`New` or `Tested`); no bar has closed beyond it.
- The higher-timeframe context agrees that the area matters (for example it also sits near a session high or low).
- You can see how many times price has already come back to the line.

**Reference prices.** The line price is the reference. The indicator itself treats the first *close* beyond the line (plus half a tick) as the end of the level.

**How a trader might frame it.** As an area where price has turned at least twice and where the market may react again. A trader might wait for a closed bar that shows the reaction they planned for (for example a sweep arrow at the line, or a footprint showing aggression stalling), define a stop beyond the line or beyond the reacting bar's extreme with a buffer suited to the market, and decide in advance where they will reassess (the next block or line). Entry, size and management belong to the trader's written plan.

**Cancel or stand aside when:** a bar closes beyond the line; price has already tested the line repeatedly without a reaction; the line is one of many crowded together; the tolerance is so loose that "equal" means little for this market; scheduled news is due; or you cannot say why this line matters on the higher timeframe.

## Playbook B — A sweep arrow as a study, not a trigger

**Setup.** A ▼ `Liquidity sweep high (price pattern)` or ▲ `Liquidity sweep low (price pattern)` appears on a closed bar that traded beyond the remembered swing and closed back on the other side.

**What must be true on the chart.**
- You know which swing it refers to: it is the *latest confirmed* swing high or low, which may not be the one you care about.
- The bar closed back inside, which is what the arrow requires. The following bar has not yet closed beyond the arrow bar's extreme.
- The context supports it: the sweep is at a level that matters (an `EQH`/`EQL`, a session extreme, a block), not in the middle of nowhere.

**Reference prices.** The arrow bar's extreme (its high for a ▼, its low for a ▲) is the invalidation reference: a later close beyond it contradicts the idea. The swing price is where price returned to.

**How a trader might frame it.** As one piece of evidence. A trader might require a second piece (aggressive flow reversing in the footprint, a close back inside the previous structure, a higher-timeframe level) before planning anything, and define the stop beyond the arrow bar's extreme in advance.

**Cancel or stand aside when:** the next bar closes beyond the arrow bar's extreme; the market is producing sweeps every few bars (the demo averaged one per 12 bars, so a sweep alone carries little); the arrow is in a tight, noisy range; or the arrow is the only reason you are looking at the trade.

## Playbook C — A displacement break and the structural block behind it

**Setup.** A ▲ or ▼ `Structure break displacement` arrow appears, followed by a shaded block on the next bar: the range of the last opposite-coloured candle before the break.

**What must be true on the chart.**
- The break is genuine by your standards: the close is beyond the swing and the body was large relative to recent ranges (that is what the arrow requires).
- The block is still active (`New` or `Tested`) and price has moved away from it before coming back.
- The direction agrees with, or at least is not fighting, the higher-timeframe context.

**Reference prices.** The block's two edges and its midpoint line. The indicator ends a block when a bar **closes** beyond its far side (below the low of a green block, above the high of a red block). That close is the natural invalidation reference. In the demo example the red block 81,318–81,417 ended on the first close above 81,417.

**How a trader might frame it.** As an area the market has already shown interest in. A trader might wait for price to return to the block and for a closed bar that shows the reaction they planned for, define the stop beyond the block's far side (or beyond the reacting bar's extreme) with a buffer, and plan to reassess at the next reference (an equal level, an earlier block, a session level). They may decide that a second return to the same block is lower quality than the first and say so in the plan.

**Cancel or stand aside when:** a bar closes through the block (it becomes a broken block); the block is old (the ranking penalises age, up to double); the block came from a tiny candle in a noisy range; several blocks overlap, so you cannot say which one you mean; the higher timeframe points the other way; or the block has already been tested several times.

## Playbook D — A broken block as a reference after failure

**Setup.** A block was closed through. The same range is re-drawn as a `Broken structure` zone with the opposite colour, starting on the next bar.

**What must be true on the chart.**
- You saw the close that ended the original block, and price has not yet closed back through the broken block's far side.
- The broken block is still active. Broken blocks end the first time they are closed through again (they are not flipped a second time).

**Reference prices.** The broken block's edges. The idea behind the zone is that a range which failed on one side may now be an area where price reacts from the other side. The indicator makes no claim that it will.

**How a trader might frame it.** As a lower-quality reference than a fresh block: it has already failed once. A trader might use it only as a place to reassess an existing idea, and keep the stop beyond the zone's far edge with the same closed-bar rule the indicator uses.

**Cancel or stand aside when:** any close beyond the broken block's far side (the indicator ends it there); you would be taking a trade only because a zone changed colour; price spends many bars inside the zone; or the sample you are looking at is small. In the demo, 41 of 46 broken blocks were themselves closed through.

## Combining with other context

Liquidity Map answers "where are the swings and what did price do around them?" Pair it with something that answers a different question: where volume traded (a volume profile), where the session's value is (Cival Auction Structure is one option), what aggressive participants did at the level (the footprint), and when events are due. Write down in advance which two or three things must agree for you to act, and which one disagreement cancels the idea.

## Journaling and review

For every trade or observation record: date, market and timeframe; the three structure settings; the object you used (line, arrow, block) with its price and state; the higher-timeframe context; the second piece of evidence you required; the plan you wrote before acting (entry condition, stop, management); what happened; whether you followed the plan. Take a screenshot with the panel expanded. Review weekly: which object types you used, how often a block was closed through before your plan's reassessment point, and whether you traded when the context said stand aside.

## Mistakes to avoid

- Believing the name: this indicator does not see liquidity, orders or stops.
- Loosening **Pivot confirmation bars**, the tick tolerance or the displacement multiple merely to make more objects appear.
- Treating every sweep arrow or block as a trade.
- Assuming a block will hold because it is drawn.
- Using too many zones at once. Lower **Maximum visible zones** until you can name each one.
- Ignoring that tolerance and displacement settings define what the indicator calls "equal" and "large"; changing them changes what you see.
- Comparing charts with different histories or timeframes and expecting the same objects.
- Forgetting the delay: confirmation takes N bars, and an arrow appears only after its bar closes.

## Risk

Trading futures and crypto involves substantial risk of loss and is not suitable for everyone. Indicators describe what happened, not what will happen. Swing highs and lows, sweeps, structure breaks and blocks are descriptions of past price; none of them predicts the next bar. Test any approach on market replay or a simulated account first. Size positions so that a stop-out, or a run of them, is affordable. Past observations do not predict future results. Nothing in this product is financial advice.



## Cival Liquidity Map — Settings Reference

Version 1.0.0. Generated from the compiled ATAS plugin: every value below is the default a fresh instance loads with.

## Cival Liquidity Map

### 00 Chart clarity

| Setting | Default | Allowed |
|---|---|---|
| Compact display (full detail must be off) | on | on / off |
| Full analysis detail | on | on / off |

### Alerts

| Setting | Default | Allowed |
|---|---|---|
| Alerts on closed signal / level touch | off | on / off |
| Alert sound | alert1 | String |

### Appearance

| Setting | Default | Allowed |
|---|---|---|
| Show information panel | on | on / off |
| Panel top offset (pixels) | 50 | 0 – 1500 |
| Panel width (pixels) | 380 | 180 – 600 |
| Compact volume numbers | on | on / off |
| Avoid overlapping labels | on | on / off |
| Minimum bar spacing for signal labels (pixels) | 6 | 0 – 30 |
| Maximum visible zones | 12 | 1 – 100 |
| Show touched levels | off | on / off |
| Show labels | on | on / off |
| Show bubble volume numbers | on | on / off |
| Bubble number color | #FFFFFF | Color |
| Bull color | #3CB371 | Color |
| Bear color | #FF6347 | Color |

### Export

| Setting | Default | Allowed |
|---|---|---|
| CSV export folder (blank disables) | (blank) | String |

### Information panel

| Setting | Default | Allowed |
|---|---|---|
| Automatic panel placement | on | on / off |
| Panel font size | 13 | 10 – 22 |
| Compact panel (title + two lines) | on | on / off |
| Show readiness/status panel | on | on / off |

### Performance

| Setting | Default | Allowed |
|---|---|---|
| Maximum bars back | 10000 | 100 – 100000 |

### Session

| Setting | Default | Allowed |
|---|---|---|
| Session start (minutes after midnight) | 0 | 0 – 1439 |
| Session timezone (blank = chart; otherwise input UTC) | (blank) | String |
| Initial balance minutes | 60 | 1 – 240 |

### Structure

| Setting | Default | Allowed |
|---|---|---|
| Pivot confirmation bars | 3 | 1 – 50 |
| Equal high/low tolerance (ticks) | 2 | 0 – 100 |
| Displacement / prior ATR | 1.5 | 0.1 – 10 |



## Cival Liquidity Map — Platform Compatibility

The ATAS plugin is the reference implementation. Each port computes what its platform's data allows and labels
anything approximate or unavailable inside the indicator itself. The sections below are the READMEs that ship next
to each port's source file (`ports/<platform>/README.md`).

## TradingView (Pine Script v6)

## Cival Liquidity Map for TradingView

Port of the ATAS original **Cival Liquidity Map v1.0.0.0** to Pine Script v6 (`CivalLiquidityMap.pine`).

Maps **price structure** from closed candles: confirmed swing pivots, equal highs / equal lows (EQH / EQL), structural sweep
markers, displacement-confirmed structure breaks with a structural block (order-block style zone), and broken blocks that
flip to the opposite side. Levels remain on the chart until a candle **closes through** them. The original is price-only
(it does not read footprint, volume or the order book), so this is a near-complete port: it works on every TradingView
plan and every symbol with ordinary candles.

Sweeps here are **price patterns** (a pivot's extreme is exceeded and the bar closes back inside). Neither the original nor this
port identifies stop orders or resting liquidity; "liquidity" is a description of where unmitigated highs/lows sit.

### Requirements

| Item | Requirement |
|---|---|
| Platform | TradingView, Pine Script v6 |
| Plan | Any. No footprint or lower-timeframe data is used. |
| Chart type | Standard candles / bars. Heikin Ashi and other synthetic types change the structure being measured. |
| Symbol | Any with a defined tick size (`syminfo.mintick`). |

### Install

1. Open the **Pine Editor**, paste the full contents of `CivalLiquidityMap.pine`, **Save**, then **Add to chart**.
2. Adjust **Pivot confirmation bars**, **Equal high/low tolerance (ticks)** and **Displacement / prior ATR** to the instrument and timeframe.
3. Optional alerts: *Create alert > Condition: Cival Liquidity Map > Any alert() function call*. Off by default.

> Verification note: the script was compiled on TradingView's servers (0 errors, 0 warnings). It has not been observed
> running on a live chart in the build environment.

### Feature matrix

Values: Full / Approximate / Not available / Not ported.

| Feature | ATAS original | This port | Notes |
|---|---|---|---|
| Confirmed pivots (strict: every other bar in the 2n+1 window is lower/higher), n-bar confirmation delay | Yes | Full | Marks and levels appear only after the confirmation bars close; nothing is backdated. |
| Equal highs / lows (`EQH` / `EQL`) within a tick tolerance | Yes | Full | Level strength 2; band is one tick wide centred on the pivot price. |
| Sweep markers (`SWP high/low (price pattern)`) | Yes | Full | High exceeded and close back below, or low exceeded and close back above, against the latest unbroken pivot. |
| Displacement structure break (`BOS displacement`) | Yes | Full | Close beyond the latest pivot with body >= multiple x average true range of the previous 20 closed bars. |
| Structural block (`OB structural`) | Yes | Full | Range of the most recent opposite-colour candle among the previous 10 closed bars; strength 2. |
| Broken-block flip (`BRK structural`) | Yes | Full | When a close passes through a structural block it is invalidated and a flipped zone starts on the next bar. |
| Close-through invalidation of all levels | Yes | Full | Bull-side levels die on a close below, bear-side on a close above. |
| Touch state (`New` / `Tested` / `Invalidated`) | Yes | Full on closed bars | Touched levels stay drawn (grey) until invalidated. The original also marks touches on the forming candle; this port updates at bar close. |
| Zone fill, level line and state label | Yes | Full | Fill opacity scales with strength like the original; labels use the original's expanded wording (`Structure zone`, `Broken structure`, `Liquidity sweep`, `Structure break`). |
| Zone ranking and *Maximum visible zones* | Yes | Full | Same rank formula (distance / strength x age factor). Viewport culling is Not available (Pine cannot see the scrolled window); ranking is across all stored zones. |
| Show touched levels | Yes | Full | Also shows invalidated levels, ending at the invalidating bar. |
| Information panel | Yes | Full content | Table; default *Compact panel* shows title + two lines, as in the original. |
| Alerts on closed signal / level touch | Yes (off) | Full | `alert()` per bar close; off by default. Alert sound is Not ported. |
| Chart-clarity compact mode | Yes | Approximate | Plain-language labels, 3 zones, last 8 marks. The cross-indicator "current chart read" board is Not available. |
| CSV export (signals / zones) | Yes | **Not available** | Pine cannot write files. |
| Share with Cival Decision Panel | Yes | Not ported | No cross-indicator bridge. |
| Panel pixel layout (offset, width, automatic placement) | Yes | Not ported | Replaced by *Panel position*. |
| Label overlap avoidance / minimum bar spacing | Yes | Not ported | Pixel geometry is not readable in Pine. |
| Presets / review mode | None in this indicator | n/a | |

No row in the matrix is Approximate for data reasons: the price logic is identical. The only Approximate row concerns the
presentation-only compact display mode.

### Settings mapping

Names and groups mirror the ATAS display names. Defaults come from `Cival.LiquidityMap.settings.json`.

| Group | Input | Default | Notes |
|---|---|---|---|
| Structure | Pivot confirmation bars | 3 (1-50) | |
| Structure | Equal high/low tolerance (ticks) | 2 (0-100) | A 1e-6 tick allowance absorbs floating-point error. |
| Structure | Displacement / prior ATR | 1.5 (0.1-10) | |
| Appearance | Show information panel | on | |
| Appearance | Maximum visible zones | 12 (1-100) | 3 in compact display. |
| Appearance | Show touched levels | off | |
| Appearance | Show labels | on | Off = arrows only. |
| Appearance | Bull color / Bear color | `#3CB371` / `#FF6347` | |
| Information panel | Panel font size | 13 (10-22) | Approximate mapping to text sizes. |
| Information panel | Compact panel (title + two lines) | on | |
| Performance | Maximum bars back | 10000 | |
| Alerts | Alerts on closed signal / level touch | off | |
| 00 Chart clarity | Compact display (full detail must be off) / Full analysis detail | on / on | |

**Port-only input** (group *Port (TradingView only)*): Panel position.

**Not ported:** Session start / Session timezone / Initial balance minutes (inherited; Liquidity Map does not use them),
Panel top offset / width / automatic placement, Show readiness/status panel (no effect in the original), Compact volume numbers,
Show bubble volume numbers, Bubble number color (no bubbles drawn), Avoid overlapping labels, Minimum bar spacing for signal
labels, CSV export folder, Alert sound, Share with Cival Decision Panel.

### Known differences from ATAS

1. **Bar-close evaluation.** Touch and invalidation are evaluated when a bar closes. ATAS marks a touch as soon as the forming
   candle trades into a level, which can show `Tested` earlier on a live chart. Historical results are the same.
2. **Floating point.** Pine uses floats where ATAS uses `decimal`. Equal-high/low tolerance comparisons carry a 1e-6 tick allowance;
   a tolerance hit that differs by one float ulp could classify differently.
3. **Rendering.** Zones are boxes plus a centre line extended to the right; a one-tick-high band can look thin at low zoom. Only the
   highest-ranked zones are drawn (TradingView caps boxes, lines and labels at 500 each).
4. **No viewport awareness.** The original culls zones outside the visible window; Pine cannot read the scroll position, so the
   ranking runs over every stored zone (capped at 1000, oldest dropped, as in the original).
5. **Zone and marker retention.** Marker labels beyond TradingView's 500-label limit are dropped oldest-first.
6. **History depth.** Only the bars your plan loads are processed; *Maximum bars back* limits it further.
7. **ATR window.** Computed from the 20 closed bars before the signal bar, with the first bar of the window using high-low only
   (exactly as `FlowMath.Atr`), which is slightly different from `ta.atr`.

## NinjaTrader 8 (NinjaScript)

## Cival Liquidity Map — NinjaTrader 8

**Compile on import: NinjaScript Editor → F5.** This file has **not been compiled against NinjaTrader 8** (NT8 was not available where the port was written). It was type-checked at C# 7.3 against hand-written stand-ins for the NinjaScript / SharpDX types, and every NT8 API name was checked against the NinjaTrader 8 help guide, but only your F5 compile proves it against the real platform.

### Summary and requirements

Cival Liquidity Map marks price structure from **closed candles only**: confirmed swing pivots (available only after their right-hand confirmation bars close), equal highs / lows (EQH / EQL), price sweeps (SWP), displacement-confirmed breaks of structure (BOS) with structural order-block zones (OB), broken-block flips (BRK) and close-through invalidation. It is a price-pattern map: **it does not identify stop orders or resting liquidity**, and it makes no profit or accuracy claim. Indicator only: no orders, no network.

Requirements: any NinjaTrader 8 chart (no Order Flow+ needed, no Volumetric bars, no tick replay). `Calculate = OnBarClose`; nothing repaints.

### Install

1. Copy `CivalLiquidityMap.cs` to `Documents\NinjaTrader 8\bin\Custom\Indicators\`.
2. **New → NinjaScript Editor**, press **F5** (Compile).
3. Chart → right-click → **Indicators** → **Cival Liquidity Map**.

### How the levels behave

- **EQH / EQL:** a new confirmed pivot high (low) within *Equal high/low tolerance* ticks of the previous confirmed one creates a level at the new pivot, available one bar after confirmation.
- **SWP:** a closed bar that trades beyond the latest confirmed pivot and closes back inside it.
- **BOS + OB:** a close beyond the latest confirmed pivot with a real body of at least *Displacement / prior ATR* × the 20-bar average true range of the preceding bars. The latest opposite-colour candle within the preceding 10 bars becomes the structural block; the broken pivot is then cleared.
- **BRK:** when a block's close-through invalidation happens, a flipped (opposite-side) broken-block zone starts on the next bar.
- **Invalidation:** a block / level is invalidated when a bar *closes* through it (below a bullish zone, above a bearish one). Touched levels stay visible (grey) until invalidated.

### Feature matrix

| Feature | ATAS original | This port | Notes |
|---|---|---|---|
| Confirmed pivots (2n+1 window, strict extremes, n-bar delay) | Yes | Full | Pivots exist only after confirmation. |
| Equal highs / lows with tick tolerance | Yes | Full | |
| Price sweeps (SWP high / low) | Yes | Full | Price pattern only; stops are not identified. |
| BOS displacement vs prior ATR | Yes | Full | Simple average of true ranges of the previous (up to) 20 bars. |
| Structural order-block zones | Yes | Full | Last opposite-colour candle of the previous 10 bars. |
| Broken-block (BRK) flips | Yes | Full | |
| Close-through invalidation | Yes | Full | |
| Touch ("Tested") status | Yes | Approximate | Original also tests on the forming candle; this port tests on closed bars only. |
| Zone ranking, Maximum visible zones, Show touched levels | Yes | Full | Same rank formula (distance ÷ strength × age factor). |
| Markers + labels with overlap avoidance | Yes | Full | |
| Compact display / Full analysis detail | Yes | Approximate | Full detail expands abbreviations as the original does; compact shows ≤ 3 zones, ≤ 8 recent marks and a one-line read in place of the shared "current chart read" board. |
| Information panel | Yes | Approximate | Drawn by the indicator; no cross-indicator auto-arrange. |
| CSV export (`LiquidityMap-signals.csv`, `LiquidityMap-zones.csv`) | Yes | Full | Same columns. |
| Alerts (off by default) | Yes | Approximate | NT `Alert()`, real-time only; sound name maps to `<NT install>\sounds\<name>.wav`. |
| Rebuild when provider revises processed history | Yes | Not available | Reload the data to recalculate. |
| Share with Cival Decision Panel | Yes (ATAS-only bridge) | Not ported | Not part of the shipped settings reference. |
| Review mode / presets | None in the original | — | — |

### Settings mapping

| ATAS group / name | NT8 property | Default | Notes |
|---|---|---|---|
| Structure / Pivot confirmation bars | `PivotStrength` | 3 (1–50) | |
| Structure / Equal high/low tolerance (ticks) | `EqualToleranceTicks` | 2 (0–100) | |
| Structure / Displacement / prior ATR | `ImpulseAtr` | 1.5 (0.1–10) | `double` |
| Appearance / Show information panel, Panel top offset, Panel width | `ShowPanel`, `PanelTop`, `PanelWidth` | true, 50, 380 | |
| Appearance / Avoid overlapping labels, Minimum bar spacing, Maximum visible zones, Show touched levels, Show labels | `AvoidLabelOverlap`, `MinimumLabelBarSpacing`, `MaxVisibleZones`, `ShowTouched`, `ShowLabels` | true, 6, 12, false, true | |
| Appearance / Bull color, Bear color | `BullColor`, `BearColor` | MediumSeaGreen, Tomato | WPF `Brush` |
| Information panel / Panel font size, Compact panel | `PanelFontSize`, `CompactPanel` | 13, true | |
| Export / CSV export folder (blank disables) | `ExportFolder` | blank | |
| Performance / Maximum bars back | `MaxBarsBack` | 10000 | |
| Alerts / Alerts on closed signal / level touch, Alert sound | `EnableAlerts`, `AlertSound` | false, `alert1` | |
| 00 Chart clarity / Compact display, Full analysis detail | `CleanChart`, `FullAnalysisDetail` | true, true | |

**Not ported (and why)**

| ATAS setting | Reason |
|---|---|
| Session start / Session timezone / Initial balance minutes | Have no effect in the ATAS Liquidity Map (the session value is stored and never read); omitted rather than shown as dead controls. |
| Automatic panel placement | Needs ATAS's shared panel registry. Give each Cival panel a different *Panel top offset* in NT8. |
| Show readiness/status panel | Has no effect in the ATAS analytics indicators. |
| Compact volume numbers, Show bubble volume numbers, Bubble number color | This indicator draws no volume bubbles. |

### Known differences from the ATAS original

1. **Closed-bar touch tests.** ATAS also evaluates "touched" on the forming candle; NinjaTrader's `OnBarClose` model only sees closed bars, so "Tested" (and the touch alert) appears when the touching bar closes. Invalidation and all structure logic were already closed-bar in the original.
2. **Panels.** Drawn with SharpDX at the *Panel top offset*; there is no cross-indicator auto-arrangement.
3. **Numeric type.** Prices are doubles with a 1e-6 tick tolerance on equality-sensitive comparisons; ATAS uses decimals. A close exactly on a level's edge can differ in rare cases.
4. **Maximum bars back.** Only the latest N bars are processed, the same intent as the original; the retained working set is the last 1000 closed bars.
5. **Time columns in CSV.** `time` is the derived bar open (exact for Minute / Second bars, otherwise the previous bar's stamp) and `available_time` is the bar's close stamp, both in NinjaTrader chart time.

SWP, BOS, OB and BRK are descriptions of observed price behaviour, not identification of stop orders, and not calibrated probabilities. No profitability is claimed.
