๐Ÿ“Š Financial Planner ๐Ÿ“ˆ

Dollars:
Portfolio โ†’ Auto Return & Volatility
Uses /api/portfolio_stats
ฮผ (CAGR): โ€” ฯƒ (Vol): โ€”
Portfolio Lab
Estimate return (CAGR) + volatility (ฯƒ), then apply into planner.
CAGR (annual)
โ€”
Volatility ฯƒ (annual)
โ€”

Allocation (will populate after Calculate in Step 2)
...
Ticker Weight Value Max Drawdown
Return (indexed growth)
Total Return
โ€”
Start โ†’ End
โ€”
CAGR (annual)
โ€”
Indexed growth (start = 1.0)
Drawdown (portfolio + components)
Max Drawdown
โ€”
Peak โ†’ Trough
โ€”
Recovery
โ€”
Underwater (portfolio drawdown % over time)
Components (using normalized weights)
Ticker Weight Max DD Trough
Run Calculate to populate.
Cash Deployment Cockpit
Status: not loaded
Deployment Posture
โ€”
Open this tab to load the current cash deployment reading.
Deployment Risk Score
โ€”
โ€”
Entry Opportunity Score
โ€”
โ€”
Signal Alignment Score
โ€”
โ€”
Recent Daily Trend
Select 1W, 1M, 3M, 6M, 12M, 3Y, or 5Y to view the market mood proxy and deployment-score history.
Waiting for backend history...
Lines show Market Mood (Raw Regime), Deployment Risk Score, Entry Opportunity Score, and Signal Alignment Score across the selected trading-day history.
Benchmark Price Validation
Waiting for benchmark price history...
Synced to the same period toggle above.
Benchmark price history is shown separately for after-the-fact validation of historical deployment zones.
Dots mark ranked candidate entry windows selected from a combination of factors โ€” including Market Mood, Deployment Risk, Entry Opportunity, Signal Alignment, and posture logic โ€” rather than simply the deepest price lows.
Hindsight Ranked Entry Windows
Waiting for hindsight-ranked windows...
Rank Entry Date Window Mood Risk Opportunity Alignment Posture Days Held Total Return Ann. Return Score
No hindsight-ranked windows loaded yet.
This table explains the ranked candidate entry windows shown as dots on the benchmark chart, including days held, total return, and annualized return to the latest benchmark date.
Market Mood (Raw Regime)
Waiting for backend data...
Fear & Greed Proxy
โ€”
Regime Band
โ€”
Regime Trend
โ€”
Price Context
Waiting for backend data...
Drawdown
โ€”
Drawdown Band
โ€”
Trend vs 125MA
โ€”
Price Action
โ€”
Distance vs 125MA
โ€”
Market Mood (Raw Regime) is the broad fear/greed backdrop. Deployment Risk Score is the caution level for putting cash to work right now. They can differ when the market mood is fearful but the environment is still deteriorating or not yet attractive enough for deployment.
ML Risk Overlay (QQQ)
Status
โ€”
Regime probability (model uncertainty)
Most likely: โ€”
Alternate: โ€”
Think of it like a risk warning level:
  • If DEFENSIVE is ~5% โ†’ basically ignore; deploy normally.
  • If DEFENSIVE is ~33% โ†’ deploy carefully (defensive is a real possibility).
  • If DEFENSIVE is ~70% โ†’ likely stay defensive.
Open this tab to load ML state + signals.
As of
โ€”
Confidence โ“˜
โ€”
Deployment band โ“˜
โ€”
โ€”
How this works (training โ†’ live):
โ€ข Training (history): For each past day T, we saved the signals at T (using only data up to T), then assigned a state label based on what happened after T (6-month reward vs 3-month drawdown โ€œpainโ€).
โ€ข Live (today): We compute todayโ€™s signals and the model outputs a Status % (e.g., DEFENSIVE 88%) meaning: in history, days with similar signals most often ended up labeled DEFENSIVE โ€” so the Status % is the modelโ€™s confidence for that state (not โ€œtoday vs 6 months agoโ€).
Signals (what the model โ€œsawโ€ today)
Signal Today Percentile Read โ“˜
1m return โ€” โ€” โ€”
3m return โ€” โ€” โ€”
QQQ vs GLD (3m) โ€” โ€” โ€”
QQQ vs TLT (3m) โ€” โ€” โ€”
QQQ vs HYG (3m) โ€” โ€” โ€”
3m vol โ€” โ€” โ€”
Vol trend โ€” โ€” โ€”
Dist to 200d SMA โ€” โ€” โ€”
1y drawdown โ€” โ€” โ€”
Percentile is โ€œwhere today ranks vs historyโ€ for that signal (0% = very low vs history, 100% = very high vs history). The Read column summarizes what it implies (leans deploy vs leans defensive).
Signals โ†’ State (why)
โ€”
Top drivers today
  • Open this tab to load drivers.
