etf_portfolio_research Backtest Report

Code-generated research report built from pipeline outputs. Use it to understand model behavior, assumptions, risk, and historical simulations; do not treat it as a recommendation.

This report is for research and education only. It is not financial advice, investment advice, tax advice, legal advice, or a recommendation to buy or sell any security.

Reader Guide

This opening guide is meant to make the report readable before you inspect the tables and charts. The results are conditional on the configured inputs and should be interpreted as a historical research experiment.

topic guidance
Purpose Research how a rules-based ETF portfolio behaved historically under the configured data, optimizer, constraints, and rebalance policy.
Research-tool warning This report is for research and education only. It is not financial advice, investment advice, tax advice, legal advice, or a recommendation to buy or sell any security.
Latest rebalance 2026-03-31
ETF universe size 12
Benchmark status Primary benchmark provided
Metadata status ETF metadata included
Price coverage status Price coverage included
  • Start with Assumptions and Limitations so the boundaries of the report are clear.
  • Check ETF Universe Summary and Data Coverage before interpreting performance.
  • Compare Latest Realized Portfolio against Optimizer Target Portfolio to separate practical holdings from ideal model weights.
  • Use Benchmark Comparison, Drawdown Chart, Rolling Risk Metrics, and Stress Periods together; no single chart is enough.
  • Read section explanations as guardrails for what each table or chart can and cannot tell you.

Trust And Safety

How to read this section

What this shows: Common ways readers can overinterpret the report, plus safer readings to use instead.

How to interpret it: Read this before treating any optimized portfolio, metric, or backtest as a decision.

What to watch: The report is evidence under assumptions. It is not a forecast, guarantee, or personalized recommendation.

Common False Conclusion Safer Reading Why It Matters Where To Check
A high Sharpe ratio guarantees strong future returns. A high Sharpe ratio means the portfolio earned more historical excess return per unit of historical volatility in this sample. Sharpe ratios can fall when returns, volatility, correlations, or rates change. Metric Dictionary, Backtest Performance, Rolling Risk Metrics
A good backtest proves the strategy will work. A backtest is a historical experiment under chosen data, costs, constraints, rebalance rules, and benchmark assumptions. Strategies can overfit the past, especially when many universes, objectives, windows, or constraints are tried. Reader Guide, Assumptions and Limitations, Stress Periods
Historical mean returns are reliable forecasts. Historical mean returns are transparent baseline estimates, not dependable predictions of future expected returns. Mean estimates are noisy and can be dominated by sample period, regime changes, and recent winners. Metric Dictionary, Efficient Frontier Chart, Assumptions and Limitations
ETF expense ratios are the only investment cost that matters. Expense ratios matter because they compound, but real implementation can also include spreads, slippage, taxes, FX, account fees, and liquidity costs. A low expense ratio does not automatically make an ETF cheaper to hold or trade in every investor's situation. Weighted Expense Ratio Over Time, Assumptions and Limitations
Contribution-only portfolios always match optimizer targets. Contribution-only rebalancing uses new cash to move toward targets, but realized holdings can drift when selling is restricted. The actual simulated portfolio may carry different risks than the optimizer target, especially after large market moves. Latest Realized Portfolio Table, Optimizer Target Portfolio Table, Realized Constraint Warnings

Metric Dictionary

How to read this section

What this shows: Canonical plain-language definitions for metrics used by the report and pipeline.

How to interpret it: Use this as the reference point for what each metric means before comparing values.

What to watch: Metric values are only meaningful when the caveats and assumptions fit the question you are asking.

