For the Geeks

This page is for the reader who wants to know *why* STR behaves the way it does under the hood. It is a trust-building page rather than an implementation guide. The goal is for you to finish reading it with a firmer m...

Written By Axiom Admin

Last updated 22 days ago

For the Geeks

This page is for the reader who wants to know why STR behaves the way it does under the hood. It is a trust-building page rather than an implementation guide. The goal is for you to finish reading it with a firmer mental model of what each of the four distinctive mechanics is doing, what question it is actually answering, what question it is not, and how to verify its behavior with your own eyes on your own chart.

You will not find function forms, thresholds, pseudocode, or the exact algebra behind any of these mechanics here. That is a deliberate boundary, not a missing section. Enough public detail to let a serious reader trust the pane is one thing; enough detail to let the mechanic be cloned or reverse-engineered is another. This page lives on the first side of that line. If that tradeoff feels frustrating, the pragmatic reframe is that you do not need the specific formula to read the pane well β€” you need a clear enough picture of what the mechanic is doing to know when it applies and when it does not. That picture is what the sections below are built to give you.

One posture applies across every mechanic. None of them turn STR into a decision system. They each shape what the pane can say about itself honestly, and nothing more. The operator still reads the pane; the mechanics keep the reading legible.


1. The ATR-normalized sigmoid magnitude

The question this mechanic answers. How do you turn a raw price-versus-baseline distance into a bounded, comparable number that reads the same way across instruments and timeframes?

Why a raw distance is not enough. If you simply take "close minus moving average," you get a number with two problems. First, it is unbounded β€” it can grow arbitrarily large during a strong move and there is no natural overbought or oversold frame for it. Second, it is scale-dependent β€” the same distance on a $10 stock and a $1000 stock means very different things. Any downstream feature that needs to compare, rank, or envelope the reading requires a scale-free, bounded input. Without that, cross-instrument behavior becomes incoherent and cross-timeframe behavior becomes unreliable.

The high-level shape of the mechanic. For each slot, STR expresses the distance in ATR units β€” that is, how many typical-bar ranges the source is from the slot's baseline. That ATR-normalized distance is then scaled by the global ATR Sensitivity setting and passed through a bounded non-linear step that softly maps it into the 0-to-100 pane. "Softly" is the operative word: the step saturates at the edges, so very large distances all read near the boundary, and small distances around the baseline read near 50.

The main tradeoff. A linear mapping of ATR-normalized distance is simpler and preserves the full dynamic range of the distance. STR does not use a linear mapping. The price of the non-linear step is that two very large distances, one larger than the other, may both read near 100 β€” the step cannot fully distinguish them. The benefit is that the pane has a natural overbought and oversold frame, that cross-instrument behavior is legible, and that downstream features like divergence, Keltner, BBWP, and Donchian can live in a shared range.

What is safe to disclose. The mechanic is ATR-normalized distance, scaled by sensitivity, and mapped into a bounded 0..100 pane through a soft non-linear step. The output is always clamped into the pane at the final step.

What is deliberately not disclosed. The specific function form of the non-linear step, the scaling algebra of sensitivity, and the behavior at the saturation boundary. Those details are what make the mapping feel the way it feels; they are the shape of the instrument.

Verification you can run. Apply STR to two instruments with very different price scales β€” a liquid index and a liquid commodity future, for example. Keep settings identical. Confirm both produce 0..100 readings that look readable, not pinned to an edge. Then sweep ATR Sensitivity from 0.5 to 2.0 and confirm the oscillator becomes more aggressive toward the edges as sensitivity rises. At 0.5, the oscillator should feel compressed toward the middle band. At 2.0, it should push more readily toward 0 and 100. This sweep is the single fastest way to build an intuition for what sensitivity does to the mapping.

What this mechanic cannot tell you. Whether the current oscillator level is predictive of future price. Where the move will go next. Whether the bounded edges correspond to meaningful price levels. These are not failures of the mechanic; they are outside its scope. The mechanic's job is to make the reading legible. Interpretation is still yours.


2. The weighted blend of active slots

The question this mechanic answers. How do you combine multiple per-slot oscillators β€” each running on a different timeframe, possibly a different ticker β€” into a single read that respects the reader's view of which timeframe should steer?

Why a simple average is not enough. Averaging across slots treats every timeframe as equally important. Most readers do not believe that. A reader who is primarily a swing trader and runs a 5m, 15m, and 60m stack typically has a belief about which of those three tends to lead their instrument. Averaging throws that belief away. A weighted blend lets the belief live in the configuration where it can be acted on and examined.

