deviant/Parameters/PriceAnalysis/btc-cycle-report.html
walerikus 35076606c7 chore: checkpoint in-flight work across shell, contracts, and docs
Snapshot of the shared working tree's outstanding changes (multiple
concurrent workstreams), excluding generated runtime state files
(.football-tote-state.json, .tote-platform-state.json, .usdm-historical-chart.html).

Spans: wallet shell (connect/, keystore MultiKeyStore+vault, screens,
currency picker, sign-message), verify artifacts, new Potidaea/DRA/tote
contracts + regtest suites, cross-chain/T6 + WalletConnect Parameters,
a telegram-orderbook subproject, design mockups, and docs. See
shells/app/WALLET-COORDINATION.md for the per-file ownership split.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 02:02:05 +02:00

357 lines
No EOL
53 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bitcoin Cycle Analysis</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.min.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
<style>
:root{
--bg:#0b1019;--panel:#121b2c;--panel2:#0f1726;--line:#23304a;
--ink:#e9eef7;--muted:#8a98b2;--faint:#5a6884;
--e13:#5b8def;--e17:#2bb6a8;--e21:#f0a93b;--e25:#ec5a3c;
--pk:#9bb4e8;--pb:#e08a5a;--death:#ec5a3c;--gold:#2bb6a8;--sma:#f0a93b;--ema:#5b8def;
}
*{box-sizing:border-box}html{scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:"Inter",system-ui,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased}
.mono{font-family:"JetBrains Mono",monospace;font-variant-numeric:tabular-nums}
.wrap{max-width:1060px;margin:0 auto;padding:0 24px}
h1,h2,h3{font-family:"Space Grotesk",sans-serif;line-height:1.15;letter-spacing:-0.02em;font-weight:700}
header{padding:72px 0 36px;border-bottom:1px solid var(--line)}
.eyebrow{font-family:"JetBrains Mono",monospace;font-size:12px;letter-spacing:0.28em;text-transform:uppercase;color:var(--faint);margin-bottom:18px}
h1{font-size:clamp(34px,6vw,60px);margin:0 0 18px}
.lede{font-size:clamp(17px,2.4vw,21px);color:var(--muted);max-width:640px;margin:0}
.spine{display:flex;gap:6px;margin:36px 0 4px;height:8px;border-radius:4px;overflow:hidden;max-width:640px}
.spine span{flex:1}
.spinelab{display:flex;gap:6px;max-width:640px;font-family:"JetBrains Mono",monospace;font-size:11px;color:var(--faint)}
.spinelab span{flex:1}
section{padding:56px 0;border-bottom:1px solid var(--line)}
.snum{font-family:"JetBrains Mono",monospace;font-size:12px;color:var(--faint);letter-spacing:0.2em;display:block;margin-bottom:8px}
h2{font-size:clamp(24px,3.6vw,34px);margin:0 0 10px}
.sub{color:var(--muted);max-width:680px;margin:0 0 28px}
p{max-width:680px;color:#c3cde0}
p.tight{margin:14px 0}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:22px 22px 14px;margin:22px 0}
.chartbox{position:relative;height:340px}
.chartbox.tall{height:400px}
.cap{font-size:13px;color:var(--muted);margin:14px 2px 4px}
.legend{display:flex;gap:18px;flex-wrap:wrap;font-size:13px;color:var(--muted);margin:4px 2px 0}
.legend span{display:inline-flex;align-items:center}.legend i{width:10px;height:10px;border-radius:2px;margin-right:7px;display:inline-block}
table{width:100%;border-collapse:collapse;margin:8px 0;font-size:14px}
caption{text-align:left;font-family:"Space Grotesk";font-weight:500;color:var(--muted);padding:6px 2px 12px;font-size:14px}
th,td{padding:11px 12px;text-align:right;border-bottom:1px solid var(--line)}
th:first-child,td:first-child{text-align:left}
thead th{font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:0.05em;text-transform:uppercase;color:var(--faint);font-weight:500}
tbody td.num{font-family:"JetBrains Mono",monospace;font-variant-numeric:tabular-nums}
.tag{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:9px;vertical-align:baseline}
tr.prov td{color:var(--muted)}.big{font-weight:700;color:var(--ink)}
.flipcard{background:linear-gradient(135deg,#1a2334,#16202f);border:1px solid var(--e25);border-radius:14px;padding:24px 26px;margin:24px 0}
.flipcard h3{margin:0 0 12px;font-size:18px;display:flex;align-items:center;gap:10px}
.flipcard h3 .b{font-family:"JetBrains Mono",monospace;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--e25);border:1px solid var(--e25);border-radius:20px;padding:3px 9px}
.flipcard p{font-size:14.5px;color:#cdd6e6;margin:0 0 14px}
.fliprow{display:flex;gap:10px;flex-wrap:wrap;font-family:"JetBrains Mono",monospace;font-size:13px}
.fliprow div{flex:1;min-width:120px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.fliprow .c{font-size:11px;color:var(--faint);text-transform:uppercase;letter-spacing:.05em}
.fliprow .v{font-size:20px;font-weight:700;margin-top:4px}
.above{color:var(--gold)}.below{color:var(--e25)}
.find{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:8px}
.card{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:20px 22px}
.card h3{font-size:16px;margin:0 0 8px;color:var(--ink)}
.card .k{font-family:"JetBrains Mono",monospace;font-size:26px;font-weight:700;display:block;margin:0 0 10px}
.card p{font-size:14px;color:var(--muted);margin:0}
.status{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:8px 0 6px}
.stat{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:18px}
.stat .l{font-family:"JetBrains Mono",monospace;font-size:11px;letter-spacing:0.08em;text-transform:uppercase;color:var(--faint);margin-bottom:8px}
.stat .v{font-family:"JetBrains Mono",monospace;font-size:22px;font-weight:700}
.stat .d{font-size:12px;color:var(--muted);margin-top:4px}
footer{padding:46px 0 80px;color:var(--faint);font-size:13px}
footer p{color:var(--faint);max-width:760px}footer b{color:var(--muted);font-weight:600}
@media(max-width:720px){.find,.status,.fliprow{grid-template-columns:1fr}.chartbox{height:300px}header{padding:48px 0 28px}th,td{padding:9px 7px;font-size:13px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
</style>
</head>
<body><div class="wrap">
<header>
<div class="eyebrow">Bitcoin · long-term cycles · 2010 — 2026</div>
<h1>Each cycle gains less,<br>and falls less.</h1>
<p class="lede">Four peak-to-peak epochs, one halving in each, measured by the two ratios that matter — how far the top climbs above the last, and how far the crash cuts below it. Both compress, cycle after cycle — and in 2021 their order flipped.</p>
<div class="spine"><span style="background:var(--e13)"></span><span style="background:var(--e17)"></span><span style="background:var(--e21)"></span><span style="background:var(--e25)"></span></div>
<div class="spinelab"><span>2013</span><span>2017</span><span>2021</span><span>2025</span></div>
</header>
<section>
<span class="snum">01 / PRICE</span>
<h2>Sixteen years, log scale</h2>
<p class="sub">Monthly closes from $0.07 (Jul 2010) to ~$61k (Jun 2026). Triangles mark each cycle peak (up) and the bottom that followed (down), colored by epoch.</p>
<div class="panel"><div class="chartbox tall"><canvas id="priceChart"></canvas></div>
<div class="cap">Log scale. Source: Coin Metrics PriceUSD through 2026-05-24; Jun 2026 estimated.</div></div>
</section>
<section>
<span class="snum">02 / RATIOS</span>
<h2>The two ratios, with prices</h2>
<p class="sub">Peak ÷ previous peak is the upside multiple between tops. Peak ÷ own bottom is the crash ratio. Both fall every cycle.</p>
<table>
<caption>Cycle prices and ratios</caption>
<thead><tr><th>Cycle</th><th>Peak</th><th>Bottom</th><th>Peak ÷ prev</th><th>Peak ÷ bottom</th><th>Bottom ÷ prev peak</th></tr></thead>
<tbody>
<tr><td><span class="tag" style="background:var(--e13)"></span>2013</td><td class="num">$1,156</td><td class="num">$172</td><td class="num big">37.3×</td><td class="num">6.72×</td><td class="num above">5.55×</td></tr>
<tr><td><span class="tag" style="background:var(--e17)"></span>2017</td><td class="num">$19,783</td><td class="num">$3,189</td><td class="num big">17.1×</td><td class="num">6.20×</td><td class="num above">2.76×</td></tr>
<tr><td><span class="tag" style="background:var(--e21)"></span>2021</td><td class="num">$69,044</td><td class="num">$15,598</td><td class="num">3.49×</td><td class="num big">4.43×</td><td class="num below">0.79×</td></tr>
<tr class="prov"><td><span class="tag" style="background:var(--e25)"></span>2025 <span style="font-size:11px;color:var(--faint)">now</span></td><td class="num">$126,198</td><td class="num">~$60,000*</td><td class="num">1.83×</td><td class="num big">2.10×*</td><td class="num below">0.87×*</td></tr>
<tr class="prov" style="background:rgba(43,182,168,0.05)"><td><span class="tag" style="background:var(--e17)"></span>2025 <span style="font-size:11px;color:var(--e17)">est.</span></td><td class="num">$126,198</td><td class="num">~$33,000†</td><td class="num">1.83×</td><td class="num big">3.85׆</td><td class="num below" style="color:var(--e17)">0.48׆</td></tr>
</tbody>
</table>
<p class="sub" style="margin-top:8px"><b>* current state</b>, low so far (~−52%) — not a confirmed bottom, so the 0.87× <em>breaks</em> the declining sequence. <b>† trend-following estimate</b>: continuing the shrinking drawdown trend (−85.1% → −83.9% → −77.4% → ~−74%) puts the bottom near $33k and the ratio at <b>0.48×</b>, which <em>continues</em> the pattern: 5.55 → 2.76 → 0.79 → <b>0.48</b>. Range $30–36k (0.44–0.53).</p>
<div class="flipcard">
<h3><span class="b">the 2021 flip</span> The crash now outweighs the climb</h3>
<p>In 2013 and 2017 the upside multiple was the bigger number — each top dwarfed the last (37× and 17×) far more than it later fell (6.7×, 6.2×). In <b>2021 the order reversed</b>: peak÷prev (3.49×) dropped below peak÷bottom (4.43×), and 2025 repeats it. That reversal is the same fact as <b>the cycle bottom falling below the previous cycle's peak</b> — the right-hand column crossing 1.0×.</p>
<div class="fliprow">
<div><div class="c">2013 bottom vs '11 peak</div><div class="v above">5.55× ↑</div></div>
<div><div class="c">2017 bottom vs '13 peak</div><div class="v above">2.76× ↑</div></div>
<div><div class="c">2021 bottom vs '17 peak</div><div class="v below">0.79× ↓</div></div>
<div><div class="c">2025 low vs '21 peak</div><div class="v below">0.87× <span style="font-size:12px;color:var(--faint)">now</span></div><div style="font-size:12px;color:var(--e17);margin-top:3px">~0.48× est. ↓</div></div>
</div>
<p style="margin:14px 0 0;font-size:13px;color:var(--muted)">A buyer of the 2017 top was underwater at the 2021 bottom; a buyer of the 2021 top is underwater at the 2025 low. In the first two cycles, that never happened — every floor sat above the prior ceiling. Note the current 0.87× sits <em>above</em> 2021's 0.79× — but only because the 2025 low isn't in yet; following the drawdown trend, the confirmed-bottom ratio lands near <b>0.48×</b>, continuing the decline rather than reversing it.</p>
</div>
<div class="panel"><div class="chartbox"><canvas id="ratioChart"></canvas></div>
<div class="cap">Log scale. Both ratios fall in lockstep; in 2021 the crash ratio (orange) overtakes the peak-to-peak gain (blue).</div></div>
<div class="panel"><div class="chartbox"><canvas id="ddChart"></canvas></div>
<div class="cap">Drawdown depth from each cycle peak to its bottom. Shrinking every cycle: −94% → −85% → −84% → −77% → −52%* so far. The teal <b>2025 est.</b> bar (−74%) continues the shrinking trend to a confirmed bottom — the −52%* is the current incomplete low, not the floor.</div></div>
</section>
<section>
<span class="snum">03 / THE CROSSES, DRAWN</span>
<h2>Where the monthly crosses actually fire</h2>
<p class="sub">The same price series with the two moving-average systems overlaid. Red triangles are death crosses (fast below slow), green are golden crosses (fast above slow). Note how late on the price they land — these are confirmations, not calls.</p>
<div class="panel"><div class="chartbox tall"><canvas id="smaChart"></canvas></div>
<div class="legend"><span><i style="background:var(--ink)"></i>Price</span><span><i style="background:var(--sma)"></i>10-mo SMA</span><span><i style="background:var(--muted)"></i>20-mo SMA</span><span><i style="background:var(--death)"></i>death cross</span><span><i style="background:var(--gold)"></i>golden cross</span></div>
<div class="cap">Canonical (simple) MA cross — 10-month vs 20-month SMA. Log scale, monthly.</div></div>
<div class="panel"><div class="chartbox tall"><canvas id="emaChart"></canvas></div>
<div class="legend"><span><i style="background:var(--ink)"></i>Price</span><span><i style="background:var(--ema)"></i>10-mo EMA</span><span><i style="background:var(--muted)"></i>21-mo EMA</span><span><i style="background:var(--death)"></i>death cross</span><span><i style="background:var(--gold)"></i>golden cross</span></div>
<div class="cap">EMA cross — 10-month vs 21-month EMA. Faster to weight recent price, but still lagging. Log scale, monthly.</div></div>
</section>
<section>
<span class="snum">04 / CHECKPOINTS</span>
<h2>Four moments, and the time between them</h2>
<p class="sub">Peak → death cross → downtrend ends → golden cross (10/21 EMA). A negative Death→Bottom means price bottomed <em>before</em> the cross fired.</p>
<table>
<caption>10/21 EMA checkpoints &amp; timing (months)</caption>
<thead><tr><th>Cycle</th><th>Peak</th><th>Death X</th><th>Bottom</th><th>Golden X</th><th>Pk→Death</th><th>Death→Bot</th><th>Bot→Gold</th><th>Pk→Bot</th></tr></thead>
<tbody>
<tr><td><span class="tag" style="background:var(--e13)"></span>2013</td><td class="num">2013-11</td><td class="num">2015-03</td><td class="num">2015-01</td><td class="num">2016-01</td><td class="num">16.0</td><td class="num">−2.5</td><td class="num">12.5</td><td class="num big">13.5</td></tr>
<tr><td><span class="tag" style="background:var(--e17)"></span>2017</td><td class="num">2017-12</td><td class="num">2019-02</td><td class="num">2018-12</td><td class="num">2019-05</td><td class="num">14.4</td><td class="num">−2.5</td><td class="num">5.5</td><td class="num big">11.9</td></tr>
<tr><td><span class="tag" style="background:var(--e21)"></span>2021</td><td class="num">2021-11</td><td class="num">2022-08</td><td class="num">2022-11</td><td class="num">2023-11</td><td class="num">9.7</td><td class="num">+2.7</td><td class="num">12.3</td><td class="num big">12.4</td></tr>
<tr class="prov"><td><span class="tag" style="background:var(--e25)"></span>2025</td><td class="num">2025-10</td><td class="num">2026-06</td><td class="num">pending</td><td class="num">pending</td><td class="num">~8</td><td class="num">—</td><td class="num">—</td><td class="num">—</td></tr>
</tbody>
</table>
<div class="panel"><div class="chartbox"><canvas id="timeChart"></canvas></div>
<div class="cap">Peak→Bottom barely moves (~12 mo); Peak→Death cross keeps shrinking as bears confirm faster.</div></div>
<div class="find">
<div class="card"><span class="k" style="color:var(--e17)">~12 mo</span><h3>Peak → bottom is the constant</h3><p>13.5, 11.9, 12.4 months across three mature cycles — even as drawdown depth shrank from −85% to −77%.</p></div>
<div class="card"><span class="k" style="color:var(--e21)">5–12 mo</span><h3>Bottom comes before the golden cross</h3><p>Every cycle, the low landed months ahead of the golden cross — a lagging confirmation.</p></div>
<div class="card"><span class="k" style="color:var(--e25)">order flips</span><h3>The death cross lags too</h3><p>Peak → Death → Bottom → Golden held only in 2021. In 2013 &amp; 2017 the bottom came ~2.5 months before the death cross.</p></div>
<div class="card"><span class="k" style="color:var(--e13)">16 → 8 mo</span><h3>Bears confirm faster</h3><p>Peak→Death cross shrank 16 → 14.4 → 9.7 → ~8 months — the maturing-asset signature.</p></div>
</div>
</section>
<section>
<span class="snum">05 / NOW</span>
<h2>The 2025 cycle, as of June 2026</h2>
<p class="sub">Peaked on schedule ~17.5 months after the April 2024 halving, then rolled over. The death cross has fired; no bottom is confirmed.</p>
<div class="status">
<div class="stat"><div class="l">Peak</div><div class="v">$126,198</div><div class="d">2025-10-06</div></div>
<div class="stat"><div class="l">Now</div><div class="v">~$61k</div><div class="d">−52% from peak</div></div>
<div class="stat"><div class="l">Death cross</div><div class="v">May–Jun 26</div><div class="d">~8 mo after peak</div></div>
<div class="stat"><div class="l">Golden cross</div><div class="v">—</div><div class="d">not before 2027</div></div>
</div>
<p class="tight">The −52% drawdown is shallow next to prior cycles (−77% to −85%). Either this cycle bottoms higher — consistent with the maturing-asset, ETF-driven thesis that Fidelity and Morgan Stanley have argued may be flattening the four-year rhythm — or it has further to fall toward the historical ~12-month bottom window in late 2026.</p>
</section>
<section>
<span class="snum">06 / PROJECTION</span>
<h2>Where the bottom could land — full spectrum</h2>
<p class="sub">Three methods, deliberately kept side by side. None is excluded: the ratio math describes the internal cycle, but exogenous shocks can override it entirely. The "previous peak" anchor is the 2021 top ($69,044); drawdowns are measured from the 2025 peak ($126,198).</p>
<div class="flipcard" style="border-color:var(--e17)">
<h3><span class="b" style="color:var(--e17);border-color:var(--e17)">primary projection</span> Pattern continuation — shallower than −77.4%</h3>
<p>The <em>direction</em> of the pattern is that each drawdown is shallower than the last: <b>−85.1% → −83.9% → −77.4%</b>. Continuing that means this cycle bottoms at <em>less than −77.4%</em> — a higher low, not a deeper one. Holding the earlier drawdown-trend estimate as the major case puts the bottom around <b>$35–45k</b> (ratio ~0.50–0.65, drawdown ~−64% to −74%); if the shrink keeps accelerating as the current −52% hints, up toward <b>$50–60k</b>.</p>
<div class="fliprow">
<div><div class="c">trend just under −77%</div><div class="v">~$30–36k</div></div>
<div><div class="c">central (drawdown method)</div><div class="v above">~$35–45k</div></div>
<div><div class="c">shrink accelerates</div><div class="v above">~$50–60k</div></div>
<div><div class="c">current −52% so far</div><div class="v above">$60k</div></div>
</div>
<p style="margin:14px 0 0;font-size:13px;color:var(--muted)"><b>The deep band, for completeness:</b> the simple −82% average of the past drops <em>ignores</em> that shrinking direction and sits <em>below</em> the pattern, at ~$22.5k. So the full average-to-pattern-continuation range runs <b>$22.5k (−82%) up to ~$36k (−71%)</b> — and the −82% case only bites if the shrinking trend breaks (the deeper scenarios below).</p>
</div>
<div class="panel">
<div class="chartbox tall"><canvas id="projChart"></canvas></div>
<div class="cap">Scenario bottoms vs. the $126k peak (grey) and current ~$60k (blue). The teal floor (~$30k) and the blue current line bracket the <b>primary pattern-continuation band ($30–60k)</b>; the red −82% line ($22.5k) is the deeper average tail. Ranges and drawdowns in the tooltip. Linear scale, $ thousands.</div>
</div>
<div class="find">
<div class="card"><span class="k" style="color:#c8442c">$16–27k</span><h3>Deep / shock + the −82% average · −79% to −88%</h3><p>Ratio 0.23–0.39. The raw "bottom ÷ prev-peak" extrapolation, a COVID-style cross-market shock, <b>and the simple −82% historical-drawdown average ($22.5k)</b> all land here. A deeper-than-trend tail — only in play if the shrinking-drawdown pattern breaks.</p></div>
<div class="card"><span class="k" style="color:var(--e25)">$30–36k</span><h3>Bearish / trend holds · −71% to −76%</h3><p>Ratio 0.43–0.52. The drawdown-% method: if crashes keep shrinking only at the gentle historical pace (~−5%/cycle), 2025 still mirrors a classic deep cyclical bear, and the −52% so far is not the floor.</p></div>
<div class="card"><span class="k" style="color:var(--e21)">~$40–46k</span><h3>Blended / moderate · −64% to −68%</h3><p>Ratio ~0.58–0.67. Partial maturation: drawdown shallower than every prior cycle, but the current low isn't quite it. The arithmetic midpoint of the bear and maturation cases.</p></div>
<div class="card"><span class="k" style="color:var(--e17)">$48–60k</span><h3>Moderate / maturation · −52% to −62%</h3><p>Ratio 0.70–0.87. The ETF/institutional bid holds, the −52% already printed is near the floor, and ~$60k today sits close to the bottom. The shallowest of the four.</p></div>
</div>
<p style="margin-top:22px"><b>Major projection (pattern continuation):</b> the better-grounded drawdown method has the ratio settling around <b>0.50–0.65</b> — a bottom near <b>$35–45k</b>, shallower than 2021's −77.4% in keeping with the shrinking trend. The <b>−82% average ($22.5k)</b> and the exogenous-shock case sit <em>below</em> that as deeper, lower-odds tails. The spread is the honest output: four data points, one unfinished.</p>
<h3 style="font-size:18px;margin:30px 0 8px">How long each bear lasts — and the accumulation window</h3>
<p>A cycle's bear has two phases: the <b>decline</b> (peak → bottom) and the <b>accumulation/basing</b> (bottom → the golden cross that confirms the next uptrend). The decline is remarkably steady at ~12–13 months; the accumulation window is where patient capital builds positions before the markup, and it has run anywhere from ~5.5 to ~12.5 months.</p>
<table>
<caption>Bear-market timing by cycle (months)</caption>
<thead><tr><th>Cycle</th><th>Decline (peak→bottom)</th><th>Accumulation (bottom→golden X)</th><th>Total underwater (peak→golden X)</th></tr></thead>
<tbody>
<tr><td><span class="tag" style="background:var(--e13)"></span>2013</td><td class="num">13.5</td><td class="num">12.5</td><td class="num big">26.0</td></tr>
<tr><td><span class="tag" style="background:var(--e17)"></span>2017</td><td class="num">11.9</td><td class="num">5.5</td><td class="num big">17.4</td></tr>
<tr><td><span class="tag" style="background:var(--e21)"></span>2021</td><td class="num">12.4</td><td class="num">12.3</td><td class="num big">24.6</td></tr>
<tr style="border-top:2px solid var(--line)"><td><b>average</b></td><td class="num">~12.6</td><td class="num">~10.1</td><td class="num big">~22.7</td></tr>
<tr class="prov"><td><span class="tag" style="background:var(--e25)"></span>2025 proj.</td><td class="num">~13 → bottom Q4 ’26</td><td class="num">~6–12</td><td class="num">uptrend ~mid–late ’27</td></tr>
</tbody>
</table>
<div class="panel"><div class="chartbox"><canvas id="accChart"></canvas></div>
<div class="legend"><span><i style="background:var(--e25)"></i>Decline (peak→bottom)</span><span><i style="background:var(--e17)"></i>Accumulation (bottom→golden cross)</span></div>
<div class="cap">Each bar is the full time underwater, split into the decline and the accumulation/basing window. Months.</div></div>
<p class="tight">Mapping that onto the current cycle: the October 2025 peak plus a ~13-month decline points to a <b>bottom around Q4 2026</b>, and a further ~6–12-month accumulation window would put the next confirmed uptrend somewhere in <b>mid-to-late 2027</b> — the window in which the scenario prices above would be the accumulation range, not a single day.</p>
<h3 style="font-size:18px;margin:30px 0 8px">Where we are now, and when the bottom lands</h3>
<p>As of 26 June 2026 we are <b>8.6 months past the October 2025 peak</b> — about <b>69% of the way</b> through the average 12.6-month decline, with roughly <b>3.5–5 months still to run</b> to reach the historical bottom timing. Three independent "departure point" methods triangulate the date:</p>
<table>
<caption>Estimated bottom date — three converging methods</caption>
<thead><tr><th>Method</th><th>Measure</th><th>Projects to</th></tr></thead>
<tbody>
<tr><td>Bottom-to-bottom spacing</td><td class="num">~47 mo (mature)</td><td class="num big">Oct 2026</td></tr>
<tr><td>Peak → bottom (from Oct ’25 peak)</td><td class="num">11.9–13.5 mo</td><td class="num big">Oct–Nov 2026</td></tr>
<tr><td>~17 mo before next halving (~Apr ’28)</td><td class="num">16.9–17.8 mo</td><td class="num big">Oct–Nov 2026</td></tr>
</tbody>
</table>
<p class="tight">Central estimate: <b>late October–November 2026 (Q4 2026)</b>, with a wider band of <b>~Jul 2026 → Jan 2027</b> if a maturing market compresses the spacing. Bottom-to-bottom intervals ran 37.9 / 47.0 / 47.2 months (the first is the immature 2011-era outlier; the two recent cycles are near-identical at ~47). At 8.6 months in, every prior cycle was still falling at this point.</p>
<h3 style="font-size:18px;margin:26px 0 8px">Why the bearish cases stay in</h3>
<p>Extreme exogenous conditions sit outside any internal cycle pattern and can force a drawdown deeper than the math implies. In March 2020 the COVID lockdown shock cut Bitcoin roughly in half in a single day ("Black Thursday"), and the dislocation was market-wide, not crypto-specific — <b>WTI crude futures</b> infamously settled <em>negative</em> at about −$37 on 20 April 2020 (Brent fell hard, to the mid-teens, but stayed positive), as forced liquidations and a collapse in demand overwhelmed normal price floors. A leverage-driven cascade like that hits every asset at once.</p>
<p class="tight">Crucially, this does <em>not</em> contradict the institutional/ETF thesis — the two coexist. A large structural bid does not put a floor under price during a shock; it often means patient capital simply <em>waits for lower prices</em>. Big players accumulating into a crash and distributing into the next top can amplify the swing rather than dampen it, so a strong long-term buyer base and a violent short-term drawdown are fully compatible. That is precisely why the deep-bear band is kept live even under a bullish long-term structural view: the floor is set by who is forced to sell and how much leverage unwinds, not by the eventual buyers.</p>
<p class="tight" style="font-size:13px;color:var(--muted)">These are pattern-extrapolation scenarios on four cycles, not forecasts, and not financial advice. A genuine exogenous shock is by definition unpredictable in both timing and depth.</p>
</section>
<footer>
<p><b>Method.</b> Monthly closes → 10- &amp; 21-month EMA, 10- &amp; 20-month SMA; a cross is a sign change of (fast − slow). Peaks/bottoms are cycle extremes; timings are day-differences ÷ 30.44.</p>
<p style="margin-top:10px"><b>Data.</b> Coin Metrics community dataset (PriceUSD), 2010-07 to 2026-05-24, plus a June 2026 close estimate (~$61k); cross dates cross-checked against an independent OHLC source and agree. Monthly MA crosses are lagging indicators — this is a descriptive study, not a trading signal or forecast.</p>
</footer>
</div>
<script>
const D={"labels": ["2010-07", "2010-08", "2010-09", "2010-10", "2010-11", "2010-12", "2011-01", "2011-02", "2011-03", "2011-04", "2011-05", "2011-06", "2011-07", "2011-08", "2011-09", "2011-10", "2011-11", "2011-12", "2012-01", "2012-02", "2012-03", "2012-04", "2012-05", "2012-06", "2012-07", "2012-08", "2012-09", "2012-10", "2012-11", "2012-12", "2013-01", "2013-02", "2013-03", "2013-04", "2013-05", "2013-06", "2013-07", "2013-08", "2013-09", "2013-10", "2013-11", "2013-12", "2014-01", "2014-02", "2014-03", "2014-04", "2014-05", "2014-06", "2014-07", "2014-08", "2014-09", "2014-10", "2014-11", "2014-12", "2015-01", "2015-02", "2015-03", "2015-04", "2015-05", "2015-06", "2015-07", "2015-08", "2015-09", "2015-10", "2015-11", "2015-12", "2016-01", "2016-02", "2016-03", "2016-04", "2016-05", "2016-06", "2016-07", "2016-08", "2016-09", "2016-10", "2016-11", "2016-12", "2017-01", "2017-02", "2017-03", "2017-04", "2017-05", "2017-06", "2017-07", "2017-08", "2017-09", "2017-10", "2017-11", "2017-12", "2018-01", "2018-02", "2018-03", "2018-04", "2018-05", "2018-06", "2018-07", "2018-08", "2018-09", "2018-10", "2018-11", "2018-12", "2019-01", "2019-02", "2019-03", "2019-04", "2019-05", "2019-06", "2019-07", "2019-08", "2019-09", "2019-10", "2019-11", "2019-12", "2020-01", "2020-02", "2020-03", "2020-04", "2020-05", "2020-06", "2020-07", "2020-08", "2020-09", "2020-10", "2020-11", "2020-12", "2021-01", "2021-02", "2021-03", "2021-04", "2021-05", "2021-06", "2021-07", "2021-08", "2021-09", "2021-10", "2021-11", "2021-12", "2022-01", "2022-02", "2022-03", "2022-04", "2022-05", "2022-06", "2022-07", "2022-08", "2022-09", "2022-10", "2022-11", "2022-12", "2023-01", "2023-02", "2023-03", "2023-04", "2023-05", "2023-06", "2023-07", "2023-08", "2023-09", "2023-10", "2023-11", "2023-12", "2024-01", "2024-02", "2024-03", "2024-04", "2024-05", "2024-06", "2024-07", "2024-08", "2024-09", "2024-10", "2024-11", "2024-12", "2025-01", "2025-02", "2025-03", "2025-04", "2025-05", "2025-06", "2025-07", "2025-08", "2025-09", "2025-10", "2025-11", "2025-12", "2026-01", "2026-02", "2026-03", "2026-04", "2026-05", "2026-06"], "closes": [0.07, 0.06, 0.06, 0.19, 0.21, 0.3, 0.53, 0.86, 0.78, 3.5, 8.72, 16.19, 13.37, 8.2, 5.14, 3.27, 2.97, 4.71, 5.54, 4.87, 4.89, 4.94, 5.18, 6.68, 9.32, 10.1, 12.39, 11.15, 12.59, 13.55, 20.51, 33.38, 93.9, 139.13, 127.82, 89.48, 98.02, 128.38, 126.09, 203.28, 1119.3, 729.56, 803.24, 551.29, 455.36, 448.88, 627.89, 638.95, 581.98, 478.51, 389.26, 337.18, 378.69, 320.66, 217.33, 254.95, 244.71, 236.33, 229.45, 263.85, 284.6, 230.69, 236.74, 314.12, 377.39, 429.68, 366.34, 437.78, 415.96, 449.9, 530.94, 674.28, 624.8, 572.27, 608.87, 698.9, 742.2, 968.97, 968.5, 1188.4, 1081.74, 1381.96, 2299.43, 2452.71, 2862.61, 4740.36, 4334.54, 6428.51, 9996.71, 13921.48, 10050.1, 10307.02, 6922.28, 9228.73, 7478.74, 6375.54, 7725.13, 7025.14, 6604.49, 6306.32, 3973.33, 3687.2, 3410.13, 3792.95, 4094.32, 5266.62, 8556.22, 10842.62, 10059.0, 9605.02, 8282.37, 9155.28, 7556.19, 7167.4, 9357.28, 8582.09, 6432.38, 8652.41, 9433.94, 9143.97, 11338.2, 11678.35, 10772.35, 13807.23, 19664.41, 29022.67, 33157.83, 45359.46, 58792.19, 57741.44, 37312.97, 35065.47, 41793.31, 47219.24, 43781.55, 61432.97, 57097.01, 46355.12, 38462.67, 43179.25, 45562.21, 37714.09, 31831.41, 19332.91, 23356.17, 20024.67, 19435.19, 20490.86, 17176.9, 16524.22, 23130.05, 23145.95, 28514.68, 29362.09, 27217.68, 30484.5, 29219.82, 25954.87, 26977.69, 34636.43, 37712.71, 42217.16, 42589.47, 61394.78, 71227.45, 60636.33, 67377.76, 62763.28, 64690.63, 58959.93, 63260.04, 70367.08, 96463.62, 93389.73, 102263.04, 84243.78, 82461.45, 94236.73, 104708.96, 107153.1, 115848.34, 108316.45, 113971.74, 109554.24, 90607.7, 87516.98, 78702.39, 66965.64, 68214.87, 76299.62, 76619.87, 61000.0], "peaks": [null, null, null, null, null, null, null, null, null, null, null, 31, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1156, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19783, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 69044, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 126198, null, null, null, null, null, null, null, null], "bottoms": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 2, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 172, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 3189, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 15598, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 60000], "cycles": ["2013", "2017", "2021", "2025"], "pkpk": [37.29, 17.11, 3.49, 1.83], "pkbot": [6.72, 6.2, 4.43, 2.1], "dd_cycles": ["2011", "2013", "2017", "2021", "2025*", "2025 est."], "drawdown": [93.5, 85.1, 83.9, 77.4, 52.5, 74], "flip_cyc": ["2013", "2017", "2021", "2025*", "2025 est."], "bot_vs_prevpeak": [5.55, 2.76, 0.79, 0.87, 0.48], "clabels": ["2013-01", "2013-02", "2013-03", "2013-04", "2013-05", "2013-06", "2013-07", "2013-08", "2013-09", "2013-10", "2013-11", "2013-12", "2014-01", "2014-02", "2014-03", "2014-04", "2014-05", "2014-06", "2014-07", "2014-08", "2014-09", "2014-10", "2014-11", "2014-12", "2015-01", "2015-02", "2015-03", "2015-04", "2015-05", "2015-06", "2015-07", "2015-08", "2015-09", "2015-10", "2015-11", "2015-12", "2016-01", "2016-02", "2016-03", "2016-04", "2016-05", "2016-06", "2016-07", "2016-08", "2016-09", "2016-10", "2016-11", "2016-12", "2017-01", "2017-02", "2017-03", "2017-04", "2017-05", "2017-06", "2017-07", "2017-08", "2017-09", "2017-10", "2017-11", "2017-12", "2018-01", "2018-02", "2018-03", "2018-04", "2018-05", "2018-06", "2018-07", "2018-08", "2018-09", "2018-10", "2018-11", "2018-12", "2019-01", "2019-02", "2019-03", "2019-04", "2019-05", "2019-06", "2019-07", "2019-08", "2019-09", "2019-10", "2019-11", "2019-12", "2020-01", "2020-02", "2020-03", "2020-04", "2020-05", "2020-06", "2020-07", "2020-08", "2020-09", "2020-10", "2020-11", "2020-12", "2021-01", "2021-02", "2021-03", "2021-04", "2021-05", "2021-06", "2021-07", "2021-08", "2021-09", "2021-10", "2021-11", "2021-12", "2022-01", "2022-02", "2022-03", "2022-04", "2022-05", "2022-06", "2022-07", "2022-08", "2022-09", "2022-10", "2022-11", "2022-12", "2023-01", "2023-02", "2023-03", "2023-04", "2023-05", "2023-06", "2023-07", "2023-08", "2023-09", "2023-10", "2023-11", "2023-12", "2024-01", "2024-02", "2024-03", "2024-04", "2024-05", "2024-06", "2024-07", "2024-08", "2024-09", "2024-10", "2024-11", "2024-12", "2025-01", "2025-02", "2025-03", "2025-04", "2025-05", "2025-06", "2025-07", "2025-08", "2025-09", "2025-10", "2025-11", "2025-12", "2026-01", "2026-02", "2026-03", "2026-04", "2026-05", "2026-06"], "cclose": [20.51, 33.38, 93.9, 139.13, 127.82, 89.48, 98.02, 128.38, 126.09, 203.28, 1119.3, 729.56, 803.24, 551.29, 455.36, 448.88, 627.89, 638.95, 581.98, 478.51, 389.26, 337.18, 378.69, 320.66, 217.33, 254.95, 244.71, 236.33, 229.45, 263.85, 284.6, 230.69, 236.74, 314.12, 377.39, 429.68, 366.34, 437.78, 415.96, 449.9, 530.94, 674.28, 624.8, 572.27, 608.87, 698.9, 742.2, 968.97, 968.5, 1188.4, 1081.74, 1381.96, 2299.43, 2452.71, 2862.61, 4740.36, 4334.54, 6428.51, 9996.71, 13921.48, 10050.1, 10307.02, 6922.28, 9228.73, 7478.74, 6375.54, 7725.13, 7025.14, 6604.49, 6306.32, 3973.33, 3687.2, 3410.13, 3792.95, 4094.32, 5266.62, 8556.22, 10842.62, 10059.0, 9605.02, 8282.37, 9155.28, 7556.19, 7167.4, 9357.28, 8582.09, 6432.38, 8652.41, 9433.94, 9143.97, 11338.2, 11678.35, 10772.35, 13807.23, 19664.41, 29022.67, 33157.83, 45359.46, 58792.19, 57741.44, 37312.97, 35065.47, 41793.31, 47219.24, 43781.55, 61432.97, 57097.01, 46355.12, 38462.67, 43179.25, 45562.21, 37714.09, 31831.41, 19332.91, 23356.17, 20024.67, 19435.19, 20490.86, 17176.9, 16524.22, 23130.05, 23145.95, 28514.68, 29362.09, 27217.68, 30484.5, 29219.82, 25954.87, 26977.69, 34636.43, 37712.71, 42217.16, 42589.47, 61394.78, 71227.45, 60636.33, 67377.76, 62763.28, 64690.63, 58959.93, 63260.04, 70367.08, 96463.62, 93389.73, 102263.04, 84243.78, 82461.45, 94236.73, 104708.96, 107153.1, 115848.34, 108316.45, 113971.74, 109554.24, 90607.7, 87516.98, 78702.39, 66965.64, 68214.87, 76299.62, 76619.87, 61000.0], "ema10": [11.91, 15.81, 30.01, 49.85, 64.02, 68.65, 73.99, 83.88, 91.56, 111.87, 295.04, 374.04, 452.08, 470.12, 467.43, 464.06, 493.85, 520.23, 531.46, 521.83, 497.73, 468.54, 452.2, 428.28, 389.93, 365.39, 343.45, 323.97, 306.79, 298.98, 296.36, 284.42, 275.75, 282.73, 299.94, 323.53, 331.31, 350.67, 362.54, 378.42, 406.15, 454.91, 485.8, 501.52, 521.04, 553.38, 587.71, 657.03, 713.66, 799.98, 851.21, 947.71, 1193.47, 1422.43, 1684.28, 2239.93, 2620.77, 3313.09, 4528.29, 6236.14, 6929.59, 7543.67, 7430.69, 7757.61, 7706.9, 7464.84, 7512.16, 7423.61, 7274.68, 7098.62, 6530.38, 6013.44, 5540.11, 5222.45, 5017.33, 5062.66, 5697.85, 6633.26, 7256.12, 7683.2, 7792.14, 8039.98, 7952.02, 7809.36, 8090.8, 8180.13, 7862.35, 8006.0, 8265.63, 8425.33, 8954.94, 9450.1, 9690.51, 10439.01, 12116.35, 15190.23, 18457.07, 23348.41, 29792.74, 34874.32, 35317.71, 35271.85, 36457.57, 38414.24, 39390.11, 43397.9, 45888.65, 45973.46, 44607.86, 44348.12, 44568.86, 43322.54, 41233.24, 37251.37, 34724.97, 32052.19, 29758.19, 28073.22, 26092.07, 24352.46, 24130.2, 23951.25, 24780.96, 25613.9, 25905.49, 26738.04, 27189.27, 26964.84, 26967.17, 28361.58, 30061.79, 32271.86, 34147.79, 39101.78, 44942.82, 47796.18, 51356.47, 53430.43, 55477.74, 56110.87, 57410.72, 59766.42, 66438.64, 71338.84, 76961.42, 78285.49, 79044.75, 81806.93, 85970.94, 89822.24, 94554.26, 97056.47, 100131.98, 101845.12, 99801.95, 97568.32, 94138.15, 89197.69, 85382.63, 83731.18, 82438.21, 78540.35], "ema21": [8.89, 11.11, 18.64, 29.59, 38.52, 43.15, 48.14, 55.44, 61.86, 74.72, 169.68, 220.58, 273.55, 298.8, 313.03, 325.38, 352.88, 378.89, 397.35, 404.73, 403.32, 397.31, 395.62, 388.8, 373.21, 362.46, 351.76, 341.26, 331.1, 324.99, 321.31, 313.08, 306.14, 306.86, 313.27, 323.86, 327.72, 337.72, 344.84, 354.39, 370.44, 398.06, 418.67, 432.64, 448.66, 471.41, 496.02, 539.02, 578.06, 633.55, 674.29, 738.63, 880.52, 1023.44, 1190.64, 1513.34, 1769.82, 2193.33, 2902.73, 3904.44, 4463.13, 4994.4, 5169.66, 5538.66, 5715.04, 5775.08, 5952.36, 6049.88, 6100.3, 6119.03, 5923.97, 5720.63, 5510.58, 5354.43, 5239.88, 5242.31, 5543.57, 6025.3, 6392.0, 6684.1, 6829.39, 7040.84, 7087.69, 7094.93, 7300.6, 7417.1, 7327.58, 7448.02, 7628.56, 7766.32, 8091.04, 8417.16, 8631.27, 9101.81, 10062.05, 11785.74, 13728.66, 16604.18, 20439.46, 23830.55, 25056.22, 25966.15, 27404.99, 29206.28, 30531.31, 33340.55, 35500.23, 36487.04, 36666.64, 37258.69, 38013.56, 37986.34, 37426.8, 35781.9, 34652.29, 33322.5, 32060.02, 31008.28, 29750.88, 28548.46, 28055.87, 27609.52, 27691.81, 27843.65, 27786.74, 28031.99, 28139.98, 27941.33, 27853.73, 28470.34, 29310.55, 30483.88, 31584.39, 34294.42, 37651.97, 39741.46, 42253.85, 44118.34, 45988.55, 47167.77, 48630.7, 50606.74, 54775.54, 58285.93, 62283.85, 64280.2, 65933.04, 68506.11, 71797.27, 75011.44, 78723.89, 81414.12, 84373.9, 86663.02, 87021.63, 87066.66, 86306.27, 84548.03, 83063.2, 82448.33, 81918.47, 80016.79], "sma10": [10.64, 13.48, 22.36, 35.6, 47.45, 55.39, 63.95, 75.67, 87.03, 106.0, 215.88, 285.5, 356.43, 397.65, 430.4, 466.34, 519.33, 570.38, 615.97, 643.49, 570.49, 531.25, 488.8, 465.74, 441.93, 422.54, 384.22, 343.96, 308.71, 287.24, 276.78, 266.13, 251.93, 251.28, 267.28, 284.76, 296.92, 317.06, 335.71, 354.32, 378.95, 423.31, 462.12, 487.93, 511.08, 538.0, 575.59, 628.71, 683.96, 757.81, 812.89, 883.66, 1051.12, 1239.17, 1464.54, 1868.69, 2227.92, 2773.88, 3676.7, 4950.01, 5846.84, 6739.35, 7201.63, 7879.24, 8340.85, 8504.37, 8843.43, 8903.09, 8563.87, 7802.35, 7194.67, 6532.69, 6181.48, 5637.9, 5299.45, 5188.56, 5271.67, 5653.42, 5998.87, 6328.74, 6759.64, 7306.45, 7721.06, 8058.5, 8584.8, 8916.35, 8703.96, 8484.94, 8422.44, 8376.33, 8681.91, 8934.22, 9255.84, 9919.82, 10950.53, 12994.59, 15667.14, 19337.84, 24273.67, 29133.41, 31730.89, 34069.6, 37171.7, 40512.9, 42924.62, 46165.65, 48559.56, 48659.13, 46626.18, 45169.96, 45994.88, 46259.74, 45263.55, 42474.92, 40432.38, 36291.55, 32525.37, 29938.95, 27810.37, 25144.86, 22901.65, 21444.83, 21113.16, 22116.08, 22502.23, 23548.21, 24526.68, 25073.08, 26053.16, 27864.38, 29322.64, 31229.76, 32637.24, 35840.51, 40241.49, 43256.67, 47072.46, 50753.31, 54524.6, 56956.95, 59511.68, 62326.68, 67714.09, 70913.59, 74017.15, 76377.89, 77886.26, 81033.6, 85035.44, 89854.76, 95113.58, 98908.52, 100659.33, 102275.78, 101110.25, 101437.57, 101061.66, 98334.55, 94685.14, 91599.8, 87676.95, 82945.3], "sma20": [8.78, 9.64, 13.66, 20.21, 26.34, 30.65, 35.41, 41.59, 47.62, 57.54, 113.26, 149.49, 189.39, 216.62, 238.93, 260.86, 291.64, 323.03, 351.5, 374.75, 393.18, 408.37, 422.61, 431.69, 436.17, 444.44, 451.77, 457.17, 462.34, 465.37, 423.63, 398.69, 370.37, 358.51, 354.61, 353.65, 340.57, 330.51, 322.21, 320.78, 327.86, 344.72, 357.03, 369.61, 389.18, 411.38, 436.25, 472.89, 509.84, 556.07, 595.92, 653.49, 756.62, 863.55, 987.81, 1203.35, 1401.76, 1701.29, 2180.33, 2853.91, 3329.87, 3811.51, 4126.38, 4559.2, 4902.7, 5186.53, 5535.67, 5838.48, 6120.28, 6376.18, 6520.76, 6636.02, 6691.55, 6758.57, 6820.15, 6846.46, 7057.55, 7278.25, 7281.37, 7065.55, 6977.16, 6919.57, 6951.27, 6848.2, 6942.13, 7052.45, 6987.82, 7069.18, 7210.65, 7352.54, 7720.78, 8120.34, 8488.45, 8989.16, 9767.67, 10955.47, 12185.55, 13911.39, 16348.05, 18754.87, 20206.4, 21501.91, 23213.77, 25216.36, 26937.57, 29580.12, 32113.35, 33998.49, 35449.92, 37151.69, 38862.89, 40164.67, 41217.63, 41493.91, 41678.5, 41228.6, 40542.47, 39299.04, 37218.27, 35157.41, 34448.26, 33852.29, 33188.36, 32295.5, 31467.31, 29919.88, 28526.02, 27506.01, 26931.76, 26504.62, 26112.15, 26337.3, 26875.2, 28978.29, 31371.86, 33402.44, 35799.57, 37913.19, 40288.88, 42410.66, 44417.16, 46778.22, 50175.67, 53377.05, 57129.32, 59817.28, 62479.36, 65893.46, 69780.02, 73405.85, 77312.63, 80617.6, 84186.71, 86594.69, 87563.7, 88907.73, 89473.96, 89684.08, 89860.29, 90727.28, 91395.27, 90926.91], "ema_death": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 245.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 3793.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20025.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 61000.0], "ema_gold": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 366.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 8556.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 37713.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], "sma_death": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 255.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 3687.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 23356.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 76620.0, null], "sma_gold": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 416.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 9155.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 34636.0, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null], "t_pk_death": [16.0, 14.4, 9.7, 8.0], "t_pk_bot": [13.5, 11.9, 12.4, null], "t_bot_gold": [12.5, 5.5, 12.3, null]};
const css=getComputedStyle(document.documentElement),c=n=>css.getPropertyValue(n).trim();
const reduce=window.matchMedia('(prefers-reduced-motion: reduce)').matches;
Chart.defaults.font.family="'JetBrains Mono', monospace";Chart.defaults.color=c('--muted');
Chart.defaults.animation=reduce?false:{duration:700};
const grid=c('--line');
const fmtUSD=v=>v>=1000?'$'+(v/1000).toFixed(v>=100000?0:1)+'k':'$'+v;
// 01 price
new Chart(priceChart,{type:'line',
data:{labels:D.labels,datasets:[
{data:D.closes,borderColor:c('--ink'),borderWidth:1.4,pointRadius:0,tension:0.15},
{data:D.peaks,type:'scatter',pointStyle:'triangle',pointRadius:7,pointBackgroundColor:'#fff',pointBorderColor:c('--e25'),pointBorderWidth:2,showLine:false},
{data:D.bottoms,type:'scatter',pointStyle:'triangle',rotation:180,pointRadius:7,pointBackgroundColor:c('--bg'),pointBorderColor:c('--e13'),pointBorderWidth:2,showLine:false},
]},
options:{maintainAspectRatio:false,plugins:{legend:{display:false},
tooltip:{callbacks:{label:x=>(x.datasetIndex===1?'Peak ':x.datasetIndex===2?'Bottom ':'')+'$'+Math.round(x.parsed.y).toLocaleString()}}},
scales:{y:{type:'logarithmic',grid:{color:grid},ticks:{callback:fmtUSD}},x:{grid:{display:false},ticks:{maxTicksLimit:9,maxRotation:0}}}}});
// 02 ratios
new Chart(ratioChart,{type:'bar',
data:{labels:D.cycles,datasets:[
{label:'Peak ÷ previous peak',data:D.pkpk,backgroundColor:c('--pk'),borderRadius:4},
{label:'Peak ÷ own bottom',data:D.pkbot,backgroundColor:c('--pb'),borderRadius:4},
]},
options:{maintainAspectRatio:false,plugins:{legend:{labels:{usePointStyle:true,pointStyle:'rectRounded',boxWidth:10}},
tooltip:{callbacks:{label:x=>x.dataset.label+': '+x.parsed.y.toFixed(2)+'×'}}},
scales:{y:{type:'logarithmic',grid:{color:grid},ticks:{callback:v=>v+'×'}},x:{grid:{display:false}}}}});
// 02b drawdown
new Chart(ddChart,{type:'bar',
data:{labels:D.dd_cycles,datasets:[{data:D.drawdown.map(v=>-v),
backgroundColor:[c('--faint'),c('--e13'),c('--e17'),c('--e21'),c('--e25'),'#2bb6a8'],borderRadius:4}]},
options:{maintainAspectRatio:false,plugins:{legend:{display:false},
tooltip:{callbacks:{label:x=>'Drawdown '+x.parsed.y.toFixed(1)+'%'}}},
scales:{y:{grid:{color:grid},ticks:{callback:v=>v+'%'},max:0,title:{display:true,text:'peak-to-bottom drawdown',color:c('--faint')}},x:{grid:{display:false}}}}});
// helper for cross price charts
function crossChart(id,fast,slow,fastColor,deaths,golds,fastLabel,slowLabel){
new Chart(id,{type:'line',
data:{labels:D.clabels,datasets:[
{label:'Price',data:D.cclose,borderColor:c('--ink'),borderWidth:1.3,pointRadius:0,tension:0.1},
{label:fastLabel,data:fast,borderColor:fastColor,borderWidth:1.3,pointRadius:0,tension:0.1},
{label:slowLabel,data:slow,borderColor:c('--muted'),borderWidth:1.3,borderDash:[4,3],pointRadius:0,tension:0.1},
{label:'Death',data:deaths,type:'scatter',pointStyle:'triangle',rotation:180,pointRadius:8,pointBackgroundColor:c('--death'),pointBorderColor:'#fff',pointBorderWidth:1,showLine:false},
{label:'Golden',data:golds,type:'scatter',pointStyle:'triangle',pointRadius:8,pointBackgroundColor:c('--gold'),pointBorderColor:'#fff',pointBorderWidth:1,showLine:false},
]},
options:{maintainAspectRatio:false,plugins:{legend:{display:false},
tooltip:{callbacks:{label:x=>{const n=x.dataset.label;return (n==='Death'||n==='Golden'?n+' cross @ ':n+': $')+Math.round(x.parsed.y).toLocaleString();}}}},
scales:{y:{type:'logarithmic',grid:{color:grid},ticks:{callback:fmtUSD}},x:{grid:{display:false},ticks:{maxTicksLimit:9,maxRotation:0}}}}});
}
crossChart(smaChart,D.sma10,D.sma20,c('--sma'),D.sma_death,D.sma_gold,'10-mo SMA','20-mo SMA');
crossChart(emaChart,D.ema10,D.ema21,c('--ema'),D.ema_death,D.ema_gold,'10-mo EMA','21-mo EMA');
// 04 timing
new Chart(timeChart,{type:'bar',
data:{labels:D.cycles,datasets:[
{label:'Peak → Death cross',data:D.t_pk_death,backgroundColor:c('--e25'),borderRadius:4},
{label:'Peak → Bottom',data:D.t_pk_bot,backgroundColor:c('--e17'),borderRadius:4},
{label:'Bottom → Golden cross',data:D.t_bot_gold,backgroundColor:c('--e21'),borderRadius:4},
]},
options:{maintainAspectRatio:false,plugins:{legend:{labels:{usePointStyle:true,pointStyle:'rectRounded',boxWidth:10}},
tooltip:{callbacks:{label:x=>x.dataset.label+': '+(x.parsed.y==null?'pending':x.parsed.y+' mo')}}},
scales:{y:{grid:{color:grid},ticks:{callback:v=>v+' mo'},title:{display:true,text:'months',color:c('--faint')}},x:{grid:{display:false}}}}});
// 06 projection scenarios (bars in $k + peak/current reference lines)
(function(){
const labels=['Deep / shock','Bearish (trend)','Blended','Moderate'];
const central=[21,33,43,54];
const meta=[
{range:'$16–27k',dd:'−79% to −88%',ratio:'0.23–0.39'},
{range:'$30–36k',dd:'−71% to −76%',ratio:'0.43–0.52'},
{range:'$40–46k',dd:'−64% to −68%',ratio:'0.58–0.67'},
{range:'$48–60k',dd:'−52% to −62%',ratio:'0.70–0.87'},
];
const cols=['#c8442c',c('--e25'),c('--e21'),c('--e17')];
const flat=v=>labels.map(()=>v);
new Chart(document.getElementById('projChart'),{type:'bar',
data:{labels:labels,datasets:[
{label:'Scenario bottom',data:central,backgroundColor:cols,borderRadius:5,order:3},
{type:'line',label:'2025 peak $126k',data:flat(126.2),borderColor:c('--faint'),borderWidth:1.5,borderDash:[6,4],pointRadius:0,order:1},
{type:'line',label:'Now ~$60k',data:flat(60),borderColor:c('--e13'),borderWidth:1.5,borderDash:[3,3],pointRadius:0,order:2},
{type:'line',label:'Historical-avg −82% ≈ $22.5k',data:flat(22.5),borderColor:'#c8442c',borderWidth:1.5,borderDash:[2,2],pointRadius:0,order:1},
{type:'line',label:'Pattern-continuation floor ~$30k',data:flat(30),borderColor:c('--e17'),borderWidth:1.5,borderDash:[6,3],pointRadius:0,order:1},
]},
options:{maintainAspectRatio:false,
plugins:{legend:{labels:{usePointStyle:true,pointStyle:'line',boxWidth:18,filter:i=>i.datasetIndex>0}},
tooltip:{callbacks:{label:x=>{ if(x.datasetIndex>0) return x.dataset.label;
const m=meta[x.dataIndex]; return ['central ~$'+x.parsed.y+'k','range '+m.range,'drawdown '+m.dd,'ratio '+m.ratio];}}}},
scales:{y:{grid:{color:grid},ticks:{callback:v=>'$'+v+'k'},max:135,title:{display:true,text:'bottom price ($k)',color:c('--faint')}},
x:{grid:{display:false}}}}});
})();
// 07 accumulation / bear timing (stacked)
(function(){
new Chart(document.getElementById('accChart'),{type:'bar',
data:{labels:['2013','2017','2021','2025 proj.'],datasets:[
{label:'Decline (peak→bottom)',data:[13.5,11.9,12.4,13],backgroundColor:c('--e25'),borderRadius:3,stack:'b'},
{label:'Accumulation (bottom→golden)',data:[12.5,5.5,12.3,9],backgroundColor:c('--e17'),borderRadius:3,stack:'b'},
]},
options:{maintainAspectRatio:false,
plugins:{legend:{display:false},tooltip:{callbacks:{label:x=>x.dataset.label+': '+x.parsed.y+' mo'}}},
scales:{y:{stacked:true,grid:{color:grid},ticks:{callback:v=>v+' mo'},title:{display:true,text:'months underwater',color:c('--faint')}},
x:{stacked:true,grid:{display:false}}}}});
})();
</script>
</body></html>