Metric Category Plain-English Meaning Formula-Level Summary Good/Bad Interpretation Caveats
Portfolio Weight Portfolio Construction The share of the portfolio allocated to one ETF or group. Asset weight = asset market value / total portfolio value. Weights should match the intended exposure. Very large weights indicate concentration. A small weight can still create large risk if the asset is very volatile.
Expected Return Optimization Inputs The return estimate the optimizer uses before choosing weights. Currently estimated from historical mean returns in the trailing training window. Higher expected return can make an asset more attractive to the optimizer. This is backward-looking and should not be read as a reliable return forecast.
Covariance Optimization Inputs How asset returns moved together historically. Covariance matrix estimated from aligned asset return histories using the configured risk model. Lower or negative covariance can improve diversification if relationships persist. Covariance estimates can change quickly across market regimes.
Portfolio Return Performance The portfolio's percentage gain or loss over one period. Sum of asset weight times asset return for the period. Higher is better for a single period, all else equal. One-period return says little about risk, consistency, or future returns.
Cumulative Return Performance How much the portfolio grew or shrank over the full path. Compound each period: product of (1 + return) minus 1. Higher cumulative return is better, but only after risk is checked. Can hide severe losses or long weak stretches along the way.
CAGR Performance The annualized growth rate implied by the compounded return path. Compound total return over the sample, then convert it to a one-year rate. Higher CAGR is better if risk and drawdowns are acceptable. Smooths the path into one number and can make volatile results look cleaner than they felt.
Annualized Volatility Risk How much portfolio returns fluctuated, scaled to a yearly number. Standard deviation of periodic returns times sqrt(periods per year). Lower volatility is usually a smoother ride. Does not distinguish upside surprises from downside losses.
Portfolio Volatility Risk Estimated total variability of a weighted portfolio. Square root of weights' transpose times covariance matrix times weights. Lower estimated volatility means less modeled return variability. Only as reliable as the covariance estimate and portfolio weights.
Sharpe Ratio Risk-Adjusted Return Return earned per unit of total volatility after the risk-free rate. Annualized excess return divided by annualized volatility. Higher is generally better; below zero means underperforming cash. Penalizes upside and downside volatility equally. If volatility is zero or undefined, the pipeline reports 0.0 rather than NaN or Infinity.
Sortino Ratio Risk-Adjusted Return Return earned per unit of downside volatility. Annualized excess return divided by annualized downside deviation. Higher is generally better when downside risk matters most. Can be unstable when there are few negative observations. If downside deviation is zero or undefined, the pipeline reports 0.0.
Max Drawdown Drawdown The worst historical fall from a previous peak. Minimum value of cumulative wealth divided by its prior running peak minus 1. Closer to zero is better. A more negative value means deeper loss. Only captures the worst observed historical loss, not every possible loss.
Drawdown Drawdown The current decline from a previous high-water mark. Current cumulative wealth / prior running maximum wealth minus 1. Closer to zero is better; deeper negatives mean larger losses. Does not show how long recovery took unless read with the full chart.
Calmar Ratio Risk-Adjusted Return Compounded return compared with the worst drawdown. CAGR divided by absolute value of maximum drawdown. Higher is generally better if the drawdown estimate is credible. Very sensitive to one worst drawdown observation. If maximum drawdown is zero or undefined, the pipeline reports 0.0.
Turnover Implementation How much of the portfolio changed at rebalances on average. Average gross traded-weight change across rebalance-to-rebalance transitions, excluding the initial allocation from cash. Lower usually means fewer trades, lower costs, and less tax drag. The project models costs simply; real execution and taxes can differ.
Average Number of Holdings Concentration The average count of ETFs with non-trivial portfolio weights. Average count of weights above a small tolerance at each rebalance. Higher can mean broader diversification. More holdings do not guarantee better diversification if exposures overlap.
Largest Position Concentration The biggest single ETF weight observed in the portfolio history. Maximum asset weight across all rebalance dates. Lower usually means less single-ETF concentration. A broad ETF can be less risky than its weight suggests; a narrow ETF can be riskier.
Herfindahl Concentration Index Concentration A concentration score based on squared portfolio weights. Average across rebalances of the sum of squared weights. Lower means more evenly spread weights; higher means concentration. Does not know whether ETFs hold overlapping underlying securities.
Worst Month Period Extremes The worst compounded calendar-month return in the sample. Compound returns by month, then take the minimum monthly return. Closer to zero is better. A bad period just outside month boundaries may be split across months.
Worst Quarter Period Extremes The worst compounded calendar-quarter return in the sample. Compound returns by quarter, then take the minimum quarterly return. Closer to zero is better. Quarterly windows are conventional but not the only stress window that matters.
Best Month Period Extremes The best compounded calendar-month return in the sample. Compound returns by month, then take the maximum monthly return. Higher is better, but not if it came with unacceptable risk. Upside extremes can make a strategy look exciting without proving robustness.
Beta Benchmark Relative How sensitive the portfolio was to benchmark moves. Covariance of portfolio and benchmark returns divided by benchmark variance. Beta above 1 moved more than the benchmark; below 1 moved less; near 0 moved independently. Beta depends on the chosen benchmark and historical window. If benchmark variance is zero or undefined, the pipeline reports 0.0.
Alpha Benchmark Relative Return not explained by benchmark exposure in a simple beta model. Portfolio CAGR minus (risk-free rate plus beta times benchmark excess return). Higher historical alpha is better, but it is not proof of skill. Alpha can vanish when the benchmark, period, or risk model changes.
Tracking Error Benchmark Relative How much the portfolio's returns differed from the benchmark. Standard deviation of active returns, annualized. Active return is portfolio return minus benchmark return. Lower means benchmark-like behavior; higher means more benchmark-relative risk. Low tracking error is not automatically good if the benchmark is unsuitable. With fewer than two aligned observations, the pipeline reports 0.0.
Information Ratio Benchmark Relative Benchmark-relative return per unit of tracking error. Average active return divided by active return volatility, annualized. Higher is better for benchmark-relative strategies. Can be unstable when tracking error is very small. If tracking error is zero or undefined, the pipeline reports 0.0.
Rolling Volatility Rolling Risk Volatility measured repeatedly over moving windows. Rolling standard deviation of returns times sqrt(periods per year). Stable or lower rolling volatility suggests steadier behavior. Window length strongly affects the result.
Rolling Sharpe Rolling Risk Sharpe ratio measured repeatedly over moving windows. Rolling mean excess return divided by rolling volatility, annualized. Consistently positive values are better than one isolated high value. Short windows are noisy and can flip quickly.
Rolling Correlation Rolling Risk How closely the portfolio moved with the benchmark over moving windows. Rolling correlation between portfolio and benchmark returns. Lower correlation can mean diversification; higher correlation means benchmark-like movement. Correlation can rise during crises when diversification is most needed.
Stress-Period Return Stress Testing Compounded return during a named difficult historical period. Product of (1 + return) within the stress window minus 1. Less negative is better during market stress. Historical stress windows do not cover every future crisis shape.
Weighted Expense Ratio Cost The portfolio-level annual ETF fee implied by current weights. Sum of each ETF weight times its expense ratio. Lower is usually better for similar exposures. Does not include taxes, spreads, market impact, or broker-specific costs.
Return Attribution Attribution How much each asset or group contributed to portfolio return. Per-period contribution is asset weight times asset return, then aggregated. Positive contributors helped historical return; negative hurt it. Explains past contribution and does not identify future winners.
Risk Attribution Attribution How much each asset or group contributed to portfolio volatility. Euler decomposition using weights and the covariance matrix. Lower, more balanced risk contribution usually means less hidden risk. Depends heavily on the covariance estimate.
Efficient Frontier Optimization Outputs A set of modeled portfolios showing risk and return tradeoffs. Optimized portfolios plotted by expected return and estimated volatility. Portfolios higher and left look better under the model, subject to constraints. The frontier is estimate-driven and not a forecast.
Accuracy ML Evaluation The share of classification predictions that matched actual outcomes. Correct predictions divided by total predictions. Higher is better when classes are balanced and errors cost the same. Can mislead when one class is much more common than another.
Log Loss ML Evaluation How well classification probabilities matched actual outcomes. Negative average log likelihood of the true class probability. Lower is better; confident wrong predictions are penalized heavily. Requires calibrated probabilities to be meaningful.
ROC AUC ML Evaluation How well a classifier ranked positives above negatives. Area under the receiver operating characteristic curve. Higher is better; 0.5 is roughly random ranking. Does not choose a trading threshold or account for economic payoff.
RMSE ML Evaluation Typical regression prediction error with larger errors penalized more. Square root of mean squared prediction error. Lower is better. Sensitive to outliers.
MAE ML Evaluation Typical absolute regression prediction error. Mean absolute value of actual minus predicted values. Lower is better. Does not penalize large misses as strongly as RMSE.
R2 ML Evaluation How much target variation the regression model explained. One minus residual sum of squares divided by total sum of squares. Higher is better; values below zero are worse than a mean forecast. Can look good in-sample while failing out of sample.

ETF Universe Summary

How to read this section

What this shows: The list of ETFs included in this run, with descriptive metadata such as name, asset class, region, currency, cost, and benchmark index when available.

How to interpret it: Treat this as the menu the optimizer was allowed to choose from. If an asset is not in this universe, it cannot appear in the portfolio.

What to watch: A narrow or biased universe can make results look more confident than they are.