The high-level shape of the mechanic. Across the enabled slots, the blended fast and blended slow are computed as a weighted combination that respects each slot's Weight: setting. Slots with Weight: set to zero stay alive β€” they still plot their own line and still fire their per-slot alerts β€” but they do not contribute to the blend. Slots whose current value is na (because their higher-timeframe bar has not yet populated, for example) are cleanly excluded from the blend until they catch up.

The main tradeoff. A simple average is easy to reason about: four slots contributing equally. A weighted blend is configuration-dependent: the character of the blend changes when the reader changes weights. The indirect cost of that flexibility is that a forgotten weight can mislead you β€” a slot set to zero, or all weight piled on one slot, produces a "blend" that is not blending. The benefit is that the blend is an expression of your view, not a generic number. That is what lets you tune your way toward a read you actually trust.

What is safe to disclose. Each enabled slot contributes to the blend in proportion to its weight. Weight-zero slots stay alive but do not steer the blend. Slots without a current value are excluded. Setting one weight dominant collapses the blend toward that slot's reading. The blend is computed across active, populated slots and their weights.

What is deliberately not disclosed. The specific aggregation algebra, the treatment of na inside the aggregation, and the exact fallback logic when fewer than all enabled slots are populated.

Verification you can run. Keep three slots enabled at weight 33.3 each. Watch the blended fast for several bars and get a feel for where it is moving. Now move one slot's weight to 60.0 and rebalance the other two down to 20.0 each. Observe that the blended fast visibly pulls toward the weighted-up slot's own line. Next, move a slot's weight to 0.0 while leaving the slot enabled. Observe that the blend no longer responds to that slot even though its line still plots. Finally, try the weight-collapse test: move one slot to 100.0 and the others to 0.0, and observe that the blended fast now sits on top of the single slot's fast line. This last test is worth doing once on purpose, so you recognize the shape when you accidentally arrive at it later.

What this mechanic cannot tell you. Whether your weight choices are the right ones for your instrument. Whether a different timeframe stack would have read better. Whether the blend's current reading is reliable for a trade. These are decisions you own.


3. BBWP applied to the blended oscillator

The question this mechanic answers. Is the blended oscillator itself compressed or expanded right now, relative to its own recent history?

Why BBWP on the oscillator, not on price. BBWP is a well-known concept in price charting: rank the Bollinger Band width against its own recent history, as a percentile. Applying that concept to price tells you whether price volatility is compressed or expanded. Applying it to the blended oscillator is a different question with different teaching value: it tells you whether the oscillator's own width is compressed or expanded, which is a statement about the indicator itself, not about chart price. The two are related β€” compression in the oscillator often coincides with compression in price β€” but they are not equivalent. Reading one as the other is the most common misread of this mechanic.

The high-level shape of the mechanic. A normalized width is computed over a rolling window on the blended fast line using matched basis and standard-deviation windows β€” the Bollinger construction. That width is then ranked as a percentile against its own prior values across the Lookback: window. The ranked value is plotted as columns in the 0..100 pane. The columns are colored above or below a user-set threshold.

The main tradeoff. Reading oscillator width adds a concept to the pane that has to be held distinct from price concepts. The cost is one more thing to keep straight; the benefit is that oscillator compression often precedes oscillator expansion, and detecting that within the same pane β€” without leaving to a separate indicator β€” is legitimately useful.

What is safe to disclose. The columns represent where the current oscillator-width reading sits against its own recent history. The basis and standard-deviation windows are kept matched on purpose, which is the classic Bollinger construction; separating them would break that construction and is not supported. The basis MA type is configurable with SMA as the classic default.

What is deliberately not disclosed. The specific width formula, the percentile algorithm, and the handling of the lookback window at the edges.

Verification you can run. Find a stretch of clear consolidation on a chart β€” price grinding sideways inside a range for a while. Apply STR with defaults. Observe that BBWP columns are low during that consolidation, because the oscillator is compressed. Now find a stretch of rapid expansion β€” a strong one-directional move with wider bars. Observe that BBWP columns rise during or shortly after the expansion, because the oscillator's width has grown. Then pick a stretch where neither consolidation nor expansion is dominant and observe that BBWP drifts around the middle of the 0..100 range. This three-state walk-through is the fastest way to build intuition for what the columns are actually ranking.

What this mechanic cannot tell you. When oscillator compression will end. What direction the expansion will take. Whether oscillator compression corresponds to price compression on any particular bar. A low column is not a timing signal; it is a description.


4. The Keltner envelope with a first-difference range

The question this mechanic answers. What does a legitimate, oscillator-native envelope around the blended fast line look like?

