SHAMBA LUV ← the LUV indicator
the reference form

The rainbow chart

A logarithmic regression through every daily Bitcoin close since 2010, with nine colour bands stacked around it. It is a picture of one idea: that price has spent sixteen years oscillating around a slowly-bending log curve, and that where it sits relative to that curve says more than the number itself.

Nine bands, linear time, log price — the fit bends, and the bend is the arc. Left axis is price; the right axis prices the same gridlines as market cap at the 21,000,000 terminal supply. Solid white verticals are the four halvings that have happened; dashed are scheduled. The window runs nine months past the last close, as the reference draws it.

The fit

The regression is a log curve on the day index of the series — day 1 is the first priced day, 2010-08-16 — fitted against the natural log of price:

The nine bands

Each band is 0.3 wide in natural log — a constant multiple of about 1.35× — and the ladder is offset so the fit line falls inside band 2. That offset is what makes the scale asymmetric: it reaches only 0.47× below the fit but 7.03× above, because the chart was designed to have room for manias.

BandName× the fitToday that ismarket cap

The market-cap column is each band's price multiplied by the 21,000,000 terminal supply — the same rescale the chart's right axis draws, which is why a market-cap tick sits on exactly the gridline of the price it belongs to. Market cap on a past day is a different number: price times the supply actually mined by then, which the emission schedule gives without a single network call.

what this chart is not

The bands are not a model of anything. They are a regression through past prices plus a colour ramp chosen by eye — the fit is refitted every time new data arrives, so the curve quietly moves to keep explaining whatever just happened. Its R² is high because any smooth curve fits sixteen years of log-scaled exponential growth well.

Nor does history stay inside it: of daily closes fall within the painted range at all, and the rest sit above or below it. Read it as a mood ring, not a price target.

Rainbow-weighted averaging

The strategy the chart is usually paired with: instead of buying a fixed amount on a fixed schedule, scale each buy by which band the price is in — heavier in the blue bands, lighter or nothing in the red. The idea is credited to Reddit's /u/pseudoHappyHippy, and the CoinMonks write-up reports it beating plain DCA 96.8% of the time by an average of 35.3% greater returns on historical BTC data.

read that number carefully

That result is a backtest against the same price history the bands were fitted to. A rule that buys more when price is far below a curve drawn through that price will, mechanically, look good on it. Nothing here is advice, and no weights are published on this page because the honest ones would have to be fitted out-of-sample.

Provenance

Method and colour scale ported from Professor-Codephreak/rainbow-chart (a fork of StephanAkkerman/bitcoin-rainbow-chart), which renders it in matplotlib from Nasdaq Data Link plus Binance and takes its palette from CoinGlass. This page is the same arithmetic in SVG: the coefficients above were re-fitted with SciPy on the reference CSV extended with Binance BTC/USDT daily closes through 2026-08-08.

The series is embedded — weekly closes, delta-encoded — so the chart draws identically with the network unplugged. No CDN, no fetch, no innerHTML; the SVG is built node by node. SHAMBA LUV also keeps a second rainbow organ, luv-rainbow.js, which plots the same idea on log-log axes where the curve becomes a straight ruler — useful for judging a long extrapolation, but it spends its width on the years nobody is asking about: on log time 2010–2011 takes a fifth of the canvas while 2020–2026 gets an eighth. The arc spends it the other way round, which is why this page draws the arc.

Both renderers — this one and the Python matplotlib original — are published at Professor-Codephreak/rainbow-chart, where a parity test runs the JavaScript under node and fails if the two implementations ever disagree on the fit, the bands, the emission schedule or a single label.