ticker name asset_class region currency expense_ratio benchmark_index inception_date
BND Vanguard Total Bond Market ETF fixed_income US USD 0.0003 Bloomberg U.S. Aggregate Float Adjusted Index 2007-04-03
GSG iShares S&P GSCI Commodity-Indexed Trust commodity Global USD 0.0075 S&P GSCI Total Return Index 2006-07-21
IAU iShares Gold Trust commodity Global USD 0.0025 LBMA Gold Price 2005-01-21
IEI iShares 3-7 Year Treasury Bond ETF fixed_income US USD 0.0015 ICE U.S. Treasury 3-7 Year Bond Index 2007-01-05
QQQ Invesco QQQ Trust equity US USD 0.0020 Nasdaq-100 Index 1999-03-10
REMX VanEck Rare Earth and Strategic Metals ETF equity Global USD 0.0058 MVIS Global Rare Earth Strategic Metals Index 2010-10-27
TIP iShares TIPS Bond ETF fixed_income US USD 0.0019 Bloomberg U.S. Treasury Inflation Protected Securities Index 2003-12-04
TLT iShares 20+ Year Treasury Bond ETF fixed_income US USD 0.0015 ICE U.S. Treasury 20+ Year Bond Index 2002-07-22
VEA Vanguard FTSE Developed Markets ETF equity Developed ex-US USD 0.0006 FTSE Developed All Cap ex US Index 2007-07-20
VNQ Vanguard Real Estate ETF real_estate US USD 0.0013 MSCI US Investable Market Real Estate 25/50 Index 2004-09-29
VTI Vanguard Total Stock Market ETF equity US USD 0.0003 CRSP US Total Market Index 2001-05-24
VWO Vanguard FTSE Emerging Markets ETF equity Emerging Markets USD 0.0008 FTSE Emerging Markets All Cap China A Inclusion Index 2005-03-10

Data Coverage Table

How to read this section

What this shows: The usable price history available for each ETF after the data pipeline has loaded and aligned provider data.

How to interpret it: Longer and more complete histories generally make estimates more stable, but they still only describe the past.

What to watch: Short histories, late start dates, or missing values can materially affect backtests and optimization results.

ticker start_date end_date observations coverage_ratio asset_class region currency inception_date
BND 2011-01-03 2026-04-24 3850 1.0 fixed_income US USD 2007-04-03
GSG 2011-01-03 2026-04-24 3850 1.0 commodity Global USD 2006-07-21
IAU 2011-01-03 2026-04-24 3850 1.0 commodity Global USD 2005-01-21
IEI 2011-01-03 2026-04-24 3850 1.0 fixed_income US USD 2007-01-05
QQQ 2011-01-03 2026-04-24 3850 1.0 equity US USD 1999-03-10
REMX 2011-01-03 2026-04-24 3850 1.0 equity Global USD 2010-10-27
TIP 2011-01-03 2026-04-24 3850 1.0 fixed_income US USD 2003-12-04
TLT 2011-01-03 2026-04-24 3850 1.0 fixed_income US USD 2002-07-22
VEA 2011-01-03 2026-04-24 3850 1.0 equity Developed ex-US USD 2007-07-20
VNQ 2011-01-03 2026-04-24 3850 1.0 real_estate US USD 2004-09-29
VTI 2011-01-03 2026-04-24 3850 1.0 equity US USD 2001-05-24
VWO 2011-01-03 2026-04-24 3850 1.0 equity Emerging Markets USD 2005-03-10

Missing Data Table

How to read this section

What this shows: Counts and patterns of missing price observations for each asset.

How to interpret it: Missing data is not just a technical issue; it can change return calculations, risk estimates, and asset eligibility.

What to watch: Investigate assets with high missing counts before trusting a result that depends heavily on them.

ticker missing_count missing_fraction non_null_observations row_count
BND 0 0.0 3850 3850
GSG 0 0.0 3850 3850
IAU 0 0.0 3850 3850
IEI 0 0.0 3850 3850
QQQ 0 0.0 3850 3850
REMX 0 0.0 3850 3850
TIP 0 0.0 3850 3850
TLT 0 0.0 3850 3850
VEA 0 0.0 3850 3850
VNQ 0 0.0 3850 3850
VTI 0 0.0 3850 3850
VWO 0 0.0 3850 3850

Efficient Frontier Chart

How to read this section

What this shows: A model-based map of possible risk and return combinations under the configured optimization assumptions and constraints.

How to interpret it: Points further up suggest higher estimated return; points further right suggest higher estimated volatility. These are estimates, not guarantees.

What to watch: Small input changes can move the frontier. Do not read the exact location of a point as precision about the future.

Latest Realized Portfolio Table

How to read this section

What this shows: The portfolio weights actually held at the latest rebalance after realized portfolio mechanics such as contribution-only rebalancing or drift handling.

How to interpret it: This is the practical portfolio state produced by the backtest, not necessarily the optimizer's ideal target.

What to watch: Differences from target weights may reflect rebalancing policy, constraints, transaction costs, or drift.

ETF Weight
VTI 0.411967
QQQ 0.172124
IAU 0.116707
BND 0.074087
IEI 0.044333
VEA 0.043598
TLT 0.041371
TIP 0.033603
VNQ 0.030261
GSG 0.023513
REMX 0.007955
VWO 0.000479

Optimizer Target Portfolio Table

How to read this section

What this shows: The optimizer's desired weights at the latest rebalance before realized portfolio mechanics are applied.

How to interpret it: Use this to understand what the model wanted under its objective and constraints.

What to watch: A target can look attractive in theory while being hard to reach in practice.

ETF Weight
VTI 0.333499
IEI 0.300000
IAU 0.150000
QQQ 0.111383
VEA 0.055119
BND 0.050000
VWO 0.000000
TIP 0.000000
VNQ 0.000000
GSG 0.000000
TLT 0.000000
REMX 0.000000

Portfolio Weights

How to read this section

What this shows: How portfolio allocations changed across rebalance dates.

How to interpret it: Stable weights suggest a more consistent allocation; large swings suggest the model is reacting strongly to new data or unstable estimates.

What to watch: Frequent large changes can imply higher turnover, implementation complexity, and model sensitivity.

Exposure

How to read this section

What this shows: Portfolio weights grouped by higher-level categories such as asset class or region.

How to interpret it: Use this to see the broad economic bets behind the ticker-level allocations.

What to watch: A portfolio can look diversified by ticker while still being concentrated in one asset class, region, or risk factor.

Asset Class Weight
equity 0.636123
fixed_income 0.193395
commodity 0.140220
real_estate 0.030261
Region Weight
US 0.807747
Global 0.148175
Developed ex-US 0.043598
Emerging Markets 0.000479

Benchmark Comparison

How to read this section

What this shows: Portfolio results compared with one or more configured benchmarks.

How to interpret it: The benchmark is the yardstick. Outperformance matters only relative to the risk, drawdowns, and assumptions required to achieve it.

What to watch: A poor benchmark choice can make a strategy look better or worse than it really is.

