Cival Auction Structure — Reading the Indicator

Cival Auction Structure builds a TPO (time-price opportunity) profile for each session. A TPO profile answers "how long did the market spend at each price?", not "how much traded?". The unit is the time bracket (default 30 minutes): a price row's count is the number of different brackets in which that row was visited. Two visits inside the same bracket count once; a huge volume in one bracket still counts once. For volume at price use a volume profile; the two are complementary.

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 Where Meaning
TPO histogram (Show TPO histogram, default on) along the right edge of the chart, for the developing session One thin horizontal bar per price row. Its length is the row's bracket count (100 px for the busiest row, others in proportion, at least 1 px). Gold = visited by exactly one bracket (a single print); steel blue = two or more.
Completed-session lines start at the first bar of the session after the one they describe, run to the right edge Three lines per completed session: TPOC (time value center), TVAL (value area low), TVAH (value area high), each labelled with the date of the session start, e.g. TPOC 10-18.
▲ / ▼ with FA prior TPO low / FA prior TPO high at the bar's low (▲) or high (▼) Failed-auction mark (section 6).
Information panel top-left, 50 px below the top edge Eight lines about the developing session (section 7).

Colors: lines and arrows use the Bull color (default green #3CB371) or Bear color (default red #FF6347). TVAL is always green and TVAH always red. TPOC is green if the prior session's TPOC is below the new session's first open and red if it is above. The line is a 1-tick-thick band with a faint fill (the TPOC fill is twice as opaque) and a 1-pixel line at the exact price. A level that has been tested turns grey.

Labels are drawn above the line in the form <name> <MM-dd> <state>; by default ATAS shows the names spelled out: TPOC as Time value center, TVAL as Time value low, TVAH as Time value high. The same expansion applies to the panel text. Nothing is drawn for the developing session's TPOC or value area except the histogram and the panel; its lines only appear after the session ends.

2. The session

The session is a daily window: it starts Session start (minutes after midnight) (default 0) after midnight and lasts 24 hours.

Initial balance minutes appears in the settings list but this indicator does not use it.

3. How the profile is computed

  1. Brackets. For each closed bar, bracket = floor((bar open time − session start) ÷ TPO bracket minutes). Brackets are measured from the session start, not from the clock hour.
  2. Rows. The price grid is tick size × TPO row size (ticks) (default 4 ticks). A price belongs to the row floor(price ÷ row) × row; the row is identified by its lower edge. If a session's range would need more than 2,000 rows, the row size is doubled (repeatedly) and the existing visit sets are merged by union, so no bracket is ever counted twice. The panel's Effective row line shows the row size actually in use.
  3. Visited prices. With footprint data, every price that traded volume in the bar (grouped into rows) records the bar's bracket. If a bar has no footprint rows, every row between its low and its high records it, and the profile is marked APPROXIMATE.
  4. Count of a row = number of distinct brackets that visited it. Ten candles that all visit a row inside one bracket, plus one candle that visits it in a second bracket, give that row a count of 2, not 11. Footprint volume only decides which rows a bar visited; it is grouped into rows, never added to the count.
  5. TPOC (time value center) = the row with the highest count; ties go to the lowest price.
  6. Value area (TVAL–TVAH). 70% of the total of all row counts. Starting at the TPOC row, the area grows one row at a time towards the neighbour with the larger count (both when they are equal) until it holds at least 70%. - The edges shown are placed half a row from the row prices: TVAH is at the middle of the highest value-area row and TVAL half a row below the bottom of the lowest value-area row. With 4-dollar rows that is a 2-dollar offset. Treat the two lines as placed within about one row of the true value-area edge.
  7. Single prints = rows with a count of exactly 1 (anywhere in the profile, not just at the edges).
  8. Shape candidate, tested in this order (later rules override earlier ones):
Rule Label
TPOC sits above 70% of the way up the profile's range P candidate
TPOC sits below 30% b candidate
otherwise D/balanced candidate
At least 10 rows, at least 5 brackets used, and at least 80% of rows have a count of 2 or less Trend / low-overlap candidate
Two peaks (each at least half the busiest count, at least three rows apart) with a valley between them no higher than half of the lower peak B / double-distribution candidate
  1. Auction edges (low and high separately): if the extreme row has a count of 2 or more, Poor low candidate / Poor high candidate. If the extreme row has a count of 1 and the next row inward is adjacent and also has a count of 1 (a tail of at least two single rows), Excess low candidate / Excess high candidate. Otherwise Edge unresolved.

All shape and edge labels are rule-based candidates that change as the session develops; they are not statements about who is buying or selling.

4. Lifecycle of a session level

Stage When What you see
Developing during the session Panel and histogram only.
Published on the first closed bar of the next session, only if the finished profile was complete and exact (not PARTIAL, not APPROXIMATE) Three lines (TPOC, TVAL, TVAH) begin at the first bar of the next session.
New no candle has reached the level yet Coloured line, label <name> <MM-dd> New.
Tested the high-low range of a bar (including the bar still forming) overlaps the level's 1-tick band By default the level disappears. With Show touched levels on, it is drawn grey up to that bar with its label removed.

There is no "invalidated" state for these levels: a Tested level simply stops mattering to the indicator.

Live versus recalculated. When history is calculated (on loading or after any recalculation) a level is tested against its own first bar as well. In live trading the first bar of the new session is not tested at the moment the level is created, only the bars after it. A level that the first bar's range covered can therefore show New live and Tested after a reload.

Which levels are drawn: the nearest Maximum visible zones (default 12), ranked by distance from the last price divided by strength (TPOC counts as strength 2, the others 1), with a mild penalty for age (up to double at 1,000 bars old). Three levels per session means about four sessions of levels at the default. Levels that are not drawn still exist: they are still tracked (tested) and still written to the CSV zones file. Maximum visible zones only limits what is drawn.

5. Data-quality flags

Flag (panel text) Triggered when Effect
APPROXIMATE: candle range fallback a bar had no footprint rows (candle range used), or a bar is long enough to span more than one bracket (it is counted only in the bracket of its open) The flag stays for the rest of the session. The finished profile publishes no levels and cannot serve as the reference for failed-auction marks.
PARTIAL: session starts before history the first bar processed opens after the session start; a bar is missing inside the session; a bar's footprint volume differs from its candle volume by more than 1%; or the row budget was exceeded Same effect as above. The wording is generic: the cause may be a gap, not only the start of history.
COARSE: bar spans multiple brackets the bar that was just processed is longer than TPO bracket minutes Shown instead of the PARTIAL line while it applies.

If none applies the last two panel lines read Visited prices from real footprint rows and Bracket counts; not volume counts.

6. Failed-auction marks

For every closed bar of a session, the indicator compares it with the previous session's finished profile, if that profile was complete and exact.

The mark is created when the bar closes. Several marks can appear in one session. Because top is the bottom edge of the highest row, a bar can be marked while its high is still below the previous session's exact high, by less than one row. A mark records that one bar probed beyond the prior extreme and closed back inside; it says nothing about what happens next.

7. The panel, line by line

The panel has eight lines. By default only the first three are visible; untick Compact panel (title + two lines) (group Information panel) to see all of them.

# Text (example from the demo, final bar) Meaning
1 Cival Auction Structure — developing Title (gold).
2 TPOC 82768 VA 82694–83906 Time value center and value area of the developing session (price units).
3 B / double-distribution candidate; single rows 54 Shape candidate (section 3) and the number of single-print rows.
4 Low visits 1 / high visits 1 Bracket count of the lowest and the highest row.
5 Edge unresolved / Excess high candidate Low-edge and high-edge classification.
6 Effective row 4; auto grouping Row size in price units actually used. The words "auto grouping" are always printed; compare the number with your setting to see whether rows were widened.
7 Visited prices from real footprint rows Or APPROXIMATE: candle range fallback.
8 Bracket counts; not volume counts Or PARTIAL: session starts before history, or COARSE: bar spans multiple brackets.

If no profile can be built, the panel shows No eligible TPO profile; check rows and tick size (or Tick size unavailable). If a CSV problem occurs, an extra line with the message is inserted as line 2.

8. 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 levels and 8 recent signals (last 21 bars), short names (Time value center, Value area low, Value area high, High rejected (time profile)), the large panel is replaced by a compact board in the top-right corner (CIVAL / CURRENT CHART READ) with one line such as Time profile: Value 82694–83906; center 82768, and Show touched levels is ignored.

9. Alerts and CSV export

10. Settings that matter, and settings that do nothing here

Setting Effect
TPO row size (ticks), default 4 Row height = ticks × tick size.
TPO bracket minutes, default 30 Bracket length.
Show TPO histogram, default on The right-edge histogram.
Session start (minutes after midnight), Session timezone The session cut (section 2). For example a start of 570 means 09:30.
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 visible zones, Show touched levels, Show labels, Minimum bar spacing for signal labels, Avoid overlapping labels, Bull color, Bear color Which lines and marks are drawn, and their colors.
Maximum bars back, default 10,000 Only the latest N bars are processed.
No effect here: Initial balance minutes, Show readiness/status panel, Show bubble volume numbers, Bubble number color, Compact volume numbers Not used by this indicator.

Changing a calculation setting (row size, bracket minutes, session settings, Maximum bars back) recalculates the whole history. The indicator also recalculates when ATAS revises an already-closed bar. Source corrections, a different history prefix (loading more or fewer bars, which changes which sessions are complete), changes to any calculation setting and a change of timeframe can all legitimately change the results. Panning, zooming or moving the cursor changes only what is drawn, never the profile or the closed-bar marks. Hiding the panel, the histogram or the labels does not remove the underlying levels, marks or CSV rows.

11. Worked example — real numbers from the demo

Source. The store demo: Hyperliquid BTC perpetual, 15-minute bars (tick size 1.0) built from trades recorded by the Cival order-flow recorder, 17–21 October 2026, 459 closed bars. Settings: TPO row size (ticks) 4 (so 4-dollar rows), TPO bracket minutes 30, session start at midnight in chart time. Raw output: demo\out\auction-structure.json; profile data: demo\web\cival-auction-structure.json.

One session. The 18 October session (96 bars, 48 half-hour brackets) built this profile:

Item Value
TPOC 81,700, the busiest row, visited in 14 of the day's 48 brackets
Value area (as shown) 81,194 – 82,222 (the value-area rows run from 81,196 to 82,220; section 3)
Range of rows 80,644 to 82,268 (407 rows of 4 dollars)
Single-print rows 38
Shape D/balanced candidate (the TPOC sat at 65% of the range, between the 30% and 70% limits)
Edges Excess low candidate / Excess high candidate: at each end the extreme row and the next row inward were visited by one bracket only

Levels carried forward. Because that profile was complete and used real footprint rows, three lines were published on the first bar of 19 October: TPOC 10-18 (81,700), TVAL 10-18 (81,194) and TVAH 10-18 (82,222). The TPOC line is green because the new session opened above it. In the recalculated history TVAH 10-18 is already Tested on that same first bar, because the bar's range reached 82,222, so it is not drawn by default.

Failed-auction marks. The 18 October profile's highest row is 82,268. During 19 October six bars (one per mark, at their highs 82,389; 82,288; 82,419; 82,310; 82,378; 82,275) exceeded 82,268 and closed back below it. Each got a FA prior TPO high mark. The whole demo sample produced 30 failed-auction marks, 12 session levels (4 completed sessions × 3) and 5 profiled sessions (the last still developing).

What happened next, as an example of the limits. The 19 October profile itself came out as b candidate: TPOC 82,008, value area 81,858–82,606, 24 single rows, with rows reaching 83,140. Value had moved up, and price traded well above the level where the six marks were placed. The marks did not call the top. They recorded that individual bars closed back under the prior high.

The last panel of the sample (the still-developing 21 October session) is quoted in section 7.

12. What the indicator can and cannot know

It can It cannot
Count how many brackets visited each price row, from real footprint rows when available Tell you who was buying or selling, or whether positions were opened or closed
Show where the market spent its time and where it moved through quickly Reconstruct the path inside a bar: a long bar is counted in one bracket only (and flagged)
Publish prior-session levels only from complete, exact profiles Make a thin or early-session profile meaningful: labels change as the session develops
Mark bars that probed beyond a prior profile's extreme row and closed back inside Say that a mark leads to rotation, or that a level will hold
Run on any session definition you give it Know your exchange's real session: crypto and 24-hour markets use your convention
Say "no profile" or "no levels" when the data does not qualify Treat that as a measured zero: unavailable data is not evidence that nothing happened