What that usually maps to
โ€”
Action hint
โ€”
10-day trend
โ€”
Defensive probability (bars). Higher = more โ€œdefensiveโ€ regime risk.
Important (horizon): Not a next-day price call. Calibrated to ~6-month forward reward with a ~3-month drawdown โ€œpain check.โ€
So RISK_ON can still appear even if QQQ is down recently โ€” short-term drawdowns can still happen.
How to use the band: scale in/out gradually (not โ€œall-in timingโ€).
Open this tab to load the 10-day series.
ML Guide
Set style weights (must sum to 100%), or click a point on the frontier slice. Then click Load to fill Portfolio Lab inputs. (Per your rule: Load = hydrate only โ†’ you still click Calculate.)
Step 1: style weights
Style weights (sum must be 100%)
โ€”
โ€”

Efficient frontier slice (preview) โ“˜
ฯƒ (risk) vs CAGR
Click a point to generate the nearest 6 presets (2 safer, 2 riskier, 2 neighbors).
Target: โ€”
Note: this is a UI preview slice. Later youโ€™ll swap these preview points for true stats from your DB (RUN ETL) universe + ranking logic.
Presets (6)
Reality Check Pack
Adds 3 additional โ€œstress testโ€ runs on top of the main Monte Carlo (more compute, better reality check).
Stress window is fixed at first 5 years after retirement (same as your current stress logic).
More inputs

This tool doesnโ€™t predict markets. It stress-tests whether your plan survives different futures โ€” it tells you how much risk you can afford, not which ticker will win.

๐Ÿ“‰ Asset vs. Retirement Expense
๐Ÿ“‰ Monte Carlo Simulation: Retirement Asset Range
Benchmark (fixed): S&P 500 SPY โ€ข 20y โ€ข CAGR 10.8% โ€ข ฯƒ 19.4%
โœ… Probability of plan success (no depletion through age 90): 100.0%
Strong
Success = assets never hit $0 before age 90.
Band guide: <65% = caution, 66โ€“88% = okay, 89%+ = strong
If Caution: adjust one lever โ€” retire later โ€ข spend less โ€ข save more โ€ข reduce volatility.
๐Ÿ“Œ Executive dashboard
How safe is this plan?
Baseline success: 100.0% Strong
How fragile is it under stress?
Enable Reality Check Pack to see stress fragility.
What should I change first?
Run Sensitivity to show the top lever.
โš ๏ธ Depletion Risk Summary (Based on 300 Monte Carlo Simulations)
  • 0.0% chance of running out of money by age 75
  • 0.0% chance of running out of money by age 85
  • 0.0% chance of running out of money by age 90
๐Ÿ“ MC notes (end labels)
  • End age: โ€”
  • Median assets: โ€” (plan) vs โ€” (benchmark)
  • Depletion: โ€” (plan) vs โ€” (benchmark)
Monte Carlo results include volatility drag and sequence risk. Return Std Dev (ฯƒ) controls how โ€œbumpyโ€ yearly market returns are around your average return. Note: this version uses a single ฯƒ across pre- and post-retirement.
Assumes current savings, asset, CPP, expenses, and retirement age remain fixed. Market returns and inflation are randomly varied in each simulation.
โšก Live What-If
Restore sliders from the current inputs above.
More controls
๐Ÿงญ Strategy Coach (beta)
Lever (choose one)
๐ŸŽฏ Goals (beta) โ€” extra expenses or inflows

Enabled Name Type When Amount Infl.

Note: goals are merged client-side into asset liquidations (post-tax) before the live update call.


๐Ÿ”„ Compare Saved Scenarios
Scenario snapshot (saved in DB)
Select Scenario A / B above; this shows the key plan inputs saved on each scenario.
Scenario Plan snapshot Assumptions
Waiting for selectionโ€ฆ

๐Ÿ”„ Compare
Monte Carlo Simulation

