For the Geeks
Axiom BB Lite does three things that a standard Bollinger Band indicator does not: it scales foreign-ticker bands into your chart's price space, it blends multiple slots into a composite, and it zero-fills unresolved...
Written By Axiom Admin
Last updated About 1 month ago
For the Geeks
Axiom BB Lite does three things that a standard Bollinger Band indicator does not: it scales foreign-ticker bands into your chart's price space, it blends multiple slots into a composite, and it zero-fills unresolved slot values before they enter the blend. None of these are textbook BB behavior, and if you assume standard BB math, the chart will occasionally do things you do not expect.
This page explains the design logic behind those mechanics β not the implementation, but the reasoning. Understanding these tradeoffs will help you predict what the chart is showing and, more importantly, recognize when the chart's behavior is a product of the mechanics rather than a product of the market. That distinction matters most during the moments when you are about to act on what you see.
Cross-ticker price-space scaling
The problem it solves
When you point a slot at a foreign ticker (e.g., SPY on a QQQ chart), the BB values are computed in the foreign ticker's price space. SPY's Bollinger Bands sit around $500. QQQ might be at $450. If the indicator just plotted the raw foreign values on your chart, the bands would appear at the wrong price level β a set of BB lines floating near $500 on a chart centered at $450. That is unreadable.
The indicator needs to bring those foreign bands into your chart's price range so the overlay makes visual sense.
How it works
The indicator computes a dynamic adjustment factor based on the relationship between the two instruments' closing prices at the slot's configured timeframe. Think of it as: "how much would I need to multiply the foreign value to make it land in the same neighborhood as my chart's price?"
This factor recalculates each time a new higher-timeframe bar closes (if On Bar Close is on) or continuously as the HTF bar builds (if On Bar Close is off). It adapts as the price relationship between the two instruments changes over time.
The foreign BB values β upper, basis, and lower β are each multiplied by this factor before being plotted on your chart. The result is that the bands sit at a visually meaningful level in your chart's price space.
The tradeoff
The adjustment factor assumes that the ratio between the two instruments' closing prices is a reasonable proxy for mapping one price space to the other. This is a fair assumption when:
The instruments are correlated (they tend to move in the same direction)
The price relationship between them is relatively stable
They trade during similar hours with similar data availability
It becomes less fair when:
The instruments move independently. The ratio then fluctuates based on their relative performance rather than a structural relationship, and the overlay's movement reflects ratio changes as much as actual volatility changes in the foreign instrument.
The price magnitudes are very different. A small percentage change in the ratio can produce large absolute movements in the scaled bands, making the overlay appear more volatile than the foreign instrument actually is.
One instrument has data and the other does not. During gaps, the ratio may be stale or unavailable.
How to verify it
Apply a slot with a foreign ticker. Note the slot's basis value on your chart.
Open a separate chart for the foreign ticker at the same timeframe with a standalone BB at the same settings (same length, same MA type, same StdDev multiplier).
Compare the behavior of the two: are the bands expanding and contracting at the same time? Is the basis moving in the same direction? The absolute values will differ (they are in different price spaces), but the behavior should match.
If you use two instruments with similar prices (e.g., two stocks in the $100-$120 range), the absolute values should be close as well, since the adjustment factor will be near 1.0.
Blend normalization
What the blend math is actually doing
The blended band is computed separately for upper, basis, and lower. For each line, the indicator takes every enabled slot with a non-zero weight, multiplies that slot's value by its weight, sums the results, and divides by the total weight of all contributing slots β but only when that total active weight is greater than zero.
In the normal positive-weight case, this behaves like a standard weighted average. Two properties follow from that setup:
Only the ratios between positive weights matter. Setting three slots to weights of 33.3/33.3/33.3 produces the same blend as 100/100/100, 1/1/1, or 50/50/50. The absolute numbers are irrelevant because the normalization divides by the total. What matters is how the weights relate to each other: 60/30/10 gives Slot 1 six times the influence of Slot 3, regardless of whether you express it as 60/30/10 or 6/3/1.
There is no way to "turn down" the blend's overall sensitivity by lowering all positive weights equally. If you want the blend to respond less aggressively, you need to change what feeds it (different timeframes, longer lengths), not how much weight each slot carries in aggregate.
The inputs are raw floats, not protected percentages. The script does not clamp weights to positive values. If you enter a negative weight, that slot subtracts from the blend instead of just contributing to it. If the active weights net out to zero or below, the blend function never divides and the blended plot falls back to zero. That behavior is real in the code even though it is not the normal workflow the rest of the manual assumes.
Hidden slots contribute at full weight. The blend calculation uses a slot's weight and values regardless of whether the slot's plot is visible on the chart. Hiding a slot is a visual operation; it does not touch the blend math. This means you can see a blended band whose position is influenced by data that is not visible anywhere else on the chart.
This is intentional β it lets traders reduce chart clutter while keeping the blend comprehensive β but it is the single most common source of "the blend does not match what I see" confusion. If the blend's position does not make sense relative to the visible slots, check whether a hidden slot is still enabled with a non-zero weight.
Weight of zero vs. slot disabled
Setting a weight to zero and disabling a slot are two different operations with different effects:
A weight-zero slot is useful when you want its bands on the chart as a visual reference but do not want it to influence the composite. A disabled slot produces no computation and no visual output at all.
How to verify it
Enable two slots. Set Slot 1's weight to 100 and Slot 2's weight to 0. The blend should match Slot 1 exactly.
Set both weights to 50. The blend should sit at the midpoint between the two slots' bands.
Set Slot 1 to 75 and Slot 2 to 25. The blend should shift three-quarters of the way toward Slot 1.
Change both weights to 150 and 50. The blend should not change β the ratio is still 3:1.
Set Slot 1 to 50 and Slot 2 to -50. The blended plot should collapse to zero, because the active weights no longer sum above zero.
Zero-fill when slot values resolve to na
What happens when a slot value comes through as na
Before slot values are pushed into the blend arrays, the script wraps them in nz(). That means any slot value that resolves to na becomes 0.0 before it enters the blend. The slot's weight, however, still counts in the total.
The practical effect: a slot that resolved to na contributes zero to the blend's numerator while adding to the blend's denominator. This pulls the blend toward zero for that slot's share of the weight.
Why this matters
Imagine three equally weighted slots. Slots 1 and 2 return normal BB values (say, upper bands at 150 and 160). Slot 3 resolves to na and contributes 0. The blend's upper band is not the average of 150 and 160 (which would be 155). It is the average of 150, 160, and 0 β which is about 103. The blend is pulled roughly one-third of the way toward zero.
On the chart, this looks like a sudden, unexplained contraction of the blended band. The individual visible slots have not changed. The market may not have changed. But the blend has visibly narrowed toward the price axis. If you are watching the blend and not the individual slots, this can look like a rapid volatility compression β the kind of event you might react to. Sometimes the cause really is a stale or unavailable feed. Sometimes it is another path to na. The important point is that the zero came from the script's nz() fallback, not from a special blend mode.
This is one of the situations where the blend most benefits from being checked against its components. If the blend contracts but the visible individual slots are stable, one possible explanation is that a hidden or cross-ticker slot resolved to na and got zero-filled on the way into the blend.
How to detect it
If the blended band contracts or shifts in a way that does not match the visible individual slots:
Check whether any slot uses a foreign ticker or another configuration that could leave the slot unresolved.
Check whether that symbol is valid and currently receiving usable data.
If one slot appears to be unresolved while the others look normal, the zero-fill fallback is a plausible cause.
What to do about it
Set the affected slot's weight to zero during periods when you know that slot may be unresolved. This removes the slot from the blend entirely.
Or disable the slot entirely during those periods.
Or accept the contraction and understand that the blend is reflecting partial data.
The code path we can verify is simple: unresolved slot values get zero-filled before they are blended. What we cannot prove from this file alone is every runtime situation that leads to that unresolved state. So treat any specific market-closed example as a possibility, not a guarantee.
What this page does not cover
This page explains the design tradeoffs behind these mechanics so you can predict the chart's behavior and recognize when something unexpected is a mechanic, not a market event. It does not provide formulas, code patterns, or implementation details that would let you reconstruct the logic. The goal is to make you a more confident and skeptical reader of your own chart β confident when the behavior matches the mechanic you understand, skeptical when it does not.
If you have questions about how these mechanics interact with your specific setup, the Troubleshooting page covers common symptom-to-cause patterns, and the Limitations & Trust Boundaries page maps the broader trust perimeter.