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>
357 lines
No EOL
53 KiB
HTML
357 lines
No EOL
53 KiB
HTML
<!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 & 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 & 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- & 21-month EMA, 10- & 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> |