Metric Strategy CAGR Annualized Volatility Sharpe Ratio Sortino Ratio Max Drawdown Calmar Ratio Turnover Average Number of Holdings Largest Position Herfindahl Concentration Index Worst Month Worst Quarter Best Month Beta Alpha Tracking Error Information Ratio
Optimized Strategy 0.104314 0.122685 0.625821 0.874228 -0.251149 0.415347 0.021322 9.200000 0.449637 0.235442 -0.082072 -0.143583 0.088194 0.676624 0.019746 0.068530 -0.188473
Selected Benchmark ETF 0.110648 0.171215 0.523874 0.723171 -0.342362 0.323189 0.000000 1.000000 1.000000 1.000000 -0.147645 -0.221525 0.123687 1.000000 0.000000 0.000000 0.000000
60/40 Portfolio 0.076118 0.107779 0.456474 0.628608 -0.220999 0.344426 0.000000 2.000000 0.600000 0.520000 -0.090026 -0.124988 0.078000 0.617266 -0.003663 0.068856 -0.588140
simple_global_baseline 0.105946 0.155252 0.533457 0.738480 -0.314086 0.337314 0.000000 4.000000 0.550000 0.385000 -0.130737 -0.196669 0.110082 0.904370 0.003010 0.019880 -0.345815
Equal-Weight ETF Universe 0.087649 0.116463 0.522325 0.720902 -0.215554 0.406623 0.023993 12.000000 0.226959 0.100569 -0.087564 -0.126401 0.081637 0.635684 0.006383 0.074891 -0.385407
Inverse-Volatility Portfolio 0.080620 0.105533 0.503394 0.698321 -0.222279 0.362697 0.021637 12.000000 0.231234 0.125264 -0.078521 -0.125741 0.072921 0.582321 0.003657 0.079440 -0.460354
Minimum-Variance Portfolio 0.081695 0.096807 0.549863 0.769539 -0.224261 0.364287 0.019778 8.622222 0.462968 0.273342 -0.073087 -0.116124 0.071288 0.528589 0.009066 0.087724 -0.415673
Risk-Parity Portfolio 0.089113 0.107907 0.567236 0.788543 -0.227225 0.392180 0.026211 10.992593 0.218527 0.116671 -0.082183 -0.131096 0.075480 0.566931 0.013392 0.087862 -0.324216
Previous Optimized Strategy 0.091476 0.118638 0.544472 0.756548 -0.233934 0.391033 0.025594 12.000000 0.392891 0.148762 -0.082043 -0.137338 0.080980 0.951879 -0.009262 0.021724 -0.560863

Backtest Performance

How to read this section

What this shows: Historical simulated performance for the portfolio over the tested period.

How to interpret it: Read this as a historical experiment: what would have happened under these exact rules, data, costs, and constraints.

What to watch: Past performance does not guarantee future results. Strong backtests can still fail out of sample.

Metric Strategy CAGR Annualized Volatility Sharpe Ratio Sortino Ratio Max Drawdown Calmar Ratio Turnover Average Number of Holdings Largest Position Herfindahl Concentration Index Worst Month Worst Quarter Best Month Beta Alpha Tracking Error Information Ratio
Optimized Strategy 0.104314 0.122685 0.625821 0.874228 -0.251149 0.415347 0.021322 9.200000 0.449637 0.235442 -0.082072 -0.143583 0.088194 0.676624 0.019746 0.068530 -0.188473
Selected Benchmark ETF 0.110648 0.171215 0.523874 0.723171 -0.342362 0.323189 0.000000 1.000000 1.000000 1.000000 -0.147645 -0.221525 0.123687 1.000000 0.000000 0.000000 0.000000
60/40 Portfolio 0.076118 0.107779 0.456474 0.628608 -0.220999 0.344426 0.000000 2.000000 0.600000 0.520000 -0.090026 -0.124988 0.078000 0.617266 -0.003663 0.068856 -0.588140
simple_global_baseline 0.105946 0.155252 0.533457 0.738480 -0.314086 0.337314 0.000000 4.000000 0.550000 0.385000 -0.130737 -0.196669 0.110082 0.904370 0.003010 0.019880 -0.345815
Equal-Weight ETF Universe 0.087649 0.116463 0.522325 0.720902 -0.215554 0.406623 0.023993 12.000000 0.226959 0.100569 -0.087564 -0.126401 0.081637 0.635684 0.006383 0.074891 -0.385407
Inverse-Volatility Portfolio 0.080620 0.105533 0.503394 0.698321 -0.222279 0.362697 0.021637 12.000000 0.231234 0.125264 -0.078521 -0.125741 0.072921 0.582321 0.003657 0.079440 -0.460354
Minimum-Variance Portfolio 0.081695 0.096807 0.549863 0.769539 -0.224261 0.364287 0.019778 8.622222 0.462968 0.273342 -0.073087 -0.116124 0.071288 0.528589 0.009066 0.087724 -0.415673
Risk-Parity Portfolio 0.089113 0.107907 0.567236 0.788543 -0.227225 0.392180 0.026211 10.992593 0.218527 0.116671 -0.082183 -0.131096 0.075480 0.566931 0.013392 0.087862 -0.324216
Previous Optimized Strategy 0.091476 0.118638 0.544472 0.756548 -0.233934 0.391033 0.025594 12.000000 0.392891 0.148762 -0.082043 -0.137338 0.080980 0.951879 -0.009262 0.021724 -0.560863

Drawdown Chart

How to read this section

What this shows: The depth and duration of historical losses from prior portfolio highs.

How to interpret it: Drawdown helps translate risk into a lived experience: how much the portfolio fell before recovering.

What to watch: A strategy with attractive returns but unacceptable drawdowns may be unsuitable for many real investors.

Rolling Risk Metrics

How to read this section

What this shows: How volatility, risk-adjusted returns, and benchmark relationship changed over time.

How to interpret it: Stable rolling metrics suggest more consistent behavior; unstable metrics suggest the portfolio behaves differently across market regimes.

What to watch: Rolling windows are backward-looking and can hide sudden breaks at the edges.

Stress Periods

How to read this section

What this shows: Portfolio behavior during difficult historical windows.

How to interpret it: Use this to understand how the strategy handled adverse environments, not just average conditions.

What to watch: Stress tests are limited to periods represented in the available data.

Period Portfolio Selected Benchmark ETF 60/40 Portfolio simple_global_baseline Equal-Weight ETF Universe Inverse-Volatility Portfolio Minimum-Variance Portfolio Risk-Parity Portfolio Previous Optimized Strategy
COVID Crash (2020-02 to 2020-04) -0.024082 -0.127249 -0.058816 -0.105637 -0.063208 -0.033484 -0.022710 -0.019481 -0.036624
Inflation / Rate Shock (2022) -0.205546 -0.180034 -0.156189 -0.173498 -0.166145 -0.178969 -0.164728 -0.180900 -0.192348
Recent Drawdown (2026-01 to 2026-03) -0.072866 -0.085310 -0.053374 -0.077127 -0.049349 -0.059547 -0.063011 -0.062297 -0.068769

