Methodology
Atlas’s outputs are mechanical computations on the data you upload. This page is the reference for every metric — what the math actually is, what assumptions it bakes in, and where it falls short. If a number Atlas shows you doesn’t match a definition here, it’s a bug.
Period return is computed as (end_value - start_value + cashflows) / start_value, where cashflows are external deposits or withdrawals over the window. Atlas reports daily, MTD, QTD, YTD, 1Y, 3Y, 5Y, and inception-to-date returns when the underlying price history covers the window.
Time-weighted return (TWR) chains daily sub-period returns to neutralize the timing of contributions: TWR = ∏ (1 + r_i) - 1. This is the comparable return metric for benchmarking against an index. Atlas uses TWR for the equity curve and benchmark comparisons.
Money-weighted (IRR)answers the personal question “what was my realized rate of return given when I actually contributed money?” — the IRR of all cashflows plus the current market value as a terminal flow. Solved by Newton-Raphson with bisection fallback. Atlas reports IRR for private-asset positions where the contribution timing is everything; for public securities IRR is available but TWR is the lead metric.
All risk metrics use daily log returns over a rolling 252-day window unless otherwise noted. The risk-free rate defaults to the trailing 3-month Treasury yield (FRED series DGS3MO), updated daily.
r_p - r_f = α + β (r_b - r_f) + ε, annualized.Atlas reports both methods at the 95% and 99% confidence levels.
Both are reported in dollars (NAV × percentile loss) and as a percent of NAV. They are daily measures; multiplying by √N to scale to longer horizons assumes IID normality and is not done by Atlas without a horizon parameter.
The stress engine runs each scenario by applying a closed-form shock to every position:
Historical scenarios (1987, 1998 LTCM, 2000 dot-com, 2008 GFC, March 2020 COVID, etc.) hardcode the SPY drop and 10Y yield move that actually occurred during the worst N-day window. Parametric scenarios are user-defined point shocks. The custom sandbox lets you dial in eight macro shocks plus six sector overlays.
What stress tests do not capture: liquidity risk, gap risk on weekends, model risk in your beta/duration estimates, leverage in derivatives positions, and the correlation breakdown that historically accompanies real crises. Treat outputs as a sensitivity check, not a forecast.
Atlas runs a Fama-French 3-factor + Momentum (FFCM) regression on your daily returns:
r_p - r_f = α + β_M (Mkt-RF) + β_S SMB + β_V HML + β_W WML + ε
Loadings are reported with their t-statistic and a significance badge when |t| ≥ 2 (~95% confidence). Factor time series come from Ken French’s research data library.
The Monte Carlo simulator uses geometric Brownian motion (GBM) with constant drift and volatility:
V(t+dt) = V(t) × exp((μ - ½σ²) dt + σ √dt × Z) + contribution
where Z ~ N(0,1). Default 10,000 paths over the user-supplied horizon, monthly time steps. The fan-chart percentiles (10/50/90) come from sorting the terminal distribution. The probability of reaching a target equals the fraction of paths that finish above the target.
The Goals page uses 2,000 paths (smaller portfolio of paths is plenty for stable funded-probability estimates) with monthly steps and end-of-month contributions.
Limitations:GBM doesn’t model fat tails, regime shifts, mean reversion, or correlation breakdown. Real markets exhibit all four. The funded probability is a useful sanity check; calling it a guarantee would be malpractice.
Atlas reports five concentration metrics on the Allocation tab:
Atlas matches sells to opens using FIFO by default. Other methods (LIFO, HIFO, Lowest-cost-first) are available in the Sale Tax Projection tool. Realized gain is (proceeds - cost_basis), classified as ST if held ≤365 days and LT otherwise.
TLH candidate detection:any open lot in a taxable account with unrealized loss ≥ $500 is flagged. Wash-sale screening checks for any same-symbol BUY in the past 30 days within the visible ledger — and only within the visible ledger. Atlas cannot see trades at other brokerages, in your spouse’s accounts, or in IRAs (where the IRS still applies wash-sale rules per Rev. Rul. 2008-5). If the screen says “clear” it means clear within Atlas’s view; the actual rule is broader.
Each (account category, asset class) pair gets an affinity scorein [0, 1] where 1 means “textbook home.” The score reflects the conventional tax-efficiency framework from the Bogleheads / CFA Institute / practitioner literature — for instance, high-yield bonds in a taxable account score low because their ordinary-income interest is taxed at marginal rates, while the same fund in a tax-deferred account defers the entire bill.
Categories are bucketed by their tax structure: taxable, tax-deferred, tax-free (Roth), medical (HSA), education (529), custodial (UGMA/UTMA), trust, and other (annuity / DAF). The per-pair commentary is curated for ~40 high-value (category, class) combinations and falls back to a category-level template otherwise.
The score is positional (where would the literature put this?) — it is nota rating of your investment decisions. Holding broad US equity in taxable scores high because that’s where it conventionally goes; that doesn’t mean Atlas is recommending you buy more.
A drawdown episodebegins on the day the equity curve crosses below a new high-water mark and ends on the day it recovers above the prior peak. Atlas reports per episode: peak date, trough date, recovery date (or “ongoing”), depth (% from peak), duration (peak to trough, days), and recovery time (trough to recovery, days). Compared in the same window against the benchmark. The underwater curve is (value(t) - rolling_max(value, t)) / rolling_max.
yfinanceas a fallback for symbols Polygon doesn’t cover. Daily adjusted close.Last reviewed May 2026. If a calculation changes, this page changes too. Found a number that doesn’t match? Report it via the contact form.