Build a weighted portfolio, compare it with the market, cash, or inflation, and see the return and risk story on dividend-adjusted prices.
No spreadsheets and no hidden assumptions. The engine fetches prices on demand and normalizes every comparison to the same starting capital.
Pick tickers from the list and set target weights. Weights are normalized automatically, so they don't have to sum to exactly 100%.
Compare against the S&P 500, gold, bonds, REITs, or a high-yield savings account and inflation, to see real purchasing-power gains.
Get return, drawdown, volatility, Sharpe, Sortino, Calmar, plus beta, alpha, and tracking error against the benchmark. New to these? Learn what they mean.
Everything here is wired to the live engine. Set the portfolio on the left, then inspect the evidence on the right.
Run a backtest to compare return and risk.
95% circular moving-block confidence interval.
| Holding | Start wt | End wt | Return | Contribution |
|---|
Contributions sum to the portfolio's total return.
Correlation of daily returns. Near +1 means two holdings are one bet wearing two tickers; low or negative values are where diversification actually comes from.
How every number on the dashboard is computed, how to read it, and where to go deeper. All ratios annualize on 252 trading days; returns are on dividend- and split-adjusted prices. None of this is investment advice.
The percentage change in portfolio value across the whole period, on adjusted prices, so dividends you'd have collected are included, not silently dropped. It ignores how long the gain took.
Read it as: the total gain or loss on your starting capital.
Investopedia: Total Return ↗The constant yearly growth rate that would produce the same result. It is the standard way to compare strategies over different time spans on equal footing.
Read it as: "this portfolio grew like X% per year."
Investopedia: CAGR ↗The largest peak-to-trough drop along the way, plus the longest stretch of trading days spent below a prior high. Drawdown measures pain, not average volatility; time underwater measures how long the pain lasted.
Read it as: the deepest loss you'd have had to stomach, and for how long.
Investopedia: Maximum Drawdown ↗Return earned per unit of volatility, above the risk-free rate, which defaults to the same rate as the HYSA benchmark so the app's cash assumptions agree. Roughly: <1 is subpar, ~1 is decent, >2 is strong.
Read it as: how much you were paid for the bumps, beyond what cash paid.
Investopedia: Sharpe Ratio ↗The annualized standard deviation of daily returns: how bumpy the ride was, independent of direction. Two portfolios with the same return can have very different volatility, and most risk ratios are built on this number.
Read it as: the typical size of a year's swings around the trend.
Investopedia: Volatility ↗Sharpe's downside-only sibling: the denominator counts only returns below the risk-free hurdle. Upside volatility isn't risk anyone complains about, so Sortino is more honest for skewed return distributions.
Read it as: how much you were paid for the drops specifically.
Investopedia: Sortino Ratio ↗Annualized return per unit of worst historical loss. Where Sharpe asks "was the day-to-day ride worth it?", Calmar asks "was the worst moment worth it?". Useful when the drawdown is what you actually fear.
Read it as: growth earned per point of deepest pain. N/A if there was no drawdown.
Investopedia: Calmar Ratio ↗Beta is how hard your portfolio moves when the benchmark moves (1.0 = in lockstep, 2.0 = twice as hard). Alpha is the annualized return left over after crediting that market exposure: the part your choices earned. Only shown for market benchmarks; beta against a savings curve is meaningless.
Read it as: β = how much market you own; α = what you added beyond it.
Investopedia: Alpha ↗Tracking error is the volatility of the gap between portfolio and benchmark: how differently you behaved. The information ratio is the active return earned per unit of that difference: it grades the bet, not the market.
Read it as: TE = how far you strayed; IR = whether straying paid.
Investopedia: Information Ratio ↗curl -X POST http://localhost:8000/api/backtest \
-H "Content-Type: application/json" \
-d '{
"start": "2023-01-03",
"end": "2024-01-03",
"initial_capital": 10000,
"benchmark_symbol": "HYSA",
"benchmark_apy": 0.045,
"auto_fetch_missing": true
}'