Research · Methods
The methodology, audits and change history behind every research page. Use this page to understand how a number was calculated, which sources produced it, what alternatives were tested, what was rejected, and what has changed.
Corrections to published figures, and changes to any model specification, are announced as they happen on Crypto Exponentials. If you rely on numbers from this site, that is the list to be on.
Everything below is a dated changelog in the order things happened, so earlier entries describe implementations that later entries superseded: the ETF section records three issuers as outstanding in one entry and the survey as complete in a later one, and both were true when written. This panel is the current state.
Prepared for CryptoExponentials. Date: 1 September 2026. File audited: bitcoin-metcalfe-monitor.html (final build).
The page computes a Metcalfe's Law network valuation of Bitcoin from public on-chain data and displays it against price with regime, distribution, forward-return, specification-comparison, out-of-sample validation and data-audit panels. This audit covers: (a) the correctness of every computation the page performs; (b) the integrity of the data pipeline; (c) the statistical validity of the default specification; (d) runtime behaviour across all user controls.
Data used for the audit: the page's own CSV export of 5,858 daily rows, 18 August 2010 to 1 September 2026, sourced from the Blockchain.com Charts API (market-price, n-unique-addresses, total-bitcoins, n-transactions), with a Coinbase spot price of $78,274.
Tolerance is the display rounding of each cell. Page value on the left, independent Python value on the right.
| Cell | Page | Python | Result |
|---|---|---|---|
| effective supply today (M BTC) | 15.63 | 15.63 | PASS |
| share of supply lost today % | 22.2 | 22.2 | PASS |
| Metcalfe value today | 83,236 | 83,236 | PASS |
| Premium (live price) | -6.1 | -6.1 | PASS |
| Deviation z | -0.13 | -0.13 | PASS |
| sigma pts | 47.6 | 47.6 | PASS |
| Percentile | 47 | 47 | PASS |
| Cumulative address-activity proxy (B) | 2.38 | 2.38 | PASS |
| Addresses YoY % | 8.1 | 8.1 | PASS |
| k | 2.29e-07 | 2.29e-07 | PASS |
| Fit window days | 3530.0 | 3530 | PASS |
| R2 window | 0.843 | 0.843 | PASS |
| R2 full | 0.757 | 0.757 | PASS |
| Residual skew | 0.29 | 0.29 | PASS |
| Excess kurtosis | -0.60 | -0.60 | PASS |
| sigma (fit panel) | 47.6 | 47.6 | PASS |
| Largest premium | +150% on Dec 17, 2017 | +150% on Dec 17, 2017 | PASS |
| Largest discount | -98% on Mar 13, 2020 | -98% on Mar 13, 2020 | PASS |
| p10 | -60 | -60 | PASS |
| median | -2 | -2 | PASS |
| p90 | 60 | 60 | PASS |
| Ribbon low year | Low 2020 | Low 2020 | PASS |
| Ribbon high year | High 2017 | High 2017 | PASS |
| Days above value % | 48 | 48 | PASS |
| Median premium | -1.9 | -1.9 | PASS |
| p30..p70 | -34% to +27% | -34% to +27% | PASS |
| Current state days | 290.0 | 290 | PASS |
| Last crossing date | May 16, 2026 | May 16, 2026 | PASS |
| Streak start date | Nov 15, 2025 | Nov 15, 2025 | PASS |
| bucket 0 count | 590.0 | 590 | PASS |
| bucket 0 share % | 16.7 | 16.7 | PASS |
| bucket 0 median 90d | 45 | 45 | PASS |
| bucket 0 median 180d | 102 | 102 | PASS |
| bucket 0 median 365d | 138 | 138 | PASS |
| bucket 1 count | 668.0 | 668 | PASS |
| bucket 1 share % | 18.9 | 18.9 | PASS |
| bucket 1 median 90d | 12 | 12 | PASS |
| bucket 1 median 180d | 43 | 43 | PASS |
| bucket 1 median 365d | 153 | 153 | PASS |
| bucket 2 count | 578.0 | 578 | PASS |
| bucket 2 share % | 16.4 | 16.4 | PASS |
| bucket 2 median 90d | 9 | 9 | PASS |
| bucket 2 median 180d | 13 | 13 | PASS |
| bucket 2 median 365d | 75 | 75 | PASS |
| bucket 3 count | 555.0 | 555 | PASS |
| bucket 3 share % | 15.7 | 15.7 | PASS |
| bucket 3 median 90d | 0 | 0 | PASS |
| bucket 3 median 180d | 13 | 13 | PASS |
| bucket 3 median 365d | 58 | 58 | PASS |
| bucket 4 count | 621.0 | 621 | PASS |
| bucket 4 share % | 17.6 | 17.6 | PASS |
| bucket 4 median 90d | -4 | -4 | PASS |
| bucket 4 median 180d | -13 | -13 | PASS |
| bucket 4 median 365d | -25 | -25 | PASS |
| bucket 5 count | 440.0 | 440 | PASS |
| bucket 5 share % | 12.5 | 12.5 | PASS |
| bucket 5 median 90d | -11 | -11 | PASS |
| bucket 5 median 180d | -19 | -19 | PASS |
| bucket 5 median 365d | -48 | -48 | PASS |
| bucket 6 count | 78.0 | 78 | PASS |
| bucket 6 share % | 2.2 | 2.2 | PASS |
| bucket 6 median 90d | -43 | -43 | PASS |
| bucket 6 median 180d | -48 | -48 | PASS |
| bucket 6 median 365d | -70 | -70 | PASS |
| spec n2 value | 83,236 | 83,236 | PASS |
| spec n2 premium | -6 | -6 | PASS |
| spec n2 sigma | 48 | 48 | PASS |
| spec n2 R2 | 0.843 | 0.843 | PASS |
| spec fitted value | 88,661 | 88,661 | PASS |
| spec fitted premium | -12 | -12 | PASS |
| spec fitted sigma | 47 | 47 | PASS |
| spec fitted R2 | 0.845 | 0.845 | PASS |
| spec activity value | 78,403 | 78,403 | PASS |
| spec activity premium | -0 | -0 | PASS |
| spec activity sigma | 47 | 47 | PASS |
| spec activity R2 | 0.847 | 0.847 | PASS |
| OOS RMSE | 49 | 49 | PASS |
| OOS bias | 7 | 7 | PASS |
| OOS refit min | 72,844 | 72,844 | PASS |
| OOS refit max | 86,142 | 86,142 | PASS |
| OOS refits | 7 | 7 | PASS |
| OOS predicted days | 2435.0 | 2435 | PASS |
| audit price min | 0.06 | 0.06 | PASS |
| audit price max | 124,777 | 124,777 | PASS |
| audit supply latest | 20,077,669 | 20,077,669 | PASS |
| audit days | 5858.0 | 5858 | PASS |
Result: 86 of 86 pass after one fix; re-verified after finding 14 (9 specification rows, default value unchanged at $83,236) (the validation loop previously counted an empty refit dated the following January; corrected).
| # | Finding | Severity | Fix |
|---|---|---|---|
| 1 | Chart library color mapping threw inside the engine, aborting all panels after the premium chart | Blocking | Replaced with explicit area series |
| 2 | Daily unique addresses used as n; a flow, not a user stock; value ~$9k | Model | Cumulative address stock; four alternatives retained for comparison |
| 3 | Address feed missing ~40 days; cumulative took zero-then-double increments | Data | Linear interpolation of missing days; increments now equal the daily series |
| 4 | Full-history fit through 2010 to 2013 inflated σ to 150 points and pushed k up | Calibration | Default window 2017 onward; earlier years drawn as out of sample |
| 5 | Distribution statistics (percentile, extremes, regimes, forward returns) included out-of-sample years | Statistics | Restricted to fit window |
| 6 | R² reported on full history only, mislabelled for the default model | Reporting | In-window and full-history R² reported separately |
| 7 | Regime bands at ±σ multiples on right-skewed residuals | Statistics | Empirical percentile cuts (10/30/70/90) |
| 8 | Regime-share panel became tautological after (7) | Reporting | Replaced with fixed premium-bucket shares |
| 9 | Free-fitted affinity decay chose a negative sign, contradicting the published positive decay | Model | Removed; replaced by lost-coin decay of supply (positive by construction) |
| 10 | "Best fit" half-life selected on full-history R², rewarding fast decay | Calibration | Selection on 2014 onward; default 8 years |
| 11 | Validation loop counted one refit with no predicted days | Reporting | Loop bounded to the last data year |
| 12 | Smoothing control shown when irrelevant | UX | Shown only for the activity specification |
| 13 | Fitted-exponent and activity-adjusted forms selectable as headline values despite failing stability | Presentation | Removed from the model selector; retained in comparison tables labelled diagnostic, with out-of-sample error and validation status per row |
| 14 | Daily unique addresses offered as a user definition; produced $6k to $23k valuations with R² near zero | Model | Removed from the selector and comparison table; documented in the method note as tested and rejected |
Default at the time of this validation: cumulative address-activity proxy as n, exponent fixed at 2, lost-coin decay 2% per year of each vintage, fit window 2017 onward. (Superseded: the shipped defaults are now fit-from-2011 with no lost-coin adjustment, per the lost-coin control redesign and calibration change notes below; the validation conclusions are unchanged.)
Daily calendar continuous; supply never decreases; all prices positive; value recomputed from k, n and effective supply at the last day matches the chart; mean log residual in the fit window is zero to machine precision; premium at last close recomputed matches the series; live price within 0.8% of last daily close; percentile computed over 3,530 fit-window days.
Signed off: the arithmetic of every displayed value; the data pipeline; the runtime across all controls; the default specification as a validated estimate with stated error.
Not signed off, and not to be presented as such: any claim that the value is a price target; the non-default specifications as headline numbers; agreement with any third-party proprietary figure. The Metcalfe value is a model estimate with roughly 50 log points of one-year prediction error, and the page states this.
Conditions for hosting: open the page once on live data and confirm the Data audit checks are all green and the Out-of-sample validation panel names the fixed-exponent, since-2017 row as lowest error. If both hold, the build is ready.
Specification tested: log price = k + ln(n²/S_eff) + β·ln(broad dollar index) + γ·(fed funds rate), month-start observations, sources FRED DTWEXBGS and FEDFUNDS via a public mirror. Result on the 2017 window: in-sample σ improves from 47.0 to 45.0 points; out-of-sample RMSE worsens from 49 to 64 points and bias from +7 to +52; today's value across annual refits widens from $71k–$84k to $26k–$78k. On the 2014 window: R² improves from 0.85 to 0.93 while out-of-sample RMSE worsens from 55 to 69. The dollar coefficient is negative and large but unstable; the rate coefficient changes sign across windows. The overlay is not adopted. Scope: Cane Island's exact variables are unpublished; this test covers the two natural public proxies only.
The page carries a hand-maintained, dated table of external estimates (Cane Island MET $138,557 and MAC $109,000 as of 1 September 2026), showing price versus each and each versus the page's value. These are display only and enter no calculation. To refresh them, edit the REFERENCES block near the top of the script. (Superseded on 2 September 2026: the figures now live in the hand-maintained data/references.json, read by the hub and the Metcalfe page.)
The page's method note states its claim level explicitly: descriptive fit and one-year forecasting error are claimed and tested; price targets and causation are not claimed. The known causal weakness, feedback from price to address counts, is stated on the page.
The page adopts the cryptoexponentials.com design system taken from index.html: colour tokens (obsidian background, gold, cyan, emerald), typefaces (Bebas Neue display, Playfair Display italic accents, JetBrains Mono labels, Inter body), the fixed site navigation with logo and mobile menu, the site footer with disclaimer and legal links, the favicon, and the responsive breakpoints. Chart palette: price in gold, Metcalfe value in cyan, discount in emerald, premium in the site's red. The page was re-run on the real data after restyling: no runtime errors, all values unchanged.
Companion page, same site shell, same data pipeline (Blockchain.com daily price and addresses, Coinbase spot), same validation protocol. Built 1 September 2026.
log10 P = a + β · log10 t, t in days since the genesis block (3 January 2009), OLS on daily closes from day 560, following Santostasi and Perrenod (2026). Origin, fit start and band type are user controls; a sensitivity table shows the fit under all combinations of three origins and four starts.
| Quantity | Published (to Feb 2026, from day 560) | Page on live feed (to 31 Aug 2026, feed begins day 592) | Independent Python |
|---|---|---|---|
| β | 5.69 ± 0.05 | 5.61 | 5.61 |
| R² | 0.961 | 0.960 | 0.960 |
| Residual σ | 0.302 dex | 0.301 dex | 0.301 dex |
| Trend today | $136,351 | $136,351 | |
| Pooled next-year error, last five refits | 0.212 dex (49 pts) | 49 pts |
The difference from the published β is accounted for by the sample end (five extra months, −0.04), the missing first month of 2010 in the public feed (about +0.03 if restored), and 2010 price-source differences; all inside the published ±0.05.
Reading strip (price, trend, deviation in dex and as a multiple, β, residual percentile, R² and σ); corridor ribbon at fit-window percentiles; price and trend chart with ±1σ/±2σ or percentile bands and the as-of trend refit each January; deviation chart; fit statistics; exponent sensitivity (12 specifications); forward returns by starting deviation; out-of-sample validation table by refit year with the exponent and the value for today each refit implied; exponent stability (rolling 2000-day and expanding window); decomposition β = β_A × β_M using the public address stock as adoption proxy (labelled indicative; published values shown); falsifiability monitor (deviation within ±2σ, consecutive days beyond, expanding-window β stability over five years within 0.30, residual drift over four years); trend extrapolation to 2035 with ±1σ and the range across the last five refits; external references; data audit with recomputation checks; method, claims and sources including the arXiv critique.
Real-data run: no runtime errors; 17 control combinations swept; all audit checks green (calendar continuous, prices positive, trend recomputed from a and β matches, mean residual zero to 1e-14 dex).
The adoption proxy is cumulative address-activity proxy, not non-zero-balance addresses, so the decomposition does not reproduce the published 3.05 × 1.84. The public price feed starts on day 592. Early refits (2013 to 2015) are unstable and are shown, not suppressed. Extrapolations are extensions of a fitted line, labelled as such.
A live Literature check panel compares the page against the published record. Results on the real data: Santostasi and Perrenod β consistent (5.61 vs 5.69, difference explained), R² and σ reproduced (0.960/0.301 vs 0.961/0.302); JBEF 2025 R² consistent (0.960 vs 0.9589) and its long-horizon mean reversion reproduced (365-day median return +1006% in the lowest deviation decile vs −56% in the highest), its short-horizon momentum not reproduced on medians (the published result is a Sharpe ratio); Glassnode-reported trend levels for Dec 2025 and Feb 2026 within 5% of the page's as-of trend ($113.7k vs $118k, $120.3k vs $122k); Metcalfe exponent estimates in the literature (Wheatley 1.69, Santostasi and Perrenod 1.84, Perrenod DOLS 1.92, Peterson 2) bracket the page's proxy-dependent values (1.35 on the address stock here, 2.0 to 2.1 on the companion monitor); the arXiv critique acknowledged and answered by the falsifiability monitor; power-law return tails (Begušić et al., 2018) identified as a different regularity and excluded from scope; stock-to-flow included as contrast only.
Finding 15: the "% per year" lost-coin control assumed coins are still lost today at the early-era rate, which is the least plausible profile and produced most of the adjustment's effect (+8%). Replaced by a control stating the total assumed lost today (none, 2.3M low, 3.5M central, 4.0M high, 5.6M dormant ceiling) and a loss profile (front-loaded default: hazard halving every three years above a 0.3% floor; constant rate for comparison). The per-year hazard is calibrated by bisection so the profile reaches the chosen total; the audit check confirms the recomputation. Effect on the default value: $76,710 with no loss, $78,058 at 3.5M front-loaded (new default), $81,573 at the same total with a constant profile. Rationale recorded in the method note: a uniform lost share is absorbed by k; only the change in lost share across the fit window moves the value. Re-verified on real data; control sweep clean.
A free daily snapshot pipeline (repository btc-data: GitHub Actions runs fetch/fetch_all.py at 06:15 UTC, writes one JSON per source to data/, GitHub Pages serves them with open CORS). Sources: Blockchain.com, Coin Metrics community API, Coinbase, mempool.space, DefiLlama, FRED, Alternative.me, Deribit/OKX/CFTC; ETF issuer flows marked not implemented pending first run. Each source is isolated and the manifest records status per source. Script verified against mocked responses for every parser and for merge idempotence; not yet run against live endpoints. Both tool pages now read the snapshot first when DATA_BASE is set and fall back to the live API otherwise; the Data audit panel reports which source and when. Verified: snapshot path loads with zero live-API calls and reproduces the default value.
Three further pages built on the same shell and helper module: Realised Value Monitor (realised price, MVRV and Z-score with window-based scale, supply activity bands, deviation distribution, forward returns by MVRV, an as-of percentile out-of-sample test, literature check, audit); Flows and Positioning Monitor (stablecoin supply, Deribit funding and DVOL, OKX and CME open interest, FRED macro, Fear and Greed, composite positioning percentile, lead-lag rank correlations against 90-day forward returns, forward returns by funding regime, audit with per-source provenance; ETF flows panel pending the issuer feed); and a tools hub (/tools/) that reads the snapshot manifest and shows per-source freshness. Both data pages require the daily snapshot (DATA_BASE) since their sources do not allow direct browser access. Verified on synthetic snapshots shaped like the real feeds: no runtime errors, controls swept, audit checks pass. Numerical reconciliation against real Coin Metrics, DefiLlama, Deribit and FRED data is pending the first snapshot run and will be recorded here when the manifest is available.
First snapshot run: all eight sources ok, no errors. Realised Value and Flows pages run on the real files with no runtime errors; 16 of 16 reconciliation cells match independent Python (realised price $53,076 recovered as market cap / MVRV; live MVRV 1.46; Z +0.75; percentile 33; as-of rank correlation at 365 days −0.23 over 2,800 days; funding +8.9% annualised at the 90th percentile; stablecoins $308.9B; DVOL 38 at the 12th percentile; Fear and Greed 69; dollar index 118.7; real yield 2.42%). Metcalfe and power law pages reproduce their readings from the snapshot ($78,072 and $136,437).
Addresses with a non-zero balance (Coin Metrics AdrBalCnt) added. On the power law page the decomposition now uses the published adoption series and reproduces the paper: β_A 3.00 (R² 0.974) versus published 3.05 (0.977); β_M 1.83 (R² 0.950) versus 1.84 (0.951); product 5.51 versus 5.60; gap to the direct exponent −1.8%. On the Metcalfe monitor it is offered as a user definition and scored: n² on this series gives $50,421 with 68 points out-of-sample error, weaker than the cumulative stock (49 points), so the default is unchanged and the row is labelled accordingly. Control sweeps on both pages clean. Coin Metrics community tier provides 10 of 25 requested metrics; supply-age bands are absent and the Realised Value page hides that chart rather than showing it empty.
The hub is now a live dashboard. A KPI module (fetch/kpis.py) runs inside the daily job and writes data/kpis.json: each tool's headline reading at its validated default specification, its distribution (sorted premiums, residuals, MVRV, composite), and 104-week sparkline series. On the real snapshot the module reproduces the page headlines (Metcalfe $78,072, power law $136,437, realised $53,076, composite 55, funding +8.9% at the 90th percentile). The hub reads the KPI file and re-prices the price-dependent readings against live spot; at the same spot it matches the pages cell for cell (premium −0.7%, 51st; deviation −0.25 dex, 23rd; MVRV 1.46, Z +0.75; positioning Crowded). Panels: a valuation strip placing price against realised price, Metcalfe value and the power-law model level on one log scale with each lens's 10th to 90th percentile band; four cards with sparklines and drill-down statistics; a provenance table from the manifest. Verified in the headless run with no errors.
At the owner's request the Metcalfe monitor and the dashboard now lead with the fit from 1 January 2011, chosen so the headline is comparable with published Metcalfe values: $142,702 on the live snapshot versus Cane Island's $138,557 (3% apart; 1% without the lost-coin adjustment). The reason the 2010 months are excluded is stated on the page (residuals of +350 to +400 log points, fifty times worse than any later year). The 2017 window remains one click away and is labelled as the one recommended by validation (49 versus 167 log points of one-year error); the validation panel and specification comparison are unchanged and highlight whichever window is selected. Re-verified on the real snapshot; 35 control combinations clean.
fetch/etf.py with isolated issuer parsers (IBIT, GBTC, BTC, ARKB, BITB; six issuers pending), holdings accumulated in etf_holdings.json, net flow = change in BTC held × price, per-issuer status in the manifest. Flow derivation verified offline; live parsing awaits the first run and will be adjusted from the manifest. Flows page panel consumes the file and states coverage.kpis_history.json, one row per snapshot date (price, both Metcalfe calibrations, power law, realised, composite); dashboard panel "Readings over time".All pages re-verified on the real snapshot; Metcalfe control sweep clean.
Not adopted, with reasons recorded: a probabilistic regime model (a composite by another name); causal identification work on adoption versus price (a research paper, not a live panel); additional indicators. Verified on the real snapshot; Metcalfe control sweep clean.
metcalfe.oos_rmse_pts, computed by the pipeline with the same expanding annual-refit protocol as the tool page) instead of hardcoded text; snapshot-derived strings escaped before insertion into the page; the shareable-link script now captures each page's actual default range; percentiles on the flows page require more than 30 in-window observations and its indicator cards print their through-dates; the ETF source reports partial when some issuers fail rather than a blanket ok; the chart library is one shared cached file (echarts.min.js) instead of being embedded in every page; the Cane Island reference figures moved to a hand-maintained data/references.json read by the hub and the Metcalfe page.The dashboard gained a "Cycle, miners and volatility" panel, computed daily by the snapshot job from series already ingested, at daily close, with percentiles over the window from 1 January 2017 unless stated. Definitions, in the order shown:
Each of the three bucketed signals (Mayer, Puell, NUPL) is shown with the median 365-day forward return from its current bucket over the statistics window. These are in-sample medians over overlapping windows on a four-cycle sample and are labelled as descriptive, not forecasts, in keeping with the treatment every lens on this site receives.
Second-tier sources added to the same panel as they accumulate history: Federal Reserve net liquidity (WALCL − Treasury General Account − overnight reverse repo, from FRED, units reconciled); Bitcoin dominance (CoinGecko); the Coinbase premium (Coinbase USD spot against an offshore USDT daily close from OKX — Binance's API rejects the US-based fetch runners — so the USDT peg deviation is inside the number and the label says so); the annualised basis of the Deribit dated future nearest 90 days to expiry; and the Deribit options put/call open-interest ratio. Thirty-day changes and percentile ranks for these unlock automatically as daily history accrues.
Not offered, with the reason recorded: the entity-adjusted on-chain family (SOPR, long- and short-term-holder cost basis, exchange netflows, coin days destroyed). These require UTXO-level or clustered-entity data that no free public source provides to a standard this site would publish under. The roadmap for first-party computation from a full node is documented in the data repository; until then the site prefers a stated gap to an approximated metric.
New page (/tools/bitcoin-indicator-autopsy): the popular signals tested on the full daily history, computed live in the browser from the snapshot. Pi Cycle Top (four triggers, each followed by a 50%+ drawdown within a year, but fired twice in 2013, was followed by +219% after the April 2013 signal, and did not fire at the November 2021 top); stock-to-flow (the published 0.4 × S2F³ specification against actual price at each cycle, plus a full-sample refit showing the post-May-2021 structural break); the 2-Year MA Multiplier (buy-band entries and their forward year; the 5× sell band untouched since 2017); and the 200-week moving average (every close below, the forward year, and the share of history spent under it). Each signal carries its trigger table, three-line notes and a one-line verdict that states the sample size; the method note declares that nothing is optimised or excluded and that four-to-seven events is anecdote, not statistics. Verified headlessly against the live snapshot: strip values and every table reproduce the independent Python computation.
New page (/tools/bitcoin-miners-monitor), computed live from the snapshot (Blockchain.com hash rate and fees; Coin Metrics issuance and market cap). Hash rate with the 30/60-day ribbons and every capitulation episode of seven days or longer since 2011 shaded on the chart and listed with its recovery signal and forward returns: twenty completed episodes, median +105% at one year, 85% positive, with the three losing recoveries (May 2021, August 2021, July 2025) named in the notes rather than averaged away. Hashprice with its record low ($0.0262 per TH/day, 19 August 2026); the Puell multiple with forward returns by bucket on the 2017 window; the fee share of miner revenue as the security-budget series (0.72% on the 90-day average against a 19.6% peak in January 2018); thermocap multiple in the strip. The seven-day minimum episode length is stated in the method note so the episode count can be checked. Verified headlessly against the live snapshot: strip values, the episode table and the medians reproduce the independent Python computation.
New page (/tools/bitcoin-cycle-monitor), price-only, computed live from the snapshot. All four halving cycles indexed from their halving day on one log axis; the cycle table with window peaks and worst post-peak drawdowns (windows run halving to halving, stated in the method, which is why the 2020 row peaks 14 March 2024 rather than at the November 2021 top — both shown); the diminishing multiples named (×91 → ×29 → ×8.3 → ×2.0 so far); a comparison of this cycle against each prior at exactly the current day count; and the drawdown-from-high series with the current underwater spell. The claims note states the efficient-market objection to halving causality and that four windows is a record, not a distribution. The next-halving date is labelled an estimate from block cadence. Verified headlessly against the live snapshot: strip values and both tables reproduce the independent Python computation.
The ETF holdings pipeline now parses five issuers (IBIT, ARKB, BITB, HODL, OBTC) from their own primary disclosures: iShares (IBIT), ARK 21Shares (ARKB), Bitwise (BITB) and VanEck (HODL). IBIT reads the holdings file the product page links directly, with the “Data Download” SpreadsheetML export as a second route; HODL reads VanEck’s own holdings dataset, which publishes the rounded custody figure the issuer shows in its holdings table rather than the unrounded figure in its statistics panel, and the code records that distinction. Net flow is still the day-over-day change in coins held multiplied by the day’s price, and it accumulates from the first successful run rather than being backfilled.
Five issuers (IBIT, ARKB, BITB, HODL, OBTC) are recorded as having no primary machine-readable daily disclosure this pipeline can read, each with the reason published in the data file rather than left as a silent gap: Grayscale’s two products (script-rendered pages that rate-limit automated requests, with no public data endpoint found), Fidelity’s FBTC (no daily holdings file published) and Invesco’s BTCO (a quarterly PDF fact sheet only). Three remain to be attempted (EZBC, BRRR, BTCW). The snapshot therefore publishes a coverage block stating which issuers are included, the coins they account for, and explicitly that this is not total spot-ETF holdings. Aggregator figures were considered and rejected for the same reason the rest of the site rejects them: they cannot be reconciled against a primary document. The source status is now “ok” because every issuer the pipeline attempts is parsing; coverage, which is a separate question, is stated in the data and on the page.
The survey is now complete: every US spot Bitcoin ETF issuer has been checked against its own website, and each one is either parsed or recorded with the reason it cannot be. Franklin (EZBC) and CoinShares (BRRR) serve their fund pages as client-side applications with no holdings file behind them. WisdomTree (BTCW) publishes weights, net asset value and shares outstanding, but not a coin count; the number could be inferred by dividing assets by the day’s price, and that inference is deliberately not made, because an estimate presented beside four measured disclosures would corrupt the series it sits in. There is accordingly no “pending” category left in the file: five issuers (IBIT, ARKB, BITB, HODL, OBTC) measured, seven documented, nothing vague.
The snapshot now publishes three option-market readings, computed from the Deribit option chain already fetched for the put/call ratio, so no additional request is made: the at-the-money implied volatility of the listed expiry nearest thirty days, the 25-delta risk reversal (the implied volatility of the 25-delta put minus that of the 25-delta call, in volatility points) and the 25-delta butterfly (the average of the two wings minus the at-the-money level).
Deribit publishes a mark implied volatility per instrument but not a delta, so delta is computed here by the Black-Scholes formula with a zero rate on the underlying price the exchange quotes with each instrument, which is the market convention for crypto options; the wings are then located by linear interpolation in delta across the listed strikes. The function returns nothing rather than a number when a chain is too thin to bracket both 25-delta points, when every listed expiry is nearer than seven days, or when the response is malformed — a missing reading is preferable to an extrapolated one. The computation was verified against a synthetic chain built to a known smile: on a surface whose true values are 55 and 61 volatility points at the two wings and 53 at the money, the function returns a risk reversal of 6.00, a butterfly of 5.00 and an at-the-money level of 53.00, and correctly ignores expiries outside the target window. A positive risk reversal means downside protection is bid over upside, which is the usual state; the reading is descriptive of positioning and is not a directional forecast.
The Flows and Positioning page carries these three readings in an “Options: skew and volatility” panel beside the DVOL index, with the risk reversal labelled in words (downside protection bid, roughly balanced, or upside bid) and the note recording that crisis readings have historically run to five or ten points, so that a small number is read as the option market declining to pay up for downside rather than as a signal. The panel omits itself rather than showing a placeholder when the snapshot has no surface for the day.
The CFTC Traders in Financial Futures file was already read for CME open interest, but only one column was taken and its position had never been verified. The layout is now established and documented: field 7 is open interest, fields 8 to 10 the dealer long, short and spreading legs, 11 to 13 asset managers, 14 to 16 leveraged funds, 17 to 19 other reportables, 20 and 21 total reportable long and short, 22 and 23 non-reportable. The mapping was confirmed by the report’s own arithmetic rather than by assumption: each side’s four category legs plus the spreading columns reconcile exactly to total reportable, and total reportable plus non-reportable reconciles to open interest, all three to the contract.
Those identities are now a test inside the parser. Every row is checked before any figure is taken from it; a row that fails is skipped, and if every candidate row fails the source raises rather than publishing a number read from a column that has moved. Three series are added — leveraged-fund longs, shorts and the net — and the Flows page shows the net position, the week-on-week change and the short leg as a share of open interest. The panel states the interpretation caveat plainly: a persistent net short among leveraged funds on CME is commonly the short leg of a cash-and-carry basis trade against spot or ETF longs, and is positioning information rather than a directional forecast.
The coin-age family of metrics — coin days destroyed, dormancy, SOPR, realised capitalisation and the HODL waves — cannot be obtained from any free public feed, because they require UTXO-level data. The pipeline that computes them from a first-party archival node is now written and committed to the data repository under node/, with an operator guide covering hardware, Bitcoin Core configuration, the initial scan and the daily job. It is not yet running: it needs a machine with roughly a terabyte of solid-state storage and several days for the first pass over the chain.
The scanner keeps its own table of unspent outputs and records, for every spend, the value destroyed and the height at which that coin was created; coin days destroyed, dormancy and the age bands follow from that directly, while SOPR and realised capitalisation additionally use this repository’s own daily price series so that the node’s numbers and the site’s numbers share one price convention. Progress is committed continuously, so an interrupted scan resumes rather than restarting. Its arithmetic was verified before any hardware existed, against a synthetic chain small enough to compute by hand: on a three-day test chain the scanner reproduces coin days destroyed of nought, ten and six, SOPR of 2.0 and then 0.25, the exact realised-capitalisation deltas, and correctly excludes an unspendable output from the live set.
What it will not do is stated in the code and in its guide: no entity clustering, no exchange labelling, no change-output heuristics. The published SOPR will therefore be the raw output-level figure, which counts internal transfers and change alongside genuine sales and is not comparable in level to a vendor’s entity-adjusted series; its shape and its crossings of one are the reproducible part. The published file will carry a coverage block stating the height reached and whether any spent output lacked a known creation height, so a partial scan can never be mistaken for a complete one.
New page (/tools/bitcoin-market-context). The site had been asked, reasonably, what a visitor is supposed to do with nine pages of measurements. This page answers that as far as the evidence allows and no further: it places price on three lenses at once — MVRV, the Mayer multiple and the deviation from the power law in time — ranks each as an as-of percentile against its own prior history with at least 250 prior days required, averages the three without weighting, and cuts the result at 10, 30, 70 and 90 into five named states. It then shows, for every state, the full historical distribution of what followed: median with the tenth and ninetieth percentiles, the sample size, and the worst one-year outcome with its date.
The page states no view and issues no recommendation. It carries a regulatory notice at the top, and a panel headed “What this page cannot tell you” which records that the longest unbroken discount spell ran 351 days, that the worst one-year outcome in the sample is −83%, that the columns are historical frequencies over roughly four cycles rather than probabilities, and that nothing in the data knows the reader’s horizon or whether a drawdown would force a sale.
Two results are reported prominently because they cut against what a reader might hope to find. The extreme-premium state is the only one with a negative median at every horizon, and its ninetieth percentile a year out is +8%, meaning even its good outcomes were poor; that asymmetry is the single useful finding on the page. Against that, the deepest-discount state has a median one-year return of +61%, below the ordinary discount state at +85% — buying maximum weakness has not been reliably better, and the page says so rather than burying it. A thresholds table gives the levels at which each lens would read differently, so the reading can be followed without revisiting daily. Verified headlessly against the live snapshot: the strip, all five state rows with their decile ranges and sample counts, and the threshold levels reproduce the independent Python computation exactly.
An external reviewer proposed a large institutional-governance programme. Most of it was deferred as premature for a site with no readership yet, and two of its recommendations were rejected outright: entity-adjusted on-chain data, which this project declines for the reasons already recorded, and several items that were simply stale, since ETF coverage, options skew, CFTC positioning and point-in-time percentiles were already live when the review was written. Five findings were accepted, verified against the current code rather than the review’s description of it, and implemented.
Specification status at the headline. The Metcalfe monitor already labelled its two calibrations in the reading beneath the value, but the headline itself said only “Metcalfe value”. It now reads “reference specification” on the 2011 calibration and “validated specification” on the 2017 one, so a reader cannot mistake the comparability default for the statistically preferred model.
Confidence intervals on forward returns. The Where Things Stand table previously showed a median and the spread of individual outcomes. It now also shows a ninety per cent confidence interval for the median itself, from a moving-block bootstrap whose block length is the forward horizon, because neighbouring windows share that much price path. The procedure runs under three independent seeds; the interval published is the widest of the three and a state is marked as excluding zero only when all three agree. That caution was not theoretical: at one year the neutral state contains only about seven independent blocks, and its interval moved across seeds, so it is now correctly shown as carrying no reliable directional information where a single-seed run would have marked it significant. Three states survive the test — deep discount, discount and extreme premium — and the extreme-premium interval, roughly −62% to −16%, confirms the one asymmetry the page claims.
Data exception surfaced. The address feed has missing days, and the cumulative user stock has always been built by interpolating across them. That was described in this document but never shown on the page. The Metcalfe data-audit panel now reports the number of interpolated days and the span they cover, computed at run time.
Model status on the power law. The falsifiability panel already evaluated four published breakdown conditions individually. It now also carries a roll-up — active, watch, degraded or failed — derived from those same four conditions, with no new thresholds introduced to manufacture a badge, and states in the panel that the conditions are the model’s own.
Terminology. “Trend today” became “model-implied level” on the power-law page and the dashboard, because a level drawn on a chart and labelled a trend is read as a target however carefully the surrounding text disclaims it.
A second reviewer observed that the page led with four percentile numbers and left the reader to infer the state from them. The observation was partly an artefact of a reader that does not run the page’s scripts — the live page did state the reading — but the hierarchy point was sound, so the page now leads with the classification itself in the strip, with the composite percentile beneath it rather than above.
A new panel sits directly under the strip: one sentence naming the state, the composite percentile, and whether the three lenses agree, followed by a table giving each lens, what it measures in plain words, its percentile, and how it reads on the same cuts the composite uses. Where the lenses disagree the sentence says so and reports the spread in percentile points, because disagreement between measures of different things is information rather than a defect to be averaged away. On the current data the lenses differ by 34 points, with the power-law deviation reading discount while the other two read neutral.
The forward-return note was also reworded. It previously opened “the one asymmetry worth noting”, which invited the extreme-premium finding to be read as a rule; it now leads with the caveat, describing the sample as small and heavily overlapping and closing with the statement that this is a description of a handful of episodes rather than a rule. No recommendation, score, gauge or signal was added, and none will be.
A further pass asked a blunter question: would a visitor with no background understand the strip at all? The answer was no. A percentile has a direction, and the page never said which end was expensive; “MVRV percentile 37” is jargon on top of an ambiguity. Every reading is now also stated as a share of past days — the composite at 36 reads “cheaper than on 64% of days since 2013” — the three lens labels name what price is being compared against rather than the statistic used, and the five state names are glossed once as bands of the same scale, the cheapest tenth through the dearest tenth. The numbers are unchanged; only their presentation is.
Readers ask whether Bitcoin is in a bull or a bear market. That question is answerable, because it describes what price has already done, and refusing to answer it would be evasion rather than rigour. Where Things Stand now classifies each day into one of three phases and publishes the label’s own failure record beside it.
The definition: a drawdown is declared when price closes more than 25% below its highest close to date, and released only when price recovers to within 10% of that high, with the previous label standing in between; outside a drawdown the phase is an advance when the 200-day trend in log price is rising and sideways when it is not. The gap between the two thresholds is deliberate. A single 20% line produces 109 phase changes with a median episode of six days, because price oscillates across it; the hysteresis gap reduces that to 36 episodes with a median of 47 days. Both counts are recorded here so the choice can be checked, and the thresholds are round numbers fixed once rather than values searched for.
The label is then tested against the only question that matters, and it fails that test in an instructive way. Days classified as a drawdown were followed by a median one-year return of +112% across 4,180 observations; days classified as an advance by +18% across 1,041. On this record the reassuring phase has been the worse one to buy and the frightening one the better, which is the opposite of how such labels are normally used. Three further weaknesses are published alongside: the label is late by construction, since a drawdown cannot be declared until price has already fallen a quarter from its high; it is unstable, differing from its own value thirty days earlier on 13% of days even with hysteresis; and it does not reliably describe the period it names, with six of seventeen advances ending lower than they began. The market has spent 79% of all days in drawdown, because the benchmark is the highest price ever reached.
No buy, hold or sell indication is published, and none will be. Such a label cannot be derived from this data: it depends on the reader’s horizon, position size, tax position and whether a deep drawdown would force a sale, none of which are observable here. The phase classification is offered as a description of where price has been, with evidence that it is close to useless as a guide to where price is going.
The reading strip was revised again in the same spirit. It had shown a bare percentile in the prominent position with a line beneath restating the same figure in words, which put a number with no units where the meaning should be. Each lens now shows a word in that position — very cheap, cheap, typical, dear or very dear, on the same bands the composite uses — and the line beneath carries the measured quantity in its own units together with the percentile that produced the word: market value at 1.48 times what holders paid, price at 1.13 times its 200-day average, price 42% below the trend line. The analyst keeps the numbers, the general reader gets a sentence, and the two are the same statement.
The vocabulary itself was then replaced. The five bands had been named deep discount, discount, neutral, premium and extreme premium, which are terms of art: “neutral” in particular says nothing about price to a reader who has not met the convention, and the middle band is where most readings fall. They are now very cheap, cheap, average, expensive and very expensive — symmetric, unambiguous, and used identically in the strip, the lens table, the forward-return table and the prose, so the page speaks one language throughout. The cut points are unchanged at the tenth, thirtieth, seventieth and ninetieth percentiles, and the band widths are stated: the middle band is deliberately the widest because most days are unremarkable.
The whole scale is now also drawn rather than described. A five-segment bar shows every band in proportion, green through grey to red, with the day’s composite marked on it and the ends labelled as the cheapest and dearest days on record. A reader can see at a glance both what the options are and which one applies, without reading a definition first.
The first two days of ETF flow history produced a chart with two points, whose time axis fell back to hour labels that collided with each other and with the legend. Both problems had the same root: a line drawn through two observations one day apart implies a trend that a single day’s change cannot support. The chart is now withheld until seven daily changes have accumulated, the reading above it says so in words rather than leaving a silent gap, and the axis is pinned to whole days with overlapping labels suppressed. The panel’s numbers — issuers measured, coins covered, latest net flow — were always the substance and are unaffected.
New page (/tools/bitcoin-technical-signals). The readings most often quoted — the fourteen-day relative strength index, the fifty and two-hundred day moving-average crosses, and the MACD against its signal line — are shown live and then scored. The scoring is the point. Each signal’s median forward return is placed beside the median forward return from a randomly chosen day over the same history, and the difference between them, in percentage points, is reported as the edge. A signal followed by +100% in a market that returned +96% from any day at all has found nothing, and this is the comparison most published back-tests omit.
The results are unflattering to the conventions. Buying when relative strength crossed above 70, the level that is supposed to signal an overbought market, beat a random day by 56 percentage points at one year across 38 triggers; crossing below 30, the supposed bargain, came in 19.5 points behind. The MACD’s two crossings differ from a random day by 0.8 and 0.5 points at thirty days across more than a hundred triggers each, which is indistinguishable from no information. The golden cross is 4.8 points behind at thirty days, consistent with a rule that only fires after the move that produced it. None of these are presented as tradable: the note states that trigger counts run from twelve upwards, that windows overlap, and that a few points of edge against a volatile baseline is noise.
Fibonacci retracements, trend lines and chart patterns are deliberately absent, and the page explains why in a panel of its own: their levels depend on swing points the analyst chooses, so no rule can be coded, run over the history and scored. The page states that if a reader can specify such a rule precisely enough to program, it will be added and tested like the others. Verified headlessly against the live snapshot: the strip and all eighteen table rows reproduce the independent Python computation exactly.
The page was then restructured after review. It now opens with a table of the four families a technical reading can belong to and what each is for: momentum, which can move before a trend confirms; trend, which confirms only after the move; volatility, which says whether risk is expanding or compressing; and participation, which is measured on the Flows and Positioning page rather than duplicated here. Two volatility rules were added to the tested table, each defined as a compression into the bottom tenth of its own trailing two years judged as of that day: Bollinger width came in 4.7 points behind a random day at thirty days, and realised volatility 8.5 points behind. The coiled-spring reading does not say which way the spring goes, and the page now says so with numbers.
Exchange volume, cumulative volume delta and liquidation data were requested and are absent, from this page and from the site as a whole, because the snapshot has no free keyless primary source for them; on-chain transfer value is not a substitute and is not offered as one. The gap is stated on the page rather than filled with a proxy.
Two further changes followed a reader observation that the page’s conclusion was buried under its data. The finding now sits above everything else in a panel of its own: of the eight rules tested, seven did no better than buying on a randomly chosen day and several did measurably worse, with the single exception running against the textbook. Beneath it, in the same panel, is the sentence the page exists to make possible — that it cannot tell a reader to buy, hold or sell, because that depends on horizon, position size and whether a deep fall would force a sale, none of which are in this data, and that what it can say is that these readings are weaker evidence than they are usually presented to be. The tested table is now grouped into early-warning rules, which can move before a trend turns and fire often when nothing follows, and confirming rules, which only fire after the move that produced them, with each group carrying that caption. The numbers are unchanged.
In the sub-navigation rail, the current page was marked only by a faint tint and kept the same dim text as every other item, which made it hard to see where you were. The active item now carries a gold left border, a gold label and heavier weight.
The summary above the table said that seven of eight rules did no better than a random day, then quoted a one-year figure in the same breath. The count was taken at the thirty-day horizon using an unstated threshold while the figure beside it came from the one-year column, so the two could not be reconciled against the table beneath. That was a genuine defect in the writing, not the arithmetic, and it has been rewritten. The summary now states the baseline in plain terms — buying on a random day since 2010 returned about 96% over the following year — and reports how many rules fell behind it, how many made no clear difference and how many came out ahead, with the noise floor of five percentage points stated in the line beneath.
The verdict rule itself was also tightened. A signal previously earned “beat holding” if every difference clearing the noise floor pointed the same way, which handed that verdict to the golden cross on a single reading of five points while its other two horizons were flat. A verdict now additionally requires at least one difference of ten points; the golden cross accordingly reads “no clear difference”, which is what twelve triggers of roughly flat performance deserve.
The table was reorganised at the same time. It had repeated each signal across three rows with an ellipsis standing in for the name, printing six numbers per signal; it now gives one line per signal showing the difference from the baseline at one month, three months and one year, with a verdict in words, and the underlying returns for every horizon sit behind a disclosure toggle for anyone who wants them. Two indicators that the table tested but the page never showed live — Bollinger width and realised volatility — now appear in the reading strip with their own percentile against the last two years, so every rule in the table has a current value on the same page.
A reviewer raised a long list; most of it was deferred or already done, but four items were genuine and are corrected here. Each was checked against the running code before being changed.
Look-ahead in the historical classification. This is the serious one. Where Things Stand ranks price on three lenses as of each day, but the power-law deviation was computed against a trend fitted once over the whole sample, so coefficients estimated from later years were deciding how earlier days were classified — and those classifications drive the forward-return table. The fit is now an expanding window: at each day the trend is estimated from the data available up to that day only, with a fit produced once five hundred qualifying observations exist. The correction changed the answer, which is the point of making it. The cheapest tenth of days previously showed a one-year median of +61%; on the honest computation it shows +14%, with a confidence interval running from −37% to +65% that no longer excludes zero. A finding this page had reported as real was an artefact of the contamination, and it has been removed by the arithmetic rather than by editing.
The threshold table answered a different question than it asked. It claimed to give the levels at which each lens would read differently, but it searched past observations for whichever value happened to have been ranked near the thirtieth or seventieth percentile, which is not the same number. It now takes the quantiles of the reference distribution the ranking actually uses, so the printed levels are what today’s reading would have to reach.
Bollinger band width was half the conventional figure. The technical-signals page computed two standard deviations over the middle band and labelled it band width; the conventional measure with two-sigma bands is the distance from the upper band to the lower, which is four. The ranking and every tested result are unaffected, since the series was consistently scaled, but the displayed number did not match what a reader would compute elsewhere. It now does.
Spearman correlation ignored ties. The flows page assigned sequential ranks, which is invalid when values repeat — and several inputs there repeat by construction, sentiment being an integer. Ranks are now midranks, and the correlation is computed from the ranks directly rather than through the tie-free shortcut formula.
Two wording corrections accompany them: the Metcalfe page described its input as active users when the model uses the cumulative stock of addresses ever used, a distinction the method section already drew and the summary contradicted; and the ETF panel described its figures as net creations and redemptions when they are estimated flows derived from holdings changes, which can differ from an issuer’s primary-market cash flows in timing and mechanism.
The technical-signals verdicts had been decided by a rule of thumb: consistent direction plus one difference of ten percentage points. That is a reading convention, not a test, and it has been replaced. Each signal’s difference from the baseline now carries a ninety per cent confidence interval from a moving-block bootstrap under three independent seeds, and a rule is recorded as evidence only where an interval excludes zero under all three; the five-point rule survives solely to colour small numbers.
The change sharpened the page. Relative strength rising above 70 shows intervals above zero at all three horizons and is recorded as evidence of an edge; the Bollinger squeeze and the downward MACD crossing show evidence of trailing the baseline; the remaining five rules, including both moving-average crosses, show no clear evidence in either direction, which on twelve and thirteen triggers is the honest answer. Where a signal has fewer than twenty completed windows no interval is computed and the verdict says so rather than inferring from a handful of episodes.
Alongside it: the power-law panel now reads “falsification status” and states that it reports only whether the model’s published breakdown conditions have been breached, not that the model is predictively valid; the indicator autopsy’s column head became “current condition”; the flows composite is named for crowding and sentiment rather than leverage and sentiment, and its correlation note no longer implies that a non-zero value indicates a tradable signal; the realised-value page states that realised cap is recovered from Coin Metrics’ market capitalisation and MVRV fields rather than reconstructed from the UTXO set; the miners page describes the fee share in terms of sustaining miner revenue rather than the security budget surviving; the next halving is labelled an illustrative calendar estimate; and the forward-return table counts observations rather than days, because overlapping daily windows are not independent samples.
A reviewer objected that the intervals on the technical-signals page were described as a moving-block bootstrap while the blocks were drawn from the ordered sequence of triggers rather than from contiguous calendar days. The objection is right about the naming, and the two pages turn out to differ, so both were checked against the data rather than argued about. On Where Things Stand the states persist for weeks, and between 93 and 97 per cent of consecutive observations within each state are adjacent days on the current data, so those blocks genuinely are contiguous stretches of the calendar and the description stands, now with the measurement attached. On the technical-signals page the triggers sit between 90 and 318 days apart, so the blocks are not calendar blocks and the page no longer claims they are: it describes resampling the ordered sequence of triggers in blocks, and states what that does capture, which is that every consecutive pair of triggers in this sample has overlapping one-year windows and is therefore kept together rather than drawn independently.
Three smaller items completed the list. The realised-value page had kept the old sequential-rank correlation after the flows page was corrected; it now uses the same midrank implementation, so the statistic is computed identically wherever it appears. The dashboard’s thesis-status table now states above it that the rules are independent observations rather than votes, that no score is computed, and that the count of favourable readings has no defined meaning — the table invites tallying, and the sentence declines the invitation. And the dashboard now carries one line of technical context, drawn from readings the pipeline publishes rather than recomputed in the page, so the dashboard and the technical-signals page cannot disagree: relative strength, the fifty against the two-hundred day average, price against the two-hundred day, and realised volatility, followed by a link to the page that tests whether any of it has been worth anything.
Two objections survived the last round and both were right. On Where Things Stand the interval was described as a moving-block bootstrap while the blocks were drawn from the filtered sequence of days belonging to a state; the defence offered was that those days are 93 to 97 per cent contiguous in practice, which is evidence about the data rather than a description of the algorithm. It is now a moving-block bootstrap in the strict sense: contiguous stretches of days are drawn from the original daily index, the state is applied to the resampled index, and the median is recomputed from whatever qualifying days the draw produced, so the number of observations varies between replicates as it should — how often a state occurs is itself uncertain, and holding it fixed made the interval narrower than the evidence allows. The intervals duly widened: the cheapest tenth of days moved from −37% to +65% under the old method to −46% to +117% under the correct one. The two findings that survived before still survive, which is the only reason they are still reported.
On the technical-signals page the difference was bootstrapped on the trigger side while the baseline median was held fixed, so the interval described uncertainty in one estimate rather than in the difference of two. Both sides are now resampled in each replicate: the baseline as contiguous calendar blocks of the daily forward-return series, which is a moving-block bootstrap in the strict sense, and the trigger side as blocks of the ordered event sequence, which is not one and is described as what it is. Including the baseline’s own uncertainty widened the one-year intervals substantially and changed two verdicts. The downward MACD crossing no longer shows evidence of trailing the baseline. Relative strength above 70 still shows evidence, but only at one month and three months; at one year its interval now includes zero, and the page says so rather than quoting the headline figure unqualified.
An external review of the deployed site recorded no blocking or substantive issues remaining and advised against delaying publication for the rest. The remaining suggestions were wording, and they have been applied: the technical-signals page speaks of a historical difference from the baseline rather than an edge, since the shorter word implies tradable advantage the page explicitly declines to claim; the Where Things Stand composite is named an equal-weight descriptive composite wherever it appears, so the aggregation assumption cannot be missed; the Metcalfe page describes a Metcalfe-style specification rather than Metcalfe’s Law, because what is implemented is one empirical operationalisation of it; the crowding gauge now states that its three components are not independent of one another; and the miners page describes hashprice in analytical rather than editorial terms.
One substantive item from that review was also addressed. Every page computes its figures in the browser, so a reader without JavaScript — and any crawler or assistive tool that does not execute it — previously saw only the word “Connecting”. Each page now carries a fallback stating what it contains, and pointing to the daily snapshot itself, which is plain JSON that needs no scripts to read, and to its documentation. That does not make the charts accessible without JavaScript, and it is not presented as doing so; it makes the data reachable, which is the part that matters.
A reader asked whether the sentence “buying on a random day since 2010 returned about 96%” was itself properly supported. The figure is correct — it is the median one-year forward return across all 5,494 days with a completed window — but the sentence was loose in two ways, and one of them was a version of the error this site criticises elsewhere.
First, “returned” implied a typical outcome from a distribution that is severely skewed: the tenth percentile is −51%, the ninetieth is +943%, the mean is +441%, and 27% of days were followed by a loss. Second, the figure is sensitive to where the history starts. Roughly half of it comes from 2010 to 2012, when Bitcoin moved from cents to dollars; measured only from 2017 the median is about 50%. That sensitivity was not disclosed, which is precisely the specification-sensitivity problem the methodology section cites Leamer on.
The banner now publishes the spread, the share of losing days and the post-2017 figure alongside the headline number, and the method note explains why the full history is retained: it sets the harder benchmark for a signal to beat, and every comparison in the table applies the same baseline to both sides, so the differences the page reports are unaffected by the choice. The correction changes no result on the page; it changes how much confidence the baseline sentence invites.
New page (/tools/bitcoin-relative-value) and a new snapshot source, relative.json, carrying the denominators: gold and silver as monthly averages from the World Bank Commodity Markets “Pink Sheet” (public domain; gold falls back to the datahub mirror of the same series if the World Bank file is unreachable from the runner), the S&P 500 and Nasdaq daily from FRED, and ether, Solana and tokenised gold daily from Coinbase Exchange. Every leg is isolated so one failure cannot remove the others, and each series is named to its source in the snapshot’s provenance block. The London gold fixing series formerly on FRED was deleted in January 2022 and no free keyless daily replacement exists, which is why the long history is monthly and the daily readings begin in 2020; both sides of every long ratio are like-for-like monthly averages.
The page shows what one bitcoin buys of each denominator since the earliest month both exist, which side won each calendar year, and a rotation test that is the reason the page exists. Two rules — momentum, holding bitcoin when the ratio is above its trailing mean and the denominator otherwise, and its mirror, mean reversion — are run at three lookbacks (6, 12 and 24 months) from two start dates, with monthly rebalancing and 0.2% per switch, against holding bitcoin, holding the denominator, and a monthly-rebalanced 50/50. All three lookbacks are shown because a single one would have been a choice, and the choice decides the result: on the current data the 12-month momentum rule beats holding bitcoin against gold from both start dates while the 6- and 24-month versions lose, and mean reversion loses under every lookback against every denominator. The page states this as its headline rather than reporting the lookback that worked. The number of independent decisions, the count of times the ratio crossed its trailing mean, is stated beside each table because that, not the number of months, is the sample; it is seventeen for gold at the 12-month rule.
A correlation panel reports the rolling 90-day correlation of bitcoin’s daily returns with the S&P 500 and with tokenised gold, with a reading in words — a tech stock, money, its own thing, or mixed — and the 2022 average as the reference for the tech-beta regime. Verified headlessly: the gold and S&P figures, the calendar-year table and every cell of the rotation tables reproduce the independent Python computation; the ether, Solana and correlation panels were exercised with synthetic fixtures for rendering and will carry real figures once the source has run.
A reader asked, fairly, whether twelve pages of measurements enable a decision or merely surround one. The honest answer was that the inferences a decision needs were all present but scattered, and that nowhere did the site assemble them into the three questions a holder actually asks. Where Things Stand now carries a decision brief that does so: is there evidence to add, to reduce, to hedge, or to rotate — each answered with the evidence on this site and a strength rating.
The ratings are assigned by rule, not by judgement, and the rules are printed under the table. “Strong” requires a bootstrap interval on this site to exclude zero in that direction, which today only the very-expensive valuation state does for reducing and only the cheap state does for adding. “Moderate” is a large historical difference on a small or overlapping sample, such as a hash-ribbon recovery inside its ninety-day window. “Weak” is a direction with a known failure record, such as the drawdown label. “None” means no tested evidence points that way. A closing line names the best-supported course, and because the rules require strong evidence in one direction before naming anything other than doing nothing, doing nothing is what the brief names on most days — including today. That is deliberate: holding is a decision, it can be evaluated like the others, and it is usually the one with the least evidence against it.
The brief states no recommendation and cannot: which question applies depends on horizon, position size, tax and whether a fall of half would force a sale, none of which the data contains. What it does is turn the site’s findings into the form an investment committee would actually use — evidence, direction and strength — and leave the decision with the person whose situation it is. Verified headlessly against the live snapshot: every rating and every sentence in the brief reproduces from the same computations the other panels publish.
A reader asked why the gold line on the correlation panel was so short, and the question exposed something worse than the gap it asked about. The panel’s note said that in 2022 bitcoin traded as a leveraged Nasdaq position, beside a computed 2022 average of 0.11 that contradicted it; the chart never exceeded about 0.35 while the widely reported 2022 figure was above 0.6. The cause was the input. The blockchain.com price used across the site is a daily average, which is the right series for valuation and the wrong one for return correlation: averaging smears each day’s move across its neighbours and biases correlation toward zero. The snapshot now carries a true daily close for bitcoin from Coinbase Exchange, the panel correlates close against close, and it says which basis it is using.
The gold line was short because tokenised gold traded thinly on Coinbase for its first years, leaving runs of unchanged closes on which a correlation is undefined or meaningless. A window is now reported only where the denominator moved on at least sixty of its ninety days, and the note says so. And the narrative sentences in that panel were replaced by computed ones: the peak, the trough and the 2022 average are now read from the series, with their dates, so a sentence can no longer sit beside a number that disproves it.
The same question arrived for the S&P 500 line, which began in 2016 because FRED’s free daily series carries ten years. The long ratio now uses Robert Shiller’s monthly S&P 500 series, public domain and mirrored on GitHub, from 2010 like gold; FRED’s daily closes serve only the correlation panel. A first attempt merged the two, filling the monthly series’ most recent gap from the daily feed, and a test fixture caught what that does: a one- or two-day partial month placed beside full-month averages manufactures a spike at the right edge of the chart. The monthly series is now used alone and lags by at most a month, which is stated.
The gold line on the correlation chart was then found to cover only sixteen months against ten years for equities. The reason was not thin trading, as first assumed, but listing: Coinbase listed tokenised gold in May 2025, and no free primary source carries daily gold before that. Rather than draw a mismatched chart, the panel was rebuilt on two stated time scales. The chart is now the rolling 24-month correlation of monthly returns, with bitcoin, gold and the S&P 500 all as monthly averages from 2012, so both lines run the full history on identical footing; the strip carries the 90-day daily reading for currency. On the current data the two scales disagree — the 90-day window reads as money while the 24-month window reads as equity-like, at 0.47 with the S&P 500 and near zero with gold — and the panel leads with that disagreement rather than with the scale that makes the better headline. An earlier note on this page describing bitcoin as trading like gold “for the first time on this data” rested on the short window alone and is withdrawn in that form.
The research sub-navigation had grown to eleven items and wrapped onto a second line. On screens wider than 1200 pixels it is now a fixed left rail; below that width it remains the horizontal strip, and the mobile menu is unchanged. No item is hidden at any width.
A reader could also reasonably wonder why there are two summary pages. The distinction is now stated at the top of each rather than left to be inferred: the dashboard is the terminal, showing every reading the snapshot publishes with its provenance, while Where Things Stand answers a single question about where price sits against its own record and what has followed from comparable readings. Each page links to the other in those words.
Omitted from the record when it happened, entered now. With the headline calibrated from 2011 for comparability with published Metcalfe figures, which state no supply adjustment, the lost-coin control was set to default to none so that the reference value is directly comparable; the 3.5M front-loaded profile that the redesign had made the default remains one click away and is still the profile the method note describes as most plausible. The validated 2017 calibration is unaffected in its ranking.
A further review of the deployed site found no calculation defect but five things worth changing, each verified against the code before it was touched.
The crowding composite could silently change composition. The rule that averages funding, open interest to market cap and Fear and Greed accepted a day with only two of the three present and averaged what it had, so the series could be a three-component composite on one day and a two-component one on the next with nothing on the page to say so. The pipeline and the Flows page now require all three; a day with fewer is blank rather than averaged, and the KPI file records how many components were present.
The ETF universe sentence had aged. "Every US spot issuer has been checked" was true of the January 2024 cohort and no longer true of the market: the Morgan Stanley Bitcoin Trust has traded since April 2026 and the Osprey trust has been an ETF since December 2025, and neither had been assessed. The panel is now titled for what it is, holdings-derived flow from five issuers (IBIT, ARKB, BITB, HODL, OBTC); the coverage line states that it is not total spot-ETF flow; both new products are recorded as not yet assessed rather than silently absent; and the data file carries the date on which the universe was last compared with what is listed, so the sentence cannot rot unnoticed again.
The decision brief named a course of action. Under a notice that nothing on the page is a recommendation, the brief closed with "the best-supported course today is doing nothing". That is a recommendation with a modest verb. The panel is now the evidence brief, and its closing line states what the tests establish and stops there: on most days, that no tested evidence establishes an advantage for adding, reducing or rotating. This is also the stronger statement; it claims exactly what the intervals support.
Terminology. The intervals on Where Things Stand and Technical Signals are described as ninety per cent moving-block bootstrap intervals, robustness estimates under the stated dependence structure, rather than as confidence intervals, which invites a model-based reading the procedure does not earn. The Relative Value page counts switching events rather than "independent decisions", since consecutive crossings share a trend episode.
Freshness is not the same as a successful fetch. The manifest recorded whether each fetch succeeded and the last date it held; it did not judge whether that date was acceptable. Each source now carries an expected maximum age, its actual age in days, and a freshness state of current or stale, and the manifest lists stale sources beside errors. The KPI file also publishes the 2011 reference calibration under keys named for what it is (value_reference, reference_fit_from); the legacy *_full_history keys are kept for one release, because the name was a misnomer that this document had already retired in prose.
Build status above corrected to twelve pages and thirteen external source families; the panel had not been updated when the Relative Value page and its source were added. Hand-written sentences that describe a live figure ("currently off by nine times", "run near 460 thousand today") now carry the date they were true, on every page where one was found. The Technical Signals banner now leads with the post-2017 baseline median and gives the full-history figure second, with its spread; the table is unchanged and still scores every rule against the full-history baseline, for the reasons the method note gives.
A reader asked whether any model, indicator or on-chain metric caught the crash of 10 October 2025. The honest answer was no, and the honest way to give it was to replay every indicator the site publishes as it read on that day with no later information. That replay is now a permanent panel on the Indicator Autopsy, extended to every comparable event. It is an event study, not a predictive test: the events are identified from what price did next, and only the indicator readings are point-in-time. The panel says so in its first sentence.
The events are chosen by rule so the list cannot be curated: any day from whose close price fell 30% or more within thirty days, and any all-time-high close followed by a 40% drawdown within six months, clustered at 180 days so one decline counts once, with the last all-time high in a cluster taken as the event. On the current data the rule finds ten since 2013 — five cycle tops (December 2013, December 2017, April and November 2021, October 2025) and four sharp shocks (September 2014, October 2018, February 2020 into the COVID crash, May 2022). For each, the table shows the valuation composite and state, the MVRV percentile, the Mayer multiple, relative strength, the Pi Cycle gap, the two-year-average multiple, Fear and Greed and DVOL where their histories reach, and then the lowest close within thirty and one hundred and eighty days. Today is the last row.
The finding is clean and unflattering in the right way. Valuation read expensive or very expensive on the eve of four of the five cycle tops and none of the four shocks; the shocks began from average or cheap valuations with relative strength near neutral, because they were liquidation cascades rather than exhaustion. The panel also states what a warning is worth in base-rate terms, counted by episode rather than by day (a contiguous stretch in a state is one observation; it counts as followed by a fall if a 30% decline within thirty days began on any day of the stretch): the composite was expensive or very expensive on 32 separate occasions since 2013 and a fall followed 5 of them; very expensive on 12 occasions, a fall followed 5; the Pi Cycle was fired on four occasions, each of which contained the start of such a fall, and it was fired on the eve of two of the five tops and none of the four shocks. For context, a 30% fall within thirty days began on 7% of all days since 2013. On 7 October 2025 specifically, the composite read average at 65, relative strength was 73, the Pi Cycle was 43% short of triggering and DVOL sat near the bottom of its range; what followed was a 50% decline to February 2026.
Two limits are stated on the panel. The site’s price series is a daily average, so an intraday crash that recovered by the close — 10 October 2025 among them, which shows as a 1.3% daily move — registers through the decline that followed rather than on the day. And the family most likely to have shown fragility before a liquidation cascade — funding, open interest, options skew, CME positioning — has been recorded here only since late 2025, so none of the past events carries a leverage reading. That is the “going forward” part: those series now accumulate daily, and the next event will be the first with a record of them on its eve. Whether they would have helped is a question the table will answer in time rather than assume now. Verified headlessly against the live snapshot: the event list, every row, and both base rates reproduce the independent Python computation.
Asked immediately whether the panel had flaws, the answer was yes, and the ones that could be fixed in the panel were. The outcome columns partly restate the selection rule — a shock was chosen because a 30% fall followed within thirty days, so that column proves nothing for shocks, and likewise the six-month column for tops — and the header now says so; the “kind” of event is assigned with hindsight and is labelled “turned out to be”. The base rate is split at 90: the very-expensive band carries 5 of its 12 episodes against 5 of 32 for all expensive episodes, and it is the band most of the flagged tops sat in. A threshold-sensitivity line reports the event count under neighbouring parameter choices — thirteen, ten and ten — so the reader can see that the list moves at the margin while the verdict does not. And the summary states that ten indicators across ten events guarantees some cell will appear to have caught any single event, so the table is to be read by its columns rather than mined for hits. What remains unfixable is stated rather than hidden: ten events and five tops is a small record, April and November 2021 are two ends of one bull market counted twice, and the MVRV history is a current-vintage series that may embed methodology revisions the day itself did not have.
Corrections before the panel was published. A review of the draft found that the base rates were counted by day rather than by episode: an expensive reading on 832 days with a fall following 90 of them, and the Pi Cycle fired on 323 days with a fall following 130, weight each state by how long it persisted and are the overlapping-window error this site refuses elsewhere. The figures above are the corrected episode counts; the day counts are recorded here so the change can be seen. The verdict sentences were computed from the counts rather than written beside them, so a future event that contradicts today's pattern changes the sentence rather than the page. The panel was retitled an event study, with the retrospective selection of events stated in its first sentence and the non-independence of its columns stated in its second; the assertion that the shocks were liquidation cascades was removed, because the leverage series that would support it do not exist before late 2025. Three further defects were repaired in the same pass: the additional snapshot files the panel needs were being awaited before the existing panels rendered, and now load after them; a failed MVRV feed labelled every row "before 2013 window" and now says the feed is unavailable; and forward-filling across gaps in Fear and Greed and DVOL is limited to seven days. Two pre-existing defects on the same page were fixed at the same time: the 2-year MA and 200-week medians took the upper-middle observation on even counts and now use the conventional median, and the stock-to-flow verdict said scarcity "stopped explaining price", which is causal language the data does not support; it now says the published specification lost calibration, with the price-to-model ratio printed beside the log-point figure. An episode-counted Pi Cycle at four of four is not a rate; the panel says so.
The valuation composite is now computed once. Where Things Stand, the KPI module and the Indicator Autopsy event study had each carried their own implementation of the same rule. The daily job now writes composite.json: the as-of percentiles of MVRV, the Mayer multiple and the expanding-window power-law deviation, ranked against prior days only from 2013 with at least 250 prior observations, averaged without weights and cut at 10, 30, 70 and 90. The event study reads that file and falls back to its own computation only if the file is missing, and says which it used. Where Things Stand still computes its own strip, because its charts need the intermediate series, but it now fetches the pipeline’s value and prints whether the two agree; on the day of writing they do, 38 against 37.8. If they ever disagree the page will say so in the strip rather than hide it.
The event study has its ex-ante companion. A reviewer objected, correctly, that an event study answers “what was visible before known declines” and not “what happened when the rule fired”. The second question is now answered in a panel above the event study, on the Technical Signals protocol: each rule triggered with only the information of the day, the median return that followed at ninety days and one year beside the median after a randomly chosen day, and the difference in points. No rule here has twenty triggers, so none gets an interval, and the panel says why. The result rewrote one of the page’s own verdicts: the 2-Year MA buy band’s median of +71% a year after entry had been described as “useful”; the median after any day in the same history is +96%, so the buy band has been followed by gains but by less than a random day, and the verdict now says that, computed from the two medians rather than written. The 200-week cross below sits ahead of the baseline (+153% against +96%) on seven triggers; the Pi Cycle, a top signal, is followed by negative medians as it should be, on four.
Three research outputs the pages read rather than derive. A null test for the Metcalfe model, asked for by a reviewer: on the 2017 window, ln price regressed on calendar time alone predicts the following year with 60.5 log points of error and an R² of 0.830; on the user stock alone, 58.0 points and 0.845; on both together, 77.9 points, with the time coefficient turning negative. The user stock carries slightly more information than time, and the joint model is worse than either because the two regressors are near-collinear on a series that has grown six orders of magnitude; it is reported because it was asked for, with that caveat printed beside it. An independence matrix: Spearman correlation of the daily levels since 2019 of the ten readings this site publishes as states, now on the dashboard, so that the columns which agree can be seen to be one factor. Seven pairs sit at or above 0.8; MVRV, the power-law deviation and the composite that averages them are, as they should be, largely one measurement. And a change feed, changes.atom, one entry per snapshot listing what moved against the previous row of the history file and the valuation state it implies. No signals; a reader who subscribes gets the same sentences the dashboard’s new “what changed” panel prints. All three are written by the daily job from the same snapshot, in an isolated module, so a failure in any of them is recorded in the KPI file and does not stop the run.
Each page touched was rendered headlessly against the live snapshot files before packaging; the headless run caught one defect in the draft (a window constant scoped inside the fallback branch) that a static check had passed, and every figure above reproduces the independent Python computation.
Osprey OBTC is now measured. REX serves the Osprey Bitcoin Trust page from the server with the holdings table in plain HTML — a bitcoin row with a coin count and an as-of date — so it meets the same standard as the four daily issuers and is parsed with a fixture test against the page as it read on 1 September 2026 (935 coins). It is small; it is included because it is primary and daily, not because it moves the total. The Morgan Stanley Bitcoin Trust is assessed and documented: its product page is a client-side template whose holdings section is filled from an internal JSON endpoint, and no holdings file is served to a plain request, which is the same class as Fidelity and Franklin. The universe file now records it with that reason rather than as pending.
The options term structure. From the Deribit chain already fetched for the skew, the daily job now takes the 50-delta level on every listed expiry (the same construction the skew uses), interpolates in days to expiry to 7, 30, 90 and 180 days without extrapolating, and publishes those levels and the 180-minus-30-day slope as series; the full curve for the day goes to the manifest. The Flows page shows the tenors and the slope in words: upward-sloping is the normal state of a calm surface, inverted marks stress. Percentile ranks unlock as history accrues, like the other second-tier series. The construction was verified on a synthetic chain with a known smile; the first live run should be read once against the exchange’s own display.
The quarterly layer, and a correction to the plan. The intended source had been Form N-PORT, the monthly holdings report. Spot bitcoin ETPs are 1933-Act grantor trusts, not 1940-Act funds, and do not file it; their periodic primary disclosure is the 10-Q and 10-K, in which the coin quantity is tagged in XBRL (iShares’ first 10-Q tags 252,011 bitcoin as of 31 March 2024, for instance). The daily job now reads the 13-name universe, of which 7 currently parse (IBIT, FBTC, GBTC, BTC, ARKB, EZBC, OBTC) from the SEC’s companyfacts API, finds the coin-quantity concept by rule (each issuer uses its own custom tag), keeps one value per period end with the latest filing winning, and publishes etf_quarterly.json as a reconciliation layer: public, keyless, primary preferred, up to 45 days stale by construction, never merged into the daily series. Where a trust also has a daily series the quarter-end figure is compared with the daily file on that date and the difference published, which is the first independent check the daily parsers have had. The Flows page carries the table. The concept-finding rule was tested on a fixture built from the iShares filing, including an amendment superseding an earlier value; the first live run should be read once against a filing before any of its figures are quoted, and the manifest says so.
A reviewer of the previous build made one point that changed a number. The ex-ante table on the Indicator Autopsy had compared each rule with the median return after any day since 2010, but a rule can only fire on days its inputs exist: the 2-year moving average after day 730, the 200-week after day 1,400, the Pi Cycle after day 350. Days a rule could not see should not be in its baseline. Each rule is now compared with the median over the days on which it could have fired, with a completed forward window, and the note states the count. The 2-year MA buy band, which had trailed the all-days baseline by 25 points, trails its eligible-day baseline (+78% at one year, not +96%) by 7; the 200-week cross is 84 points ahead of its eligible baseline of +69% rather than 58 ahead of +96%. The direction of every verdict survived; the sizes did not, which is the point of matching. The Technical Signals page still uses the full-history baseline for the reasons its method note gives, and its rules need at most 200 days of history, so the mismatch there is a fraction of this one; it is recorded here as the next thing to check rather than changed in this build.
Three wording corrections from the same review. The null test now reports the network-versus-time difference year by year as well as pooled: pooled, the user stock predicts the following year 2.5 points better than calendar time; across the seven refit years it was better in five, with the difference ranging from −24 to +20 points, so the panel says the user stock does not clearly outperform the simpler model and that this is not a finding that the Metcalfe model fails. The dashboard panel that had been headed “how independent are the readings” is now “evidence dependence”, because a correlation of 0.8 establishes strong association, not identity; what it establishes is that such readings are not independent confirmation, and that is all the panel claims. And the page count is stated one way everywhere: thirteen pages: the dashboard, eleven research pages and this one.
The caveat recorded in the previous entry is closed. Each of the eight rules on the Technical Signals page is now compared with the median over the days on which it could have fired — after day 14 for relative strength, 26 for the MACD, 200 for the moving-average crosses and 750 for the two squeeze rules — and the baseline side of every bootstrap interval is drawn from the same eligible set. The full-history median stays in the banner for context only. No verdict changed: six rules still show no clear evidence, the Bollinger squeeze still shows evidence of trailing at one month, and relative strength above 70 still shows evidence of an edge at one and three months. The sizes moved where eligibility mattered, which is the squeeze rules: their all-days baseline had included 2010 to 2012, days on which a two-year lookback did not exist, so Bollinger’s one-year difference moves from −19 to −1 points and realised volatility’s from +14 to +32, both still inside intervals that include zero; the golden cross moves from +5 to +12 at one year, likewise inside its noise. Relative strength and the MACD, which need a fortnight of history, barely move. Rendered headlessly against the live snapshot before and after; the before and after tables are both recorded here so the change can be seen for what it is.
Four small corrections from a review of the v8 build, none of which changes a number on the day of writing. Right-censoring. A state episode still running today, or one that ended within the last thirty days, has an outcome that is not yet known; it had been counted in the base-rate denominator as “no fall”. Episodes now enter the denominator only once their whole thirty-day horizon has elapsed, and the note says how many are waiting. Today the composite reads average, so nothing is excluded and the figures stand at 5 of 32, 5 of 12 and 4 of 4. Pi Cycle. The base-rate note had said the indicator was “in a fired state on four occasions”, which describes the condition persisting, not the crossing that is the rule as published; the note now states both, four condition episodes and four crossings, and points to the ex-ante comparison for the crossings. The grouping convention. Declines within 180 days of one another are treated as one episode. That is a convention, not an estimate, and it is now said so on the panel with the count under 90-, 180- and 365-day grouping: fourteen, ten and six events on the current data. Naming. The panel is an ex-ante signal comparison, not a test: with four to a dozen triggers per rule there is no interval and no verdict, and calling it a test implied machinery the page does not use. The Autopsy’s strap now reads “the popular signals, measured” and names what the page contains. The dependence panel on the dashboard states that it is a level correlation, not a causal or factor-independence test.
The fifth item from the same review, taken rather than deferred. An eligibility-matched baseline compares a crossing with every day the line existed; but a crossing is a transition, and the days that most resemble a non-event are those on which the line existed and was not crossed. Each rule’s baseline is now the median over eligible days excluding the trigger days and the ninety days after each, so the aftermath of a crossing is not counted as “did not cross”. The difference then answers whether crossing the line added information over days the line existed and was not crossed. On the current data the 2-year MA buy band, which had trailed the eligible-day baseline by 7 points, is level with the days it could have fired but did not: +71% against +71%, a one-point difference, and the verdict now reads “indistinguishable” rather than “behind”. The 200-week cross is 96 points ahead of its non-firing days (+153% against +58%), on seven triggers, still without an interval. The Pi Cycle and the 5× sell band move by a few points. The all-days figure, the eligible-day figure and the transition-matched figure are all on this page now, so the reader can see that the choice of baseline is a choice, and which one the table uses.
Asked whether a log-periodic power law would have caught the October 2025 event, the answer was that it is the one model in this family designed for cycle tops and makes no claim on shocks; the useful thing was to build it properly and publish its record beside the others. The pipeline now computes the Johansen–Ledoit–Sornette model in the Filimonov and Sornette (2013) linearised form, in which the four linear parameters are solved by least squares for each candidate critical time, exponent and log-frequency, and only those three are searched, by a fixed coarse grid (twelve critical times spanning the full interval the primary filter permits, three exponents, three frequencies) followed by Nelder–Mead. The published reading is the share of eight window lengths, 120 to 730 observations, whose best fit passes the qualification filters, computed daily from 1 January 2013 as of each day on that day’s data only. A window of W days is the last W observations. The full daily history, 4,993 points, was computed once and ships with the repository; each run extends it by the days not yet stored.
The specification was fixed before evaluation, and the reason is recorded because an earlier draft got it wrong. That draft described its filters as “Gerlach et al. style” and justified them as the set under which the model performs best; a reviewer pointed out that the filters were not the published ones and that choosing a specification by its historical record is selection bias. Both points were right. The primary specification is now the Gerlach, Demos and Sornette (2019) rule set as published: exponent strictly between 0 and 1, log-frequency between 4 and 25, negative power-law coefficient for a positive bubble, critical time within one window length ahead, damping at least 0.5, and at least two and a half oscillations, that last condition applied only when the oscillation amplitude relative to the power-law term is at least 5%, as the paper specifies. It is used because it is an externally defined rule set, not because of how it performs. A stricter set — exponent 0.1 to 0.9, frequency 6 to 13, critical time within a fifth of the window, damping at least 1 — is computed alongside as a sensitivity analysis and is never used to select a result. Both sets are published in the data file with the series, and the fit diagnostics include the oscillation-to-trend ratio so the size of the log-periodic component can be read.
Under the published filters the model is not quiet. A positive reading of some size appears on about 39% of days and a reading of 0.5 or more on about 10%, in twelve runs with a median length of 23 days and a longest of 210. Evaluated at the level of signal days with a completed year — 525 of them — a fall of 40% or more within the following year came after 23% of those days, against 34% of all days since 2013; a doubling came after 68% of them against 53%. (These figures come from an earlier build with a narrower critical-time search and are retained only as a development note. The current specification, recomputed on the full permitted interval to an exact boundary, gives 561 signal days in 18 runs; a 40% fall within a year followed 28% of them against 34% of all days, a doubling 64% against 53%, random-block probability 0.67. Every panel on the site uses the recomputed series.) Against ten thousand random draws of day-blocks matching the number and lengths of the signal runs, the probability of a hit rate at least as high as the observed one is 0.70. (earlier search; now 0.69) On this record the model fires during the accelerating phase of advances, which mostly continued. Under the strict sensitivity set the confidence never reached 0.5 on any day. The clearest single reading in the record is the 17 December 2017 top, at 0.75 on its eve and 0.75 a month before; it is also true that the reading had been at 0.5 or more for most of the preceding eleven months, from a price near $1,100. On the eve of the other four rule-defined tops it read 0.25, 0.00, 0.00 and 0.00, and on the eve of every shock it read zero. These are three different scores on three different denominators — tops and shocks, episode starts, and signal days — and the page keeps them apart rather than blending them.
Three findings from the build are recorded because a reader may otherwise take the model’s reputation for its record. The fit is genuinely multi-modal: a first implementation without a grid search missed the 2017 fits altogether, and the result is stated as conditional on the fixed search, which is not the original authors’ optimiser. The qualifying fits of December 2017 have small oscillation amplitude; the detectable part of that bubble was the super-exponential trend rather than the log-periodicity in the model’s name, and Pele and Mazurencu-Marinescu-Pele (2019) report the same of their own fits, with the oscillation coefficient near zero. And their published result, a next-day critical time from a 700-observation window ending 11 December 2017, could not be reproduced: on that window a standard fit drifts to the exponent boundary with a critical time months out; the detection here comes from the shorter windows and is stated as window-dependent. The structural critique of Brée and Joseph (2013), that LPPL fits are unstable and the published criteria fail out of sample, is consistent with this record.
The model has its own panel on the Indicator Autopsy with the confidence drawn under price, the episode table with the strict reading beside each, the signal-day evaluation against the random baseline, and a column in the day-before table where the values are exact daily readings. Elsewhere it appears only as a reading: one clause on the dashboard’s technical line and one clause in the Evidence Brief on Where Things Stand, each carrying the note that confidence is a robustness measure across windows and not a probability, and each pointing to the record. It is not a gauge and it raises no alert. Verified headlessly: the strip, the episode table, the chart, the day-before column, the dashboard clause and the brief clause reproduce the pipeline’s file, and the file reproduces the independent computation.
A further external review of the LPPL work, made on the earlier draft, raised six points; three were already resolved by the fixed primary specification and the run-based evaluation, and the other three are adopted as wording. The reading is labelled a qualified-fit confidence, house implementation, because eight windows is a coarser ensemble than the published multiscale indicator, which scans many nested windows; the shocks are said to read zero “consistent with the model’s intended focus” rather than “as it should”, since the first is a description and the second a validation claim; and the 2017 detection is described as reproducible under the stated specification and strongly window-dependent, rather than as real, which would be a claim about the bubble rather than the fit. It is also stated that neither filter set uses a relative-error criterion, so there is no formula to disclose. The results were not changed by the review, as they should not be.
The final external review of the LPPL package asked for two changes and signed off on the rest. The strict sensitivity set is no longer attributed to any single paper; it is described as a commonly used restrictive parameter set, included only as a sensitivity analysis. And the random-block sampler behind the baseline had an inexact non-overlap test — it compared a candidate block’s length against earlier starting points, so a longer earlier block could still overlap a shorter later one. It now tracks placed intervals and rejects any intersection. The baseline was regenerated: the probability of a hit rate at least as high as the signal’s under random blocks moved from 0.70 to 0.71, which changes nothing and was fixed anyway, because a randomisation should be exact whether or not its result is favourable.
A review of the combined release as one system raised two LPPL points, both adopted. First, the numerical search for the critical time covered only the first 40% of the window ahead while the primary filter permits a full window ahead, so the filter described the qualification rules but not the calibration; the search now spans the full permitted interval with twelve grid points, and the entire daily history was recomputed under it. The record moved modestly and the conclusions did not: 424 signal days in 16 runs (from 525 in 12), a 40% fall within a year after 25% of them against 34% of all days, a doubling after 64% against 53%, and a random-block probability of 0.69. The 2017 top still reads 0.75 on its eve; the 2021 and October 2025 tops still read zero. Second, the reading is described as a share of eight windows, and it is now published only when all eight exist; on this price series that has always been the case from the first published day, so the rule is a guard rather than a change. The LPPL file is also now written atomically, so a failed daily extension cannot damage the last good history. Two documentation points were corrected with it: the release notes still called the Where Things Stand panel a decision brief, and the build status now says that its thirteen external source families are external, with LPPL, the composite and the research layers derived from them rather than counted among them.
Three questions from the author decided the last changes before publication: where the synthesis page belongs, how a visitor is meant to move through twelve pages, and how far ahead the bubble model fires. The subnav on every page now runs synthesis first — Dashboard, Where Things Stand — then the valuation lenses, then market structure, then the two pages that show what does not work, then Methods; the previous order was the order the pages were built in. The dashboard opens with today’s composite state read from composite.json, the “what changed” panel moved above the grid, and a “start here” block that gives a first visitor three steps and a returning one the two places to look. The extended-indicator table on the dashboard carries the LPPL reading with its record beside it, and the evidence brief on Where Things Stand carries one LPPL line under the reduce question, stating that a qualified bubble fit on the record preceded a large fall less often than an ordinary day did.
The lead-time question got its own table on the Autopsy. For every run of days at or above 0.5 since 2013 it shows the first day fired, the run’s length, the highest close within the following year, the days and the rise to it, and the fall from that high. The 2017 row is the one to read: the condition first fired on 18 January 2017 at $907; the high came 333 days later at $19,280, twenty-one times higher, and only then came the 83% fall. The model marks a condition that can persist for most of a bull market; treating its first firing as a sell signal would have cost the whole year. That is now stated on the panel, computed from the same series, rather than left for a reader to work out.
Two further reviews of the complete package converged on a short list, and every item was adopted. The Metcalfe input is now named for what it is everywhere it appears: a cumulative address-activity proxy, the running sum of daily unique addresses, in which an address is counted again on every day it is used — a proxy for network size, not a count of distinct users. The null comparison is correspondingly a Metcalfe proxy vs time-model comparison, and its question is whether that proxy adds information beyond time, not whether “the network” does. The ETF coverage sentences say five issuers by ticker (IBIT, ARKB, BITB, HODL, OBTC), the daily series is called a holdings-derived flow with the disclosure-to-disclosure convention stated, and the quarterly layer says what it is: thirteen trusts attempted, seven currently resolving to a recognised coin-quantity element, the rest reported unresolved with what they do tag. The source principle is restated accurately as free, keyless, publicly accessible sources with primary sources preferred, since the relative-value layer uses a public mirror for two monthly series. The dependence matrix no longer speaks of factors; it summarises evidence overlap. The hand-maintained reference figures now live in data/references.json, which both pages read, with the in-page values as fallback, and the Cane Island as-of date is 1 September 2026 in one place.
The LPPL calibration had one remaining inconsistency: the optimiser excluded critical times within a day of the window end while the filter permits them, and the window convention was stated two ways. The search now covers (t2, t2 + dt] to within a hundredth of a day, dt is t2 − t1 for every window, readings are computed through the last completed daily-average observation by design, and the trailing thirty days are recomputed on every run so a revised daily average is absorbed. The full history was recomputed a third time. The record moved again and the conclusion did not: 561 signal days in 18 runs (from 424 in 16), a 40% fall within a year after 28% of them against 34% of all days, a doubling after 64% against 53%, random-block probability 0.67. The 2017 top now reads 0.625 on its eve, April 2021 reads 0.25 and November 2021 0.125 — both now faintly qualifying under the exact boundary — and October 2025 still reads zero. Earlier figures in the entries above are superseded by these. The lead-time table notes that the early-2014 runs fired after the December 2013 top, which is part of the record rather than a display fault.
Two wording corrections on the newest panels. The “if you came here to decide” box on Where Things Stand had drifted back into instruction in three sentences; it now describes — what a fall of half would do is a fact about the reader’s position that no reading changes; the record of a signal is on the pages named; holding is a decision with evidence for and against it — and the sentence naming it the best-supported course is gone. The dashboard’s start-here text said the readings were independent observations while the dependence panel beneath it shows seven pairs correlating at 0.8 or above; it now says separate, not votes, and not independent, and points to the panel. The deployment script omitted the LPPL module and history and checked an ETF field before fetching it; both corrected, and the script now takes the package’s LPPL history only on first deploy or when newer than the live file.
Asked what the toolkit lacked among the series people correlate with bitcoin cycles — the Fed funds rate, M2, the ISM index — the honest inventory was that the readings existed in the snapshot but had never been tested, and that the popular ones were overlays rather than results. The new page publishes nine FRED series raw (the effective funds rate, the two-year yield, M2, the Fed balance sheet, the Treasury account, reverse repo, the high-yield spread, the VIX and ten-year breakevens), assembles net liquidity from its three legs, and tests each against bitcoin the way the technical signals were tested. For every series the thirteen-week change is correlated, Spearman with midranks, with bitcoin’s forward thirteen-week log return at every lead from zero to twenty-six weeks on weekly observations since 2013. Each point carries a moving-block bootstrap interval (26-week blocks, 200 draws, 5th to 95th percentile) and sits against a baseline built from the same series circularly shifted by one to five years, which preserves its own autocorrelation and removes any relation to bitcoin; the 95th percentile of that band is what “no relationship” produces on data like this. A verdict of evidence requires the observed correlation outside the band with the interval excluding zero at three consecutive leads.
Two series are stated as not carried and why: the ISM manufacturing PMI is proprietary with no free primary feed since FRED dropped it in 2016, and “global M2” is an author-specific blend of central-bank aggregates with no single public definition, so US M2 is published and the blend is not; the famous “global M2 leads bitcoin by ten weeks” chart is not reproducible as published. On synthetic random-walk fixtures the page correctly reports no evidence for every series with bands of about ±0.15 to ±0.27, which is the noise floor of roughly seven hundred overlapping weekly observations and the bar a live series must clear. The live results appear after the first pipeline run that carries macro.json; whatever they show, they will show it with a lead, an interval and a baseline, and the page will not turn them into a forecast.
The macro page’s first live run corrected three things. The Treasury General Account is published by FRED in millions of dollars, not billions, so net liquidity had been computed hugely negative and had dropped out of the test; the legs are now converted explicitly and net liquidity reads about $5.8 trillion. The charts were drawn while the page was still hidden and so measured no width; the page now reveals before it draws. And the verdicts moved between two runs on the same data — the high-yield spread read as evidence in one and not the other, the two-year yield the reverse — because both sit within a few hundredths of the shifted-series band and the band is estimated from random draws whose sequence changed when a series was added. Each series now has its own fixed seed, the draws are increased, and the verdict has three tiers: evidence requires a margin of 0.03 beyond the band at three consecutive leads; within 0.03 of the band is reported as marginal; the rest is none. On the live data the first result is that no macro series clears the bar: the two-year yield (−0.26 at lead zero) and the high-yield spread (−0.47 at a 26-week lead) are marginal, net liquidity, M2, the funds rate, the VIX and breakevens sit inside the band at every lead. The liquidity overlay everyone draws describes two series that rose together in 2020–21; on this test it does not lead.
No further changes are planned as of the last entry above. The suite has now had more review than it has had readers, and the remaining risk is no longer statistical correctness but the temptation to keep adding: another indicator, another composite, a score. Each would make the research worse, and each is declined in advance.