Sensitivity โ€“ Dollar Impact (Core Inputs)
Retirement Age โ€“ Dollar Impact (Own Scale)
Tax-Aware Retirement Plan
These inputs mirror the top form; theyโ€™re tucked away to keep the page clean while reviewing Tax-Aware Visuals.

Applied each retirement year (unless RRIF minimum is explicitly enabled).
Tax Inputs (Tax-lite)
Common inputs (example): OAS Monthly โ‰ˆ $800 starting at 65; Clawback threshold โ‰ˆ $90,000/yr; Clawback rate 15%; RRIF start age 71. Check Index OAS to grow OAS with inflation. Adjust to your year/province.

Example only: ~$57,375 โ†’ ~14.5%; ~$114,750 โ†’ ~20.5%; income above that typically ~26-32% depending on province/territory. See simple bracket table (CRA) .
Note: With brackets ON the flat Income Tax Rate (%) is ignored. Use Taxable Drag (%) to include ongoing tax on taxable investment income. RRIF-min taxes still show under โ€œTax paid from Taxable (overlay)โ€.

Optional friction on Taxable growth only. Enter manually, or use the helper below and tick Auto-apply to fill this for you. If you want to overwrite the helper, simply uncheck Auto-apply and type your own value here.
Taxable Drag Helper
Stream Allocation (% of taxable) Yield (% on that slice) Effective Tax Rate (%) Contribution to Absolute Drag (%)
Eligible dividends 0.000
Interest (incl. foreign withholding) 0.000
Realized capital gains
Use effective rate (after inclusion), e.g. 50%ร—30% = 15%.
0.000
Absolute Drag (ฮฃ contributions) 0.000%
Implied Taxable Drag d = Absolute Drag รท Return Rate 0.00%
Allocation is the share of your Taxable balance in that stream (total โ‰ค 100%). Yield is the annual % paid/realized on that slice (e.g., 5% dividend yield; for realized capital gains, enter the % of that slice you expect to realize as gains this year โ€” for example, if you hold $300k of growth stocks and realize $15k of gains in the year, the Yield for that row is 15k รท 300k = 5%, even if you sold more than $15k worth of shares). For each row we compute Allocation ร— Yield ร— Effective Rate to get that rowโ€™s contribution to Absolute Drag (% of the taxable balance). Summing rows gives total Absolute Drag. We then divide Absolute Drag by your Return Rate to get the modelโ€™s Taxable Drag (%), which is applied to Taxable growth only.
Example (common inputs): 60% equities @ 2% yield taxed 10% โ†’ 0.12%; 40% bonds @ 4% yield taxed 30% โ†’ 0.48%. Absolute Drag = 0.60%. With an 8% return, Taxable Drag = 0.60 รท 8 = 7.5%.

Allocate your current assets across these three accounts. The total here should match your current portfolio balance.
Total allocated: $0
Pre-retirement contribution split: Each pre-retirement year we deposit savings in this order TFSA โ†’ RRSP โ†’ Taxable. Amounts below are annual targets; Taxable is auto-computed as Monthly Savings ร— 12 โˆ’ TFSA โˆ’ RRSP.
Tip: If TFSA + RRSP exceeds Monthly Savings ร— 12, weโ€™ll use TFSA first, then RRSP, and set Taxable to $0 for that year.
Savings grow each pre-retirement year by your Annual Saving Increase Rate (%) and are then split in this order TFSA โ†’ RRSP โ†’ Taxable.
TFSA cap grows automatically from $7,000 in 2025 by โ‰ˆ2.1%/yr for 2026+. We apply that cap before RRSP and Taxable in the yearly split.
Tax-Aware Visuals
Parity mode โ€” charts never block the table

Part A โ€” Six-withdrawal ledger: Year-by-year retirement flows by source using your chosen withdrawal order (e.g., Taxable โ†’ TFSA โ†’ RRSP), with OAS and RRIF-minimum overlays, tax on taxable and RRSP, and ending balances by account. Use the CSV to view all rows.

Age Baseline Assets (100% Taxable) From Taxable From TFSA From RRSP (Gross) RRIF Min % CPP / Support OAS (Gross) OAS Clawback OAS (Net) Tax on Taxable (overlay) Tax on RRSP (overlay) Taxable Drag End Taxable End TFSA End RRSP End Total

Optimize withdrawals (beta)
Next-$1 Analyzer (first retirement year)
RRSP marginal on next $1: โ€”
Taxable marginal on next $1: โ€”
OAS headroom / status: โ€”
Optimizer result (summary)
โ€”