From 21b10ea8945bfc912c6ed61069bf7ac534025d13 Mon Sep 17 00:00:00 2001 From: Stan Runge Date: Mon, 26 Oct 2026 08:29:28 +0000 Subject: [PATCH] Money forecast: name the first crash after the calm start in the explanation --- src/lib/money-tracker/ScenarioDetails.svelte | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/lib/money-tracker/ScenarioDetails.svelte b/src/lib/money-tracker/ScenarioDetails.svelte index cc935e7..97529b7 100644 --- a/src/lib/money-tracker/ScenarioDetails.svelte +++ b/src/lib/money-tracker/ScenarioDetails.svelte @@ -105,6 +105,13 @@ let result = $derived(results[selected]); let markets = $derived(marketReturns(active, result.years[0]?.year)); let normalReturn = $derived(markets.normal); + /** First crash after any calm start. */ + let firstCrash = $derived.by(() => { + let year = active.firstCrashYear; + const every = Math.max(1, Math.round(active.crashEveryYears)); + while (markets.calmUntil !== null && year <= markets.calmUntil) year += every; + return year; + }); /** Crash and correction years in the first ten years, for the explanation. */ let shocks = $derived( Array.from({ length: 11 }, (_, offset) => (result.years[0]?.year ?? 0) + offset) @@ -176,7 +183,7 @@ earn the {active.returnPercent}% average. {/if} {#if active.crashPercent !== 0}A {active.crashPercent}% crash every {active.crashEveryYears} years - from {active.firstCrashYear}{active.correctionPercent !== 0 + from {firstCrash}{active.correctionPercent !== 0 ? `, a ${active.correctionPercent}% correction halfway between` : ''}, and {percent(normalReturn)} in the other years so it averages out{markets.calmUntil !== null