For the Geeks
This page is for readers who want to understand the participation model and the four structure features well enough to defend the pane's readings out loud. It is not a code walkthrough and it will not hand you the rec...
Written By Axiom Admin
Last updated 22 days ago
For the Geeks
This page is for readers who want to understand the participation model and the four structure features well enough to defend the pane's readings out loud. It is not a code walkthrough and it will not hand you the recipe to reconstruct the estimator. The goal is mental-model altitude β enough to know what the tool is doing and why, enough to calibrate the trust you extend to each layer, and enough that when a reading surprises you, you can locate the surprise rather than blame the tool.
If you have not already read MTF and Repainting, that page is the honest companion to this one. The estimator's behavior is a timing model as much as it is a math model, and the two read best together.
The participation model
Why it exists
Most retail data feeds give you OHLCV β open, high, low, close, volume β per bar, and nothing else. True bid/ask delta is not on the feed. A lot of public CVD implementations shortcut around this by declaring that a close above the open is buying volume and a close below is selling volume, then summing. That shortcut looks reasonable on clearly directional bars and quietly misreads every bar where it matters most β balanced bars, rejection bars, indecisive bars where the close sits in the middle of a wide range and the real participation was somewhere in the wicks.
The participation model is Axiom's own estimator built to handle those cases honestly. It reads body direction, close location, and wick asymmetry as three separate inputs, classifies each bar into a small set of participation states, carries state forward across indecisive bars rather than flipping on every neutral print, and weights each bar's signed contribution by bar volume. The output is a defensible per-bar delta estimate that the slot then accumulates across its window and normalizes into the 0-to-100 pane.
The inputs the model reads
On each bar (at the lower-timeframe precision the slot is running, or at the slot-bar level when intrabar data is unavailable), the model considers:
Body direction. Is the close above or below the open? By how much relative to the bar's range?
Close location. Where inside the bar's range did the close settle? A close near the high of a bar is different evidence from a close near the middle, even if the body is identical.
Wick asymmetry. Is the upper wick long and the lower wick short? The other way around? Roughly balanced? A wick-heavy rejection says something specific that the body alone does not capture.
Carry-forward state. What was the model's participation state on the prior bar? On indecisive bars, the model does not flip to neutral; it carries some fraction of the prior state forward.
The two user-facing controls that shape the model are Pressure Sensitivity and Wick Weight.
Pressure Sensitivity(0.25 to 4.0, default 1.50) scales how decisively the model commits to a classification. Higher sensitivity makes the model more willing to treat a bar as a clear participation event; lower sensitivity makes the model more forgiving, letting more bars fall into the indecisive carry-forward path.Wick Weight(0.0 to 0.50, default 0.20) controls how much the wick-asymmetry input contributes to the bar's overall intent score. At 0.0, wicks are ignored and the read is driven by body and close location. At 0.50, wicks are given substantial influence.
These are the dials. The pack does not publish the internal coefficients they map to, the classifier's threshold values, or the carry magnitude on indecisive bars. Those details stay inside the estimator by design. What the user needs to know β and what is teachable at this altitude β is the shape of what the knobs change, and the shape is: sensitivity changes decisiveness; wick weight changes how much wick evidence matters.
Bucketing and carry
Each bar's inputs resolve into a classification outcome in one of roughly five categories: clearly up, weakly up, clearly down, weakly down, or indecisive. Clearly up and clearly down commit participation at full magnitude in their direction. Weakly up and weakly down commit at a smaller magnitude. Indecisive bars do not commit fresh participation in either direction; instead, they carry a partial fraction of the prior bar's participation state forward.
The carry-forward step is the quiet core of what makes the model defensible. A naive "close above open" shortcut flips every indecisive bar to neutral, then back, then to neutral, producing a jittery line that is rarely reading the market's actual pressure continuity. The carry step treats pressure as something that does not vanish on a single inside bar; it smooths across genuinely ambiguous prints without ignoring them. That behavior is the reason the slot line looks like a considered read rather than a stutter.
The flip side of the carry-forward design is also worth knowing. On a long stretch of indecisive bars, the carried state slowly fades β the model does not pretend the prior conviction is still fresh evidence. If genuine ambiguity persists, the slot line drifts toward neutral. If real participation arrives in either direction, the model commits to it; if real participation does not arrive, the slot lets the conviction fade rather than lock it in. That is the design center: hold pressure across uncertainty, do not pretend ambiguity does not happen, do not strand the line in a stale state that later evidence has not earned.
Normalization into 0-to-100
After participation is summed into a running cumulative within the window (Session reset or Rolling lookback, per the slot's mode), the cumulative is mapped to 0-to-100 against the cumulative's own observed high and low inside that window. The mapping is what lets multiple slots β on different timeframes, on different symbols, potentially on different sessions β sit on the same pane and be compared without rescale arguments in your head.
Boundedness has a tradeoff worth naming explicitly: a slot pinned at 0 or 100 for a long stretch may be reading one-sided pressure in a strong trend, or it may be reading a quiet window where the cumulative's observed high and low are very close together and every micro-move is being amplified by the normalization. The bounded line does not distinguish between those cases. Cross-checking with the instrument's absolute price behavior, or with the slot's own behavior on a longer window, is the way to tell them apart.
How to probe the model
Three moves you can make on any chart to build calibration for what the model is doing:
Compare a flat balanced bar, a wick-led rejection bar, and a strong-body bar. The slot line should respond differently to each. A flat balanced bar should be indecisive and let the prior state carry. A wick-led rejection at
Wick Weight = 0.20should show meaningful wick influence; atWick Weight = 0.0, the same bar should look like a body-and-close read.Push
Pressure Sensitivityfrom 0.25 to 4.0 on one slot and watch the same chart window. At 0.25 the line is slower, smoother, more willing to wait. At 4.0 it is faster and more staccato, more willing to snap between states on neutral-to-weak bars.Compare On Bar Close ON versus OFF during a live session. This is not part of the model itself, but it is part of how the model's output reaches you. ON gives you the settled output of completed slot bars. OFF gives you the live read that can repaint. Both are the model's output; one is settled and one is live.
The blend
The blend is a weight-normalized mean of the enabled slots' CVD and signal values. Weights are renormalized at runtime so they always sum to 1.0 across the enabled set; the absolute values you type are a ratio, not a fixed share.
A slot that is enabled but hidden (Hide Plot ON) still contributes to the blend. A slot with weight 0.0 does not steer the blend but still fires its own per-slot alerts. A slot whose value is na on a given bar β for example on the first bars after load or when an optional ticker/timeframe has no returned value β is skipped for that bar. A session reset restarts the window, but it does not automatically make the slot silent.
An optional Enable Smoothing pass on top of the blend applies one more MA filter to both the blended CVD line and the blended signal line. This is master smoothing. Its tradeoff is a familiar one: less noise, more lag. Defaults leave it off so you can see the blend's raw character before you decide to calm it down.
The four structure features
All four structure features read from the blended CVD line. Everything they describe is a statement about the blend's own behavior, not about price.
Keltner envelope
The envelope is derived from the blend itself. The basis is a smoothed midpoint of the blend, computed with the MA family you choose (default EMA) and the length you set (default 20). The range component is a smoothed one-bar absolute change of the blend β how much the blend has typically moved from bar to bar recently β smoothed over KC Length (default 20). The upper envelope line is the basis plus KC Mult times the smoothed range (default 2.0). The lower line is the basis minus the same. Both are clamped to 0-to-100 so they stay inside the pane.
The construction is deliberately Keltner-like: a moving basis plus and minus a multiple of an ATR-equivalent. The difference from a price Keltner is only that the source is the blended CVD line, not price. Everything that makes Keltner useful on price β the way it expands during volatility and compresses during calm β applies to the blend's own one-bar-change behavior in exactly the same way.
What the envelope is telling you: how far the blend currently sits from where it has been smoothing toward recently, scaled by how much the blend has typically been moving. A touch of the upper line is stretch. Stretch is not exhaustion. The blend can ride the upper line for many bars under sustained one-sided pressure, and the envelope's construction does not know or care whether price is keeping up.
Donchian channel
The Donchian channel marks the highest and lowest of the blended CVD line over the channel length (default 20). The upper stepline is the blend's highest value across the last 20 bars; the lower stepline is the lowest. Both are clamped to 0-to-100.
Construction is standard Donchian: max and min of the source over a lookback. The source here is the blended CVD, not price.
One thing that behaves slightly differently from a price Donchian is worth naming. A 0-to-100 bounded line has natural ceilings and floors. When the blend sits near 100, the upper stepline necessarily sits near 100 as well; when the blend sits near 0, the lower stepline necessarily sits near 0. That boundedness means "pushing a new high in the channel" means something slightly different near the extremes of the pane than it does in the middle. Near the middle, a new high is a genuine new high for the blend by its own recent history. Near 100, the upper stepline is pinned by the pane's ceiling as much as by the blend's behavior. Read the channel in context of where the blend sits in the pane, not as if it were operating on an unbounded axis.
BBWP (Bollinger Band Width Percentile)
BBWP is a percentile rank of the blended CVD line's own Bollinger band width, computed over a rolling history.
At each bar, the model computes a Bollinger basis on the blend (length Length, default 20, MA family Basis Type, default SMA) and a standard deviation on the blend over the same length. From those, it computes a normalized band-width measure β a dimensionless scalar that summarizes how wide the blend's Bollinger bands are at this bar. This width value is then compared against the last Lookback width values (default 252) and ranked as a percentile. Until that full lookback of valid width values exists, the module returns no valid percentile. Once it is populated, a BBWP value of 20 at a bar means the blend's current band width is in the bottom 20th percentile of its recent history. A BBWP value of 90 means it is in the top 90th percentile.
The column you see is the percentile itself. The column hue switches across the user-set threshold (default 50).
Two things to hold in mind:
The percentile is computed on the blend's own width history, not price's. BBWP on STR is a blend-width regime measure, not a price-volatility measure. A low BBWP says the blend's width has been compressed by its own recent standards. It says nothing about whether price has been compressed.
Classical Bollinger uses an SMA basis with matched length on the basis and the standard deviation. The BBWP construction here matches that convention. The
Lengthparameter controls both.
Divergence
The divergence module watches for strict pivots on chart price and compares them to the blended CVD line at the same offset. Pivot strength is Pivot Len (default 20), used on both the left and the right side β so a pivot low confirms when there are 20 bars on its left with higher lows and 20 bars on its right with higher lows. Pivot high is the mirror.
When a new price pivot confirms, the module reads the blended CVD value at the same offset and compares it to the blended CVD value at the offset of the previous confirmed pivot of the same direction. A bullish divergence fires when the current price pivot low is lower than the previous price pivot low and the blended CVD at the current offset is higher than the blended CVD at the previous offset. Bearish is the mirror.
Several mechanical facts about this:
The module can only flip true on a confirmed bar. The evaluation runs inside
barstate.isconfirmed. There is no mid-bar divergence.Strict pivots require
Pivot Lenbars to the right of the pivot before they confirm. The confirmation lag is not a flaw; it is the cost of a strict pivot definition.The divergence is a comparison of geometry at pivot offsets. It makes no statement about what price does next. The geometry is the whole claim.
Plot On Pivotcontrols where the marker visually appears. It does not control when the alert fires. In both modes, the alert fires on the confirmation bar. See MTF and Repainting for the full treatment.
Why all four features share a source
It is easy, when four features are drawing on the same pane, to treat them as four reads. They are not. They are four descriptions of one line β the blended CVD β from four different construction angles.
When Keltner says "stretched" and Donchian says "new high" and BBWP says "expanded" and a divergence triangle prints on the same bar, you are not seeing four independent readings agreeing. You are seeing one blended line agreeing with itself four ways. The coherence of the reading is real; the redundancy of the evidence is also real. If you want independent corroboration, look at the slot stack underneath the blend β the slots are separate computations on separate timeframes β or at price itself, or at a correlated instrument in an Optional Ticker slot.
This matters operationally. A reader who treats the four features as independent will over-weight their agreement. A reader who holds the shared-source fact in mind will read the pane as: "the blend is doing this; here are four ways to describe the doing." That is a more honest read, and it is closer to how the tool is constructed.
The safe-to-disclose boundary
This page describes the estimator and the structure features at mental-model altitude. It does not publish:
The classifier's specific threshold values.
The body, close-location, and wick weight coefficients that combine into each bar's intent score.
The carry magnitude on indecisive bars.
The precise mapping from
Pressure Sensitivityto the classifier's thresholds and carry behavior.The BBWP width formula's exact constants.
Any pseudocode that would let a reader reconstruct the estimator or the structure features from this page alone.
The boundary exists because the estimator is Axiom's work, and the work is valuable enough to protect. A user can calibrate the tool, defend its reads, and understand what the knobs change without those details. If this page were a recipe, it would be useful exactly once, to someone who wanted to copy it. As a mental-model walkthrough, it is useful for as long as you use the tool β and that is the deal the page is designed around. We tell you enough to read the pane with judgement; we do not tell you enough to rebuild the engine.
If a question about the model would only matter to a reader trying to clone the estimator, this page does not answer it. If a question would help a reader trust the model and read it more honestly, this page tries to. The line between the two is not always sharp, and we err on the side of trust over disclosure when the question is borderline.
A short diagnostic checklist
If the pane is surprising you, run through this before changing settings:
Is the slot reading what you think it is reading? Check
Enable,Hide Plot,TimeFrame,Lower TF Precision,Optional Ticker. Hidden slots still contribute to the blend. A slot on a different symbol will behave differently from the chart.Is the slot on the fallback? Scroll back to confirm intrabar history is available for the slot's precision. If you are on the fallback, the slot's character is different from its recent behavior.
Is the session model what you think? Session resets land at the window anchor; rolling windows do not. Check the slot's mode.
Is the blend weighted the way you intended? Weights renormalize across enabled slots. A slot at weight 0.0 does not steer; a slot at weight 100 alongside three slots at weight 33.3 heavily dominates.
Is master smoothing on? If so, the blend you are reading is one more MA pass past the raw weighted mean of the slots.
Is the divergence you are seeing the geometry you think? Identify the two confirmed pivots and the two blended CVD values at the same offsets. Confirm the inequalities. A misidentified pivot at the edge of the chart is a common confusion.
Is
Plot On Pivotdoing what you expect? OFF: marker on confirmation bar. ON: marker on pivot bar, alert still on confirmation bar. If in doubt, toggle it and watch the marker move.
Where to go next
For the full timing and repaint treatment of the estimator's output, MTF and Repainting.
For the honest limits that this page's altitude does not remove, Limitations and Trust Boundaries.
For the visual reads that these constructions produce on the pane, Visuals and Logic.
For the settings that expose the
Pressure SensitivityandWick Weightcontrols, Settings.