Why a standard Keltner does not work here. A price Keltner is typically built from a moving average basis and a multiple of the average true range as the band width. True range is well-defined on bars that have a high, a low, and a close. The blended fast line does not have those three things β€” it is a single value per bar. Applying a price Keltner construction to the blended fast does not compile coherently because the range input has no high / low to evaluate. STR cannot simply reuse a price formula; it has to estimate a range from what the oscillator actually provides.

The high-level shape of the mechanic. STR builds a range estimate from the blended fast line's own bar-to-bar movement. That estimate is then smoothed using KC Length and used as the width of the envelope. A separately smoothed basis is built with Basis Type: and Basis Len:, and a multiple of the range estimate is applied around that basis to form the upper and lower bands. Every output is clamped into 0..100 at the final step.

The main tradeoff. A first-difference-based range estimate is not the same as a true-range estimate on price. It does not have access to intra-bar highs and lows; it only knows the bar-close value of the blended fast. That loss of intra-bar information is real. The benefit is that the envelope is native to the oscillator, lives in the same 0..100 pane, expresses the oscillator's own expansion and compression, and avoids the incoherent behavior of reusing a price construction on a synthetic bounded series.

What is safe to disclose. The envelope is derived from the blended fast line's own range behavior β€” not from chart-price range. It is smoothed with KC Length and centered on a basis smoothed with Basis Type: and Basis Len:. The multiplier KC Mult: scales the band width around the basis. Every output is clamped into the pane.

What is deliberately not disclosed. The specific range-estimation formula and the handling of the first-difference estimate's edge behavior.

Verification you can run. Enable the Keltner envelope on a chart where you have watched the blended fast over several sessions. Watch what the envelope does during oscillator expansion β€” it should widen. Watch what it does during oscillator compression β€” it should contract. Now find a session where chart price was highly volatile but the blended oscillator stayed near the middle band: the Keltner on the oscillator should still be narrow even though price was wide. That dissociation is the proof that the envelope is native to the oscillator, not to price. Finally, push KC Mult: up to 4.0 or 5.0 and observe the bands flatten against 100 and 0 β€” the clamp making itself visible. Bring the multiplier back toward 2.0.

What this mechanic cannot tell you. Whether price will reach, exceed, or reverse at any level. The envelope is an oscillator-space description. Price-space decisions still belong to the reader.


How the four mechanics interact

The four mechanics are not independent in practice; they stack into the pane in a specific order that matters.

Sensitivity feeds the sigmoid. The sigmoid bounds each slot's oscillator. The bounded slots feed the weighted blend. The weighted blend produces the blended fast line. BBWP ranks that blended fast line's width against its own recent history. The Keltner envelope wraps that blended fast line in a range-derived band. Divergence compares that blended fast line to chart price at confirmed pivots.

The interaction most worth internalizing is how sensitivity propagates through the stack:

  • Cranking ATR Sensitivity pushes each slot's oscillator harder toward the edges.

  • That saturation propagates into the blended fast.

  • A saturated blended fast has compressed width inside a narrow range near the edges.

  • BBWP on a saturated blended fast reads distorted, because the width it is ranking is the width of a line sitting near an edge.

  • The Keltner envelope on a saturated blended fast also compresses against the clamp.

A reader who cranks sensitivity and then wonders why BBWP "feels wrong" has not introduced a bug. They have propagated saturation through the whole stack, and every downstream mechanic is doing its job on the saturated input.

The corresponding rule: sensitivity is the load-bearing dial. Tune it with care. The other mechanics read what the bounded slot oscillator gave them.


A closing note on trust

Every mechanic above has a job and a scope. The job is to make a specific property of the blended oscillator legible. The scope is the oscillator β€” not chart price, not your position, not the instrument's broader context. Reading STR well is an exercise in holding those scopes straight bar by bar. A BBWP column speaks about oscillator width. A Keltner tag speaks about the oscillator's envelope. A divergence triangle speaks about a disagreement between the blended fast and chart price at a confirmed pivot. Each reading earns its place by being true about its own scope and silent about everything else, and the pane earns its place by not asking any single mechanic to carry a weight outside that scope.

That boundary is what makes the indicator worth studying. Readable is not the same as definitive, and STR is built to be the first of those two. If you leave this page able to state what each mechanic is doing in your own words β€” including what it cannot do β€” the indicator has earned the trust this page was written to build. If any of the four still feels like a black box, the fastest fix is the verification walkthrough inside that mechanic's section; putting the behavior on your own chart usually resolves in ten minutes what a re-read cannot.