Weighted Expense Ratio Over Time

How to read this section

What this shows: The portfolio's weighted average ETF expense ratio across time.

How to interpret it: Lower costs leave more gross return for the investor, but cost is only one part of portfolio quality.

What to watch: Expense ratios exclude taxes, spreads, slippage, advisory fees, and account-level costs.

rebalance_date weighted_expense_ratio
2015-01-30 0.000850
2015-02-27 0.000839
2015-03-31 0.000833
2015-04-30 0.000823
2015-05-29 0.000817
2015-06-30 0.000808
2015-07-31 0.000815
2015-08-31 0.000810
2015-09-30 0.000809
2015-10-30 0.000811
2015-11-30 0.000808
2015-12-31 0.000806
2016-01-29 0.000809
2016-02-29 0.000807
2016-03-31 0.000805
2016-04-29 0.000793
2016-05-31 0.000796
2016-06-30 0.000798
2016-07-29 0.000802
2016-08-31 0.000802
2016-09-30 0.000804
2016-10-31 0.000799
2016-11-30 0.000788
2016-12-30 0.000789
2017-01-31 0.000797
2017-02-28 0.000802
2017-03-31 0.000804
2017-04-28 0.000806
2017-05-31 0.000809
2017-06-30 0.000803
2017-07-31 0.000804
2017-08-31 0.000807
2017-09-29 0.000801
2017-10-31 0.000802
2017-11-30 0.000805
2017-12-29 0.000808
2018-01-31 0.000811
2018-02-28 0.000814
2018-03-29 0.000818
2018-04-30 0.000818
2018-05-31 0.000826
2018-06-29 0.000827
2018-07-31 0.000827
2018-08-31 0.000830
2018-09-28 0.000826
2018-10-31 0.000828
2018-11-30 0.000829
2018-12-31 0.000842
2019-01-31 0.000845
2019-02-28 0.000840
2019-03-29 0.000844
2019-04-30 0.000840
2019-05-31 0.000844
2019-06-28 0.000842
2019-07-31 0.000840
2019-08-30 0.000855
2019-09-30 0.000851
2019-10-31 0.000862
2019-11-29 0.000862
2019-12-31 0.000867
2020-01-31 0.000885
2020-02-28 0.000902
2020-03-31 0.000934
2020-04-30 0.000937
2020-05-29 0.000939
2020-06-30 0.000950
2020-07-31 0.000964
2020-08-31 0.000966
2020-09-30 0.000965
2020-10-30 0.000966
2020-11-30 0.000954
2020-12-31 0.000960
2021-01-29 0.000961
2021-02-26 0.000948
2021-03-31 0.000943
2021-04-30 0.000948
2021-05-28 0.000955
2021-06-30 0.000959
2021-07-30 0.000968
2021-08-31 0.000974
2021-09-30 0.000977
2021-10-29 0.000982
2021-11-30 0.000996
2021-12-31 0.000995
2022-01-31 0.000998
2022-02-28 0.001010
2022-03-31 0.001016
2022-04-29 0.001017
2022-05-31 0.001017
2022-06-30 0.001035
2022-07-29 0.001037
2022-08-31 0.001050
2022-09-30 0.001062
2022-10-31 0.001055
2022-11-30 0.001068
2022-12-30 0.001078
2023-01-31 0.001095
2023-02-28 0.001100
2023-03-31 0.001115
2023-04-28 0.001117
2023-05-31 0.001130
2023-06-30 0.001126
2023-07-31 0.001134
2023-08-31 0.001137
2023-09-29 0.001149
2023-10-31 0.001158
2023-11-30 0.001143
2023-12-29 0.001138
2024-01-31 0.001135
2024-02-29 0.001135
2024-03-28 0.001142
2024-04-30 0.001161
2024-05-31 0.001157
2024-06-28 0.001157
2024-07-31 0.001147
2024-08-30 0.001139
2024-09-30 0.001143
2024-10-31 0.001152
2024-11-29 0.001131
2024-12-31 0.001142
2025-01-31 0.001146
2025-02-28 0.001149
2025-03-31 0.001173
2025-04-30 0.001172
2025-05-30 0.001164
2025-06-30 0.001162
2025-07-31 0.001166
2025-08-29 0.001170
2025-09-30 0.001181
2025-10-31 0.001187
2025-11-28 0.001193
2025-12-31 0.001195
2026-01-30 0.001222
2026-02-27 0.001240
2026-03-31 0.001263

Return Attribution

How to read this section

What this shows: A breakdown of which assets or groups contributed to historical portfolio returns.

How to interpret it: Positive contributors helped the backtest; negative contributors reduced it.

What to watch: Attribution explains the past. It does not prove the same assets will drive future returns.

level name contribution
Asset VTI 0.625469
Asset QQQ 0.346613
Asset IAU 0.098141
Asset VEA 0.041409
Asset BND 0.033915
Asset VNQ 0.031934
Asset GSG 0.008126
Asset TIP 0.002638
Asset TLT 0.002327
Asset IEI 0.001713
Asset VWO 0.000044
Asset REMX -0.000442
Asset Class equity 1.013093
Asset Class commodity 0.106268
Asset Class fixed_income 0.040593
Asset Class real_estate 0.031934
Total Portfolio 1.191888

Risk Attribution

How to read this section

What this shows: A breakdown of which assets or groups contributed to estimated portfolio risk.

How to interpret it: Large risk contributors are the exposures most responsible for portfolio volatility.

What to watch: Risk contribution depends on the covariance estimate, which can change across regimes.

level name risk_contribution
Asset VTI 0.067411
Asset QQQ 0.032651
Asset VEA 0.006275
Asset IAU 0.005077
Asset VNQ 0.004204
Asset GSG 0.001829
Asset REMX 0.001651
Asset BND 0.000855
Asset TIP 0.000314
Asset VWO 0.000071
Asset IEI 0.000021
Asset TLT -0.000348
Asset Class equity 0.108058
Asset Class commodity 0.006906
Asset Class real_estate 0.004204
Asset Class fixed_income 0.000842
Total Portfolio Volatility 0.120010

Realized Constraint Warnings

How to read this section

What this shows: Cases where realized holdings moved outside configured bounds after applying the chosen rebalance policy.

How to interpret it: Warnings do not necessarily mean the run failed; they show where practical mechanics diverged from ideal constraints.

What to watch: Repeated or large breaches may mean the rebalance policy is too loose for the intended use.

