For the Geeks
This page explains the two distinctive mechanisms that make the oscillator work the way it does: the wick-aware participation model and the piecewise zero-anchored normalization. Both are described in enough detail th...
Written By Axiom Admin
Last updated About 1 month ago
For the Geeks
This page explains the two distinctive mechanisms that make the oscillator work the way it does: the wick-aware participation model and the piecewise zero-anchored normalization. Both are described in enough detail that you can reason about the oscillator's behavior in specific situations β why it reacts differently to long-wick bars, why it stays bounded, why Pressure Sensitivity and Wick Weight change what they change. Neither is described with enough detail to reconstruct the implementation. That boundary is intentional.
If you use the oscillator purely as a visual context tool and do not care about the machinery underneath, you do not need this page. If you want to understand why the oscillator behaves the way it does β especially when the behavior feels unintuitive β this is where that understanding lives.
The participation model
Most CVD indicators classify volume with a binary rule: if the bar closed above its open, all the volume counts as buying; if below, selling. This is simple and fast, but it throws away almost everything the candle tells you about how the bar actually traded. A bar with a tiny body and enormous wicks gets the same classification as a bar with a strong body and no wicks. A bar that closed one tick above its open in the middle of a wide range counts as fully bullish β even though the close location tells a more ambiguous story.
The participation model in this oscillator takes a different approach. Instead of a binary split, it classifies each sub-bar into one of five participation buckets that reflect how much of the bar's volume should be attributed to directional commitment.
The five buckets
Each sub-bar (fetched at the Lower TF Precision resolution) gets classified into one of these five buckets. That bar's volume is multiplied by its participation level to produce a directional delta contribution. The contributions from all sub-bars within a slot's timeframe bar are summed to produce that bar's net estimated delta.
What the model looks at
For each sub-bar, the model computes a directional intent score that blends three components:
Body direction β which side of the open did the bar close on, and how far? A large bullish body contributes more directional intent than a small one.
Close location β where did the bar close within its high-low range? A close near the high suggests more bullish commitment than a close in the middle of the range, even if the body is bullish. A close near the low suggests bearish commitment.
Wick imbalance β is the upper wick significantly longer than the lower wick (suggesting rejection of higher prices), or the reverse? Wick imbalance adds a directional bias that can reinforce or counteract the body direction.
These three components are combined into a single intent score, which is then compared against bucket thresholds to determine the participation classification.
What Pressure Sensitivity changes
Pressure Sensitivity shifts the bucket thresholds. At higher sensitivity values, the thresholds tighten β meaning a bar needs less directional evidence to reach a strong bucket, and ambiguous bars carry more of the prior direction. The model becomes more decisive. At lower sensitivity values, the thresholds widen β the model requires more convincing evidence before committing to a strong bucket, and ambiguous bars carry less prior bias.
The practical effect is visible on-chart. At low sensitivity (0.50-0.75), the oscillator is calm. It takes strong candle structure to move the needle, and ambiguous bars contribute very little directional volume. The oscillator may underweight genuine moves on instruments with messy candle structure. At high sensitivity (2.5-4.0), the oscillator is decisive. Nearly every bar gets classified as directional, and the oscillator swings further. On choppy instruments, this means it over-classifies noise.
Why the carry bucket matters: In real markets, many bars are genuinely ambiguous β dojis, spinning tops, narrow-range bars. A binary model would force each of these into either bullish or selling. The carry bucket lets the model say "I cannot tell" and carry forward a scaled version of the prior direction. This creates short-term momentum in the classification: a run of bullish bars followed by a doji will tend to classify the doji as weakly bullish (carry from the prior bullish direction) rather than forcing a neutral or random assignment.
The carry scale increases with Pressure Sensitivity β higher sensitivity means ambiguous bars inherit more of the prior bias. This is why the oscillator becomes more persistent and trend-following at higher sensitivity settings. It is also why high sensitivity can mislead during a genuine transition. If the market shifts from a bullish run into a series of ambiguous, indecisive bars, the carry bucket keeps attributing volume to the bullish side β the classification has not yet caught up to the fact that the pressure has faded. The oscillator stays bullish longer than the candle structure alone would suggest, because the prior bias is doing the work. At lower sensitivity, the carry scaling is weaker, so the same ambiguous bars contribute less directional volume and the oscillator responds more quickly to the disappearance of clean directional structure.
This is the core tension of Pressure Sensitivity: higher settings produce more decisive readings during trends but resist transitions. Lower settings are more honest about ambiguity but less expressive during decisive moves. The right setting depends on what kind of reading error you are more willing to tolerate β lagging on a genuine transition, or under-reading a genuine trend.
What Wick Weight changes
Wick Weight controls how much the wick imbalance component can influence the overall intent score. At zero, wicks are ignored entirely β the classification depends only on body direction and close location. As wick weight increases, a strong wick imbalance can shift the intent score enough to change a bar's bucket classification.
When this matters most: On instruments with genuine rejection wicks β crypto pairs that spike and reverse, commodities during thin-volume periods, individual stocks during earnings volatility. On these instruments, a long upper wick on a bullish-body bar often signals that buyers were absorbed and price was pushed back down. At Wick Weight 0.0, that bar is classified purely on its body and close. At Wick Weight 0.30-0.40, the wick rejection pulls the classification back toward neutral or even bearish, which may better reflect the bar's actual dynamics.
The interaction between the two knobs: Pressure Sensitivity determines how easily a bar reaches a strong bucket. Wick Weight determines how much wick rejection can redirect that classification. They compound: at high sensitivity and high wick weight, a single long wick can flip a bar's classification from strong bullish to weak bearish. At low sensitivity and low wick weight, only bars with overwhelming body direction get classified as strongly directional. The right combination depends on the instrument's typical candle structure, and the only way to find it is observation.
How to verify the model is doing real work
Test 1: Wick Weight comparison. Find a chart period with long-wick candles β a crypto pair during a volatile session is ideal. Run the oscillator at Wick Weight 0.0 and note the CVD trajectory. Then change to Wick Weight 0.30 and observe the difference. If the instrument has meaningful wicks, the trajectory should differ visibly. The wick-weight version should show less bullish commitment on bars with large upper wicks and less bearish commitment on bars with large lower wicks.
Test 2: Pressure Sensitivity comparison. On the same chart, run the oscillator at Sensitivity 0.50 and note how often the oscillator changes regime. Then switch to 3.0. At higher sensitivity, regime transitions should be more frequent during ranging periods (because more bars reach the directional buckets) and the oscillator should swing further during trends (because more bars are fully committed). If the oscillator barely changes between the two settings, the instrument may have such clean candle structure that the sensitivity range does not produce visible differences β which is itself useful information about the instrument.
Piecewise zero-anchored normalization
Raw cumulative delta is an unbounded number that depends on the instrument's volume scale. A raw CVD of +500,000 on SPY means something completely different from +500,000 on a penny stock. And raw CVD drifts β it can accumulate to arbitrarily large values over time, making the oscillator useless for comparing where the current reading sits relative to its recent range.
The normalization converts each slot's raw cumulative delta into a bounded -100 to +100 value. How it does this matters for interpretation.
Why piecewise
A single-range normalization would take the full high-to-low range of CVD within the window and map the current value onto a -100 to +100 scale. This is simple, but it has a problem: if the window's CVD range is asymmetric (much higher on the positive side than the negative side, or vice versa), the zero line drifts. A reading of zero no longer means "balanced delta" β it means "the midpoint of an asymmetric range," which is a less useful anchor.
The piecewise approach normalizes positive and negative values separately. When the raw CVD is positive, it is scaled against the window's positive range maximum. When negative, it is scaled against the window's negative range minimum. Both sides track their extremes independently, and the range explicitly includes zero on both sides β meaning the positive range always starts at zero and extends to the window high, and the negative range always starts at zero and extends to the window low.
The result: Zero always means balanced estimated delta. It cannot drift. A reading of +50 means the current CVD is halfway between zero and the highest CVD seen in the active window. A reading of -50 means it is halfway between zero and the lowest.
The tradeoff
Because positive and negative ranges are scaled independently, +50 and -50 may represent different absolute delta magnitudes. If the window has seen a strong bullish run (positive range extends to +800,000 raw CVD) but only moderate bearish pressure (negative range extends to -200,000), then +50 represents +400,000 raw delta while -50 represents -100,000 raw delta. The oscillator reads them as the same distance from neutral on the scale, but the absolute magnitudes are very different.
This is a design choice, not an oversight. The alternative β single-range normalization β would keep the absolute magnitudes comparable but lose the meaningful zero line. The piecewise approach prioritizes a stable, interpretable zero over symmetric absolute scaling.
When does this asymmetry actually matter? Most of the time, it does not. If you are watching whether a slot is bullish or bearish, near zero or near an extreme, the piecewise scaling gives you a clear answer. Where it becomes relevant is when you start comparing the magnitude of a bullish reading to the magnitude of a bearish reading on the same slot. If a slot read +50 this morning and -50 this afternoon, you might think the pressure reversed symmetrically. It may not have β the morning's +50 could represent 400,000 units of raw delta against a wide positive range, while the afternoon's -50 represents 100,000 units against a narrower negative range. Both are "halfway to the extreme" on their respective sides, but the absolute pressure behind them is very different. In practice, this matters most in sessions with highly asymmetric volume distribution β a strong directional morning followed by a quiet reversal afternoon, for example. For most traders, the percentage reading is the useful number. But if you find yourself asking "is this reversal as strong as the original move?", the oscillator's scale cannot answer that question directly.
How window resets affect normalization
In Session mode, the range resets at each window boundary. The positive and negative extremes start fresh at zero. This means:
The first bar's reading is proportional to that single bar's delta β if it is bullish, the reading jumps toward +100 because the positive range is just that one bar's contribution.
As more bars accumulate, the range widens and the oscillator becomes more measured in its swings.
A reading of +80 near the session open may represent a few thousand units of delta. A reading of +80 two hours later may represent hundreds of thousands. The percentage is the same; the evidence behind it is not.
In Rolling mode, the range slides. Old extremes fall off as the bars that produced them leave the window. This can cause the normalization range to contract if the most extreme bars age out, which means the same absolute CVD value can produce a higher percentage reading than it would have a few minutes ago β not because delta changed, but because the range that measures it narrowed.
How to verify normalization behavior
Test 1: Session-start observation. Use a Session-mode slot and watch the first few bars after a reset. The first bar's reading should be close to +100 or -100 (because the range is just that bar). As more bars arrive, the reading should moderate as the range expands.
Test 2: Rolling-range contraction. Use a Rolling-mode slot with a moderate window (e.g., 4H). After a strong directional move, note the CVD reading. Then wait until those strong bars age out of the window without equivalent replacement. The CVD reading for the current bar may increase in absolute percentage β not because new pressure arrived, but because the range contracted.
Test 3: Symmetry check. On a Session-mode slot, watch a session where early pressure was bullish (building the positive range) and later pressure reverses. As the negative range builds, note whether the negative readings scale independently of the positive range. A -30 should represent 30% of the negative range, regardless of how far the positive range extended.
What this page does not cover
The specific threshold values that determine bucket boundaries. The exact mathematical formula for the directional intent score. The carry participation scaling factor and its derivation from Pressure Sensitivity. The weight split between body direction, close location, and wick imbalance. The normalization clamping implementation.
These are implementation details that do not affect how you use or interpret the oscillator. The mental models above β five buckets, three input components, piecewise scaling around zero β are sufficient to reason about why the oscillator behaves the way it does in the situations you actually encounter on a chart. If the oscillator is doing something you do not expect, the explanation will almost always trace back to one of these models, not to the underlying constants.