rebalance_date constraint_type identifier direction actual bound breach
2015-02-27 ticker QQQ above_max 0.155874 0.15 0.005874
2015-03-31 ticker QQQ above_max 0.150654 0.15 0.000654
2015-04-30 ticker QQQ above_max 0.151993 0.15 0.001993
2015-05-29 ticker QQQ above_max 0.152709 0.15 0.002709
2015-06-30 ticker QQQ above_max 0.150323 0.15 0.000323
2015-06-30 ticker VEA below_min 0.049792 0.05 0.000208
2015-07-31 ticker QQQ above_max 0.151071 0.15 0.001071
2015-07-31 ticker VEA below_min 0.048624 0.05 0.001376
2015-08-31 ticker VEA below_min 0.046694 0.05 0.003306
2015-09-30 ticker VEA below_min 0.044888 0.05 0.005112
2015-10-30 ticker VEA below_min 0.045109 0.05 0.004891
2015-11-30 ticker VEA below_min 0.044436 0.05 0.005564
2015-12-31 ticker VEA below_min 0.043766 0.05 0.006234
2016-01-29 ticker VEA below_min 0.042416 0.05 0.007584
2016-02-29 ticker VEA below_min 0.041498 0.05 0.008502
2016-03-31 ticker VEA below_min 0.042701 0.05 0.007299
2016-04-29 ticker VEA below_min 0.043626 0.05 0.006374
2016-05-31 ticker VEA below_min 0.042884 0.05 0.007116
2016-06-30 ticker VEA below_min 0.041550 0.05 0.008450
2016-07-29 ticker VEA below_min 0.042003 0.05 0.007997
2016-08-31 ticker VEA below_min 0.042596 0.05 0.007404
2016-09-30 ticker VEA below_min 0.043468 0.05 0.006532
2016-10-31 ticker VEA below_min 0.043557 0.05 0.006443
2016-11-30 ticker VEA below_min 0.043127 0.05 0.006873
2016-12-30 ticker VEA below_min 0.043708 0.05 0.006292
2017-01-31 ticker VEA below_min 0.044767 0.05 0.005233
2017-02-28 ticker VEA below_min 0.044290 0.05 0.005710
2017-03-31 ticker VEA below_min 0.045562 0.05 0.004438
2017-04-28 ticker VEA below_min 0.045857 0.05 0.004143
2017-05-31 ticker VEA below_min 0.046585 0.05 0.003415
2017-06-30 ticker VEA below_min 0.046596 0.05 0.003404
2017-07-31 ticker VEA below_min 0.047072 0.05 0.002928
2017-08-31 ticker VEA below_min 0.046497 0.05 0.003503
2017-09-29 ticker VEA below_min 0.047358 0.05 0.002642
2017-10-31 ticker VEA below_min 0.047315 0.05 0.002685
2017-11-30 ticker VEA below_min 0.046617 0.05 0.003383
2017-12-29 ticker VEA below_min 0.046661 0.05 0.003339
2018-01-31 ticker QQQ above_max 0.154391 0.15 0.004391
2018-01-31 ticker VEA below_min 0.047350 0.05 0.002650
2018-02-28 ticker QQQ above_max 0.155925 0.15 0.005925
2018-02-28 ticker VEA below_min 0.046077 0.05 0.003923
2018-03-29 ticker VEA below_min 0.045973 0.05 0.004027
2018-04-30 ticker VEA below_min 0.046327 0.05 0.003673
2018-05-31 ticker QQQ above_max 0.152711 0.15 0.002711
2018-05-31 ticker VEA below_min 0.044389 0.05 0.005611
2018-06-29 ticker QQQ above_max 0.152239 0.15 0.002239
2018-06-29 ticker VEA below_min 0.043216 0.05 0.006784
2018-07-31 ticker QQQ above_max 0.152779 0.15 0.002779
2018-07-31 ticker VEA below_min 0.043338 0.05 0.006662
2018-08-31 ticker QQQ above_max 0.156371 0.15 0.006371
2018-08-31 ticker VEA below_min 0.041440 0.05 0.008560
2018-09-28 ticker QQQ above_max 0.155678 0.15 0.005678
2018-09-28 ticker VEA below_min 0.041889 0.05 0.008111
2018-10-31 ticker VEA below_min 0.040402 0.05 0.009598
2018-11-30 ticker VEA below_min 0.040005 0.05 0.009995
2018-12-31 ticker VEA below_min 0.039585 0.05 0.010415
2019-01-31 ticker VEA below_min 0.040084 0.05 0.009916
2019-02-28 ticker VEA below_min 0.040268 0.05 0.009732
2019-03-29 ticker VEA below_min 0.039599 0.05 0.010401
2019-04-30 ticker VEA below_min 0.039851 0.05 0.010149
2019-05-31 ticker VEA below_min 0.039014 0.05 0.010986
2019-06-28 ticker VEA below_min 0.039612 0.05 0.010388
2019-07-31 ticker VEA below_min 0.038503 0.05 0.011497
2019-08-30 ticker VEA below_min 0.037581 0.05 0.012419
2019-09-30 ticker VEA below_min 0.039219 0.05 0.010781
2019-10-31 ticker VEA below_min 0.039951 0.05 0.010049
2019-11-29 ticker VEA below_min 0.039816 0.05 0.010184
2019-12-31 ticker VEA below_min 0.040610 0.05 0.009390
2020-01-31 ticker VEA below_min 0.038834 0.05 0.011166
2020-02-28 ticker VEA below_min 0.037537 0.05 0.012463
2020-03-31 ticker TLT above_max 0.151552 0.15 0.001552
2020-03-31 ticker VEA below_min 0.034540 0.05 0.015460
2020-04-30 ticker QQQ above_max 0.151458 0.15 0.001458
2020-04-30 ticker VEA below_min 0.034114 0.05 0.015886
2020-05-29 ticker QQQ above_max 0.155447 0.15 0.005447
2020-05-29 ticker VEA below_min 0.034939 0.05 0.015061
2020-06-30 ticker QQQ above_max 0.160490 0.15 0.010490
2020-06-30 ticker VEA below_min 0.035374 0.05 0.014626
2020-07-31 ticker QQQ above_max 0.163093 0.15 0.013093
2020-07-31 ticker VEA below_min 0.034621 0.05 0.015379
2020-08-31 ticker QQQ above_max 0.173486 0.15 0.023486
2020-08-31 ticker VEA below_min 0.035137 0.05 0.014863
2020-09-30 ticker QQQ above_max 0.167269 0.15 0.017269
2020-09-30 ticker VEA below_min 0.035539 0.05 0.014461
2020-10-30 ticker QQQ above_max 0.164788 0.15 0.014788
2020-10-30 ticker VEA below_min 0.035075 0.05 0.014925
2020-11-30 ticker QQQ above_max 0.170038 0.15 0.020038
2020-11-30 ticker VEA below_min 0.037377 0.05 0.012623
2020-12-31 ticker QQQ above_max 0.171896 0.15 0.021896
2020-12-31 ticker VEA below_min 0.038214 0.05 0.011786
2021-01-29 ticker QQQ above_max 0.173053 0.15 0.023053
2021-01-29 ticker VEA below_min 0.038261 0.05 0.011739
2021-02-26 ticker QQQ above_max 0.171728 0.15 0.021728
2021-02-26 ticker VEA below_min 0.039093 0.05 0.010907
2021-03-31 ticker QQQ above_max 0.171648 0.15 0.021648
2021-03-31 ticker VEA below_min 0.039617 0.05 0.010383
2021-04-30 ticker QQQ above_max 0.173771 0.15 0.023771
2021-04-30 ticker VEA below_min 0.039164 0.05 0.010836
2021-05-28 ticker QQQ above_max 0.169893 0.15 0.019893
2021-05-28 ticker VEA below_min 0.040267 0.05 0.009733
2021-06-30 ticker QQQ above_max 0.175842 0.15 0.025842
2021-06-30 ticker VEA below_min 0.038996 0.05 0.011004
2021-07-30 ticker QQQ above_max 0.176354 0.15 0.026354
2021-07-30 ticker VEA below_min 0.038335 0.05 0.011665
2021-08-31 ticker QQQ above_max 0.179511 0.15 0.029511
2021-08-31 ticker VEA below_min 0.038048 0.05 0.011952
2021-09-30 ticker QQQ above_max 0.175509 0.15 0.025509
2021-09-30 ticker VEA below_min 0.038224 0.05 0.011776
2021-10-29 ticker QQQ above_max 0.179755 0.15 0.029755
2021-10-29 ticker VEA below_min 0.037583 0.05 0.012417
2021-11-30 ticker QQQ above_max 0.183134 0.15 0.033134
2021-11-30 ticker VEA below_min 0.035931 0.05 0.014069
2021-12-31 ticker QQQ above_max 0.180365 0.15 0.030365
2021-12-31 ticker VEA below_min 0.036632 0.05 0.013368
2022-01-31 ticker QQQ above_max 0.173436 0.15 0.023436
2022-01-31 ticker VEA below_min 0.037239 0.05 0.012761
2022-02-28 ticker QQQ above_max 0.168288 0.15 0.018288
2022-02-28 ticker VEA below_min 0.036960 0.05 0.013040
2022-03-31 ticker QQQ above_max 0.172774 0.15 0.022774
2022-03-31 ticker VEA below_min 0.036632 0.05 0.013368
2022-04-29 ticker QQQ above_max 0.161901 0.15 0.011901
2022-04-29 ticker VEA below_min 0.037174 0.05 0.012826
2022-05-31 ticker QQQ above_max 0.160075 0.15 0.010075
2022-05-31 ticker VEA below_min 0.038095 0.05 0.011905
2022-06-30 ticker QQQ above_max 0.154619 0.15 0.004619
2022-06-30 ticker VEA below_min 0.036863 0.05 0.013137
2022-07-29 ticker QQQ above_max 0.162288 0.15 0.012288
2022-07-29 ticker VEA below_min 0.036332 0.05 0.013668
2022-08-31 ticker QQQ above_max 0.159604 0.15 0.009604
2022-08-31 ticker VEA below_min 0.035661 0.05 0.014339
2022-09-30 ticker QQQ above_max 0.154895 0.15 0.004895
2022-09-30 ticker VEA below_min 0.035082 0.05 0.014918
2022-10-31 ticker QQQ above_max 0.154959 0.15 0.004959
2022-10-31 ticker VEA below_min 0.036002 0.05 0.013998
2022-11-30 ticker QQQ above_max 0.154368 0.15 0.004368
2022-11-30 ticker VEA below_min 0.038405 0.05 0.011595
2022-12-30 ticker VEA below_min 0.039291 0.05 0.010709
2023-01-31 ticker QQQ above_max 0.150806 0.15 0.000806
2023-01-31 ticker VEA below_min 0.040021 0.05 0.009979
2023-02-28 ticker QQQ above_max 0.153963 0.15 0.003963
2023-02-28 ticker VEA below_min 0.039723 0.05 0.010277
2023-03-31 ticker QQQ above_max 0.161489 0.15 0.011489
2023-03-31 ticker VEA below_min 0.039154 0.05 0.010846
2023-04-28 ticker QQQ above_max 0.160436 0.15 0.010436
2023-04-28 ticker VEA below_min 0.041805 0.05 0.008195
2023-05-31 ticker QQQ above_max 0.171574 0.15 0.021574
2023-05-31 ticker VEA below_min 0.040022 0.05 0.009978
2023-06-30 ticker QQQ above_max 0.174652 0.15 0.024652
2023-06-30 ticker VEA below_min 0.040114 0.05 0.009886
2023-07-31 ticker QQQ above_max 0.176402 0.15 0.026402
2023-07-31 ticker VEA below_min 0.040326 0.05 0.009674
2023-08-31 ticker QQQ above_max 0.176469 0.15 0.026469
2023-08-31 ticker VEA below_min 0.039629 0.05 0.010371
2023-09-29 ticker QQQ above_max 0.174816 0.15 0.024816
2023-09-29 ticker VEA below_min 0.039895 0.05 0.010105
2023-10-31 ticker QQQ above_max 0.173972 0.15 0.023972
2023-10-31 ticker VEA below_min 0.039275 0.05 0.010725
2023-11-30 ticker QQQ above_max 0.177986 0.15 0.027986
2023-11-30 ticker VEA below_min 0.039581 0.05 0.010419
2023-12-29 ticker QQQ above_max 0.178451 0.15 0.028451
2023-12-29 ticker VEA below_min 0.039788 0.05 0.010212
2024-01-31 ticker QQQ above_max 0.180728 0.15 0.030728
2024-01-31 ticker VEA below_min 0.039255 0.05 0.010745
2024-02-29 ticker QQQ above_max 0.183905 0.15 0.033905
2024-02-29 ticker VEA below_min 0.039111 0.05 0.010889
2024-03-28 ticker QQQ above_max 0.180875 0.15 0.030875
2024-03-28 ticker VEA below_min 0.039496 0.05 0.010504
2024-04-30 ticker QQQ above_max 0.178822 0.15 0.028822
2024-04-30 ticker VEA below_min 0.039569 0.05 0.010431
2024-05-31 ticker QQQ above_max 0.181929 0.15 0.031929
2024-05-31 ticker VEA below_min 0.039812 0.05 0.010188
2024-06-28 ticker QQQ above_max 0.188134 0.15 0.038134
2024-06-28 ticker VEA below_min 0.038164 0.05 0.011836
2024-07-31 ticker QQQ above_max 0.181286 0.15 0.031286
2024-07-31 ticker VEA below_min 0.038643 0.05 0.011357
2024-08-30 ticker QQQ above_max 0.179472 0.15 0.029472
2024-08-30 ticker VEA below_min 0.039036 0.05 0.010964
2024-09-30 ticker QQQ above_max 0.179571 0.15 0.029571
2024-09-30 ticker VEA below_min 0.038569 0.05 0.011431
2024-10-31 ticker QQQ above_max 0.179485 0.15 0.029485
2024-10-31 ticker VEA below_min 0.037007 0.05 0.012993
2024-11-29 ticker QQQ above_max 0.181249 0.15 0.031249
2024-11-29 ticker VEA below_min 0.035737 0.05 0.014263
2024-12-31 ticker QQQ above_max 0.186021 0.15 0.036021
2024-12-31 ticker VEA below_min 0.035384 0.05 0.014616
2025-01-31 ticker QQQ above_max 0.184531 0.15 0.034531
2025-01-31 ticker VEA below_min 0.036026 0.05 0.013974
2025-02-28 ticker QQQ above_max 0.179859 0.15 0.029859
2025-02-28 ticker VEA below_min 0.037039 0.05 0.012961
2025-03-31 ticker QQQ above_max 0.171308 0.15 0.021308
2025-03-31 ticker VEA below_min 0.038296 0.05 0.011704
2025-04-30 ticker QQQ above_max 0.172701 0.15 0.022701
2025-04-30 ticker VEA below_min 0.039725 0.05 0.010275
2025-05-30 ticker QQQ above_max 0.180416 0.15 0.030416
2025-05-30 ticker VEA below_min 0.040038 0.05 0.009962
2025-06-30 ticker QQQ above_max 0.184082 0.15 0.034082
2025-06-30 ticker VEA below_min 0.039778 0.05 0.010222
2025-07-31 ticker QQQ above_max 0.185472 0.15 0.035472
2025-07-31 ticker VEA below_min 0.038674 0.05 0.011326
2025-08-29 ticker QQQ above_max 0.182644 0.15 0.032644
2025-08-29 ticker VEA below_min 0.040118 0.05 0.009882
2025-09-30 ticker QQQ above_max 0.184699 0.15 0.034699
2025-09-30 ticker VEA below_min 0.039979 0.05 0.010021
2025-10-31 ticker QQQ above_max 0.188594 0.15 0.038594
2025-10-31 ticker VEA below_min 0.039785 0.05 0.010215
2025-11-28 ticker QQQ above_max 0.184135 0.15 0.034135
2025-11-28 ticker VEA below_min 0.040102 0.05 0.009898
2025-12-31 ticker QQQ above_max 0.182520 0.15 0.032520
2025-12-31 ticker VEA below_min 0.041378 0.05 0.008622
2026-01-30 ticker QQQ above_max 0.179235 0.15 0.029235
2026-01-30 ticker VEA below_min 0.042870 0.05 0.007130
2026-02-27 ticker QQQ above_max 0.172343 0.15 0.022343
2026-02-27 ticker VEA below_min 0.045367 0.05 0.004633
2026-03-31 ticker QQQ above_max 0.172124 0.15 0.022124
2026-03-31 ticker VEA below_min 0.043598 0.05 0.006402

Assumptions and Limitations

How to read this section

What this shows: The configuration, modeling assumptions, known limitations, and caveats attached to this report.

How to interpret it: This section defines the boundary of the result. The report should not be read without it.

What to watch: If an assumption is unrealistic for your use case, the conclusions may not transfer.

parameter value
periods_per_year 252
risk_free_rate 0.030000
max_weight 0.2500
rebalance_count 135
first_rebalance_date 2015-01-30
last_rebalance_date 2026-03-31
key assumption
scope Research-only system for long-horizon retirement-style accumulation. Not live trading, not personalized financial advice.
currency Base currency is USD. No FX hedging applied to non-USD exposures.
data Adjusted prices from the configured provider; survivorship bias and data revisions are not corrected for.
no_lookahead Walk-forward backtest estimates target weights only with returns observed strictly before each rebalance date.
execution_timing The return labeled with a rebalance date belongs to the previous holding period; new weights and trade-cost impact start on the next return date.
costs Transaction costs and configured slippage are modeled as simple bps assumptions; taxes, spreads beyond configured slippage, market impact, and account-specific fees are not modeled.
rebalancing Contribution-only mode avoids selling unless fallback or hard-constraint policies trigger; tolerance-band mode uses constrained projection when configured drift bands are breached.
benchmark_fairness Optimized benchmark objectives use the same rebalance mode (contribution_only), contribution amount (1500.00), initial capital, transaction cost/slippage rate, constraints, and rebalance schedule as the main strategy.
optimization Mean-variance style optimization with documented constraints; expected returns use historical means unless overridden.
data_provider Data provider: yfinance
benchmark Primary benchmark: VT
optimization_method Optimization method: max_sharpe
risk_model Risk model: ledoit_wolf
expected_returns Expected return estimator: historical_mean
rebalance_mode Rebalance mode: contribution_only
rebalance_frequency Rebalance frequency: monthly
rebalance_execution Rebalance execution: target weights are estimated with returns strictly before each rebalance date; the return labeled with the rebalance date remains in the previous holding period; new weights and trade-cost impact start on the next return date.
benchmark_return_series The selected benchmark ETF and configured secondary allocation benchmarks are external/theoretical return-series baselines; they are not simulated with contribution-only drift or strategy transaction costs.
transaction_costs Transaction cost assumptions: 2.00 bps fees + 1.00 bps slippage
weight_cap Default maximum ETF weight: 25.00%; ticker-specific bounds may override this default.
risk_free_rate Annualized risk-free rate (constant): 3.00%
run_id Run ID: run-all-20260425T083756Z-f6f9560b
Metric Value
Weighted Expense Ratio 0.001263
Portfolio Beta 0.676624
  • This report is for research and education only. It is not financial advice, investment advice, tax advice, legal advice, or a recommendation to buy or sell any security.
  • Past performance does not guarantee future results.
  • Transaction costs and configured slippage are modeled as simple bps assumptions; taxes, spreads beyond configured slippage, market impact, and account-specific fees are not modeled.
  • Provider data may be subject to revisions or vendor outages.
  • This report is generated from pipeline artifacts, not manually curated notebook output.
  • Expected returns and covariance estimates are backward-looking and depend on the configured historical window.
  • Transaction costs and configured slippage are modeled as simple bps assumptions; taxes, spreads beyond configured slippage, market impact, and account-specific fees are not modeled.
  • FX-adjusted returns, MXN/NOK reporting layers, UCITS comparisons, and tax-aware domicile analysis are deferred follow-on work.
  • Benchmark and portfolio analytics reflect the configured universe and selected benchmark (VT) only.
  • Contribution-only realized holdings drifted outside configured caps under soft realized-constraint handling; see the realized constraint warnings table (max breach 0.0386).