ETF RESEARCH NOTE · AUGUST 2026

Growth needs
a counterweight.

The research case for combining momentum and semiconductors with a deliberately large allocation to physical gold.

See what the test found ↘

THE REFERENCE MIX

40 / 30 / 30

40% PHYS / IAUMballast
30% SPMOmomentum
30% SMHsemiconductors

Monthly rebalancing in the full research engine.

22.8% historical CAGR1.50 historical Sortino−24.3% maximum drawdown2015–2026 direct SPMO window
01

THE RESULT, IN CONTEXT

It beat both benchmarks in the modern full window.

From SPMO's October 2015 inception through the 2026 research cutoff, the monthly-rebalanced 40/30/30 mix produced the strongest risk-adjusted result in the study's concentrated three-fund family.

ANNUALIZED RETURN

Modern full window

Oct. 12, 2015 → 2026 cutoff
monthly rebalanced · total return

20.8%QQQ
15.1%S&P 500

Research engine used adjusted total-return data and a 3% risk-free rate. Figures are historical, before personal taxes and trading frictions.

1.50

Sortino ratio

Higher than the S&P 500's 0.87 and QQQ's 1.06 in the same modern window.

−24.3%

Maximum drawdown

Shallower than the S&P 500's −33.7% and QQQ's −35.1% in the test.

+102%

Recent two-year check

An initially weighted $10,000 grew to $20,249 versus $14,851 for SPY from Aug. 2024 to Aug. 2026. This check was not rebalanced.

02

WHY THE PIECES FIT

Two engines.
One shock absorber.

M

30% · SPMO

Own what is already moving.

SPMO selects high-momentum names from the S&P 500 and reconstitutes twice yearly. It turns broad U.S. equities into a rules-based leadership sleeve.

S

30% · SMH

Concentrate the compute layer.

SMH adds a deliberate semiconductor bet. That powered the recent record, but it also creates sector and single-regime concentration that can cut both ways.

G

40% · GOLD

Give growth room to breathe.

Gold was the genuine diversifier in the research. It reduced downside in the tested equity shocks and improved the full-window risk-adjusted result.

THE CENTRAL IDEA

“The gold is not dead weight. It is what lets the growth sleeves stay aggressive without making the entire portfolio one bet.”
03

ONE STRATEGY, TWO SETTINGS

Choose the objective before choosing the weights.

RISK-ADJUSTED REFERENCE01

40 gold / 30 SPMO / 30 SMH

22.8% CAGR

  • Best balance of downside protection and growth in the modern study
  • 1.50 historical Sortino
  • −24.3% maximum drawdown

Best fit when the goal is a smoother path, not maximum upside.

HIGHER-GROWTH TILT02

20 gold / 50 SPMO / 30 SMH

23.9% CAGR

  • Higher historical return in the same direct window
  • 1.36 historical Sortino
  • −26.3% maximum drawdown

A growth choice—not proof of better future odds.

04

PUT GOLD IN THE RIGHT WRAPPER

Same role.
Different account.

PHYS and IAUM both provide physical-gold exposure. The better wrapper can change with the tax treatment of the account.

TAXABLE BROKERAGE

PHYS

Choose the tax option—if you will do the paperwork.

A U.S. taxable holder who makes a timely QEF election may preserve long-term capital-gain treatment rather than the higher collectibles-rate category commonly associated with physical-gold trusts.

  • File Form 8621 in the first year
  • File annually while held
  • Current PHYS MER: 0.39%
  • Closed-end shares may trade above or below NAV
Read Sprott's tax guide ↗
IRA / TAX-ADVANTAGED

IAUM

Choose the lower carrying cost when the QEF advantage is not doing work.

Sprott says the PFIC/QEF treatment generally applies to taxable accounts, not qualified retirement accounts such as IRAs. In that wrapper, IAUM's lower sponsor fee becomes the cleaner comparison.

  • Current sponsor fee: 0.09%
  • No PHYS QEF paperwork rationale
  • Tracks the price of gold bullion
  • Simple, low-cost portfolio ballast
View IAUM details ↗
Important: the PHYS advantage is conditional. Missing or mishandling the QEF election can create unfavorable PFIC tax treatment. Confirm the approach with a tax professional who handles Form 8621 before buying in a taxable account.
05

WHAT THE BACKTEST DID NOT PROVE

Strong evidence is not the same as certainty.

38%

3-year joint win rate

The 40/30/30 mix beat both SPY and QQQ in about 38% of the observed rolling three-year windows.

40%

5-year joint win rate

About 40% of overlapping five-year windows beat both. These are descriptive windows, not independent odds.

36%

7-year joint win rate

The seven-year result was about 36%. One strong full-period result can coexist with many losing subperiods.

SPMO has a short live history +

SPMO launched in October 2015. Anything earlier requires a proxy, and proxy history is not actual fund history. The long-history proxy test did not find a three-fund mix that reliably beat both benchmarks.

The growth sleeves overlap +

SPMO can lean into the same large growth leaders that drive SMH. The combination is diversified by ticker count, but not necessarily by economic exposure.

The result is regime-sensitive +

Rankings reversed between 2015–2020 and 2021–2026. In 200 small ±5% weight perturbations, the base ranking flipped 82.5% of the time.

Static beat switching +

The tested monthly regime-switching system underperformed the static allocation. Whipsaw and missed V-shaped recoveries overwhelmed the intended protection.

HOW WE TESTED IT

Built to make flattering errors harder.

  1. 01

    Total-return data

    Adjusted prices incorporated distributions rather than comparing price-only lines.

  2. 02

    Monthly rebalancing

    Month-end targets snapped to actual trading days.

  3. 03

    Two honest controls

    Every candidate faced both the S&P 500 and QQQ—not whichever benchmark was easier to beat.

  4. 04

    Independent re-check

    CAGR, drawdown and Sortino were reimplemented from scratch; the verification passed.

06

FOR THE ENGINEER

Don't take the chart on faith.

Give this prompt to Codex inside a clean repo—or point it at an existing research project. It asks for the data, code, tests, robustness work, and audit trail needed to challenge the thesis properly.

Reproducible pipelineFail-loud data checksWalk-forward testingTax scenarios separated

etf-research-prompt.md

You are a senior quantitative software engineer working in my local repository. Build a reproducible, audit-friendly Python research package to test whether static ETF combinations can beat BOTH SPY (S&P 500) and QQQ (Nasdaq-100) over long holding periods.

OBJECTIVE
Evaluate three-sleeve portfolios made from:
- Gold: PHYS or IAUM
- U.S. momentum: SPMO
- Semiconductors: SMH

The incumbent is 40% gold / 30% SPMO / 30% SMH. Also include 20% gold / 50% SPMO / 30% SMH as a named growth-tilt comparator. Do not assume either is optimal.

WORKING RULES
1. Begin read-only. Inspect the repo for existing data, code, tests, assumptions, and prior results. Preserve unrelated work.
2. Use Python 3.12+, pandas, numpy, scipy, pyarrow, pytest, and a documented market-data adapter. Pin dependencies.
3. Use adjusted total-return daily data. Cache the raw response and normalized parquet with retrieval timestamp, provider, symbols, date range, and checksum.
4. Fail loudly on missing tickers, duplicate dates, suspicious nulls, stale data, currency mismatches, or a requested sleeve being silently dropped. Never substitute a ticker without an explicit flag and disclosure.
5. The primary direct-history test begins on 2015-10-12, when all required live funds have data. Keep all pre-inception proxy tests separate and clearly labeled.
6. Rebalance monthly. Snap month-end labels to actual trading days. Include a buy-and-hold sensitivity check.
7. Use SPY and QQQ as separate total-return benchmarks. A “joint win” requires beating both over the same window.

PORTFOLIO SEARCH
- Generate a configurable 5-percentage-point grid whose weights sum to 100%.
- Default constraints: gold 10–50%, SMH 10–40%, SPMO 20–70%.
- Report the unconstrained frontier separately so recent SMH concentration cannot silently dominate the recommended set.
- Never rank on CAGR alone. Produce Pareto views for joint benchmark win rate, CAGR, Sortino, and maximum drawdown.

METRICS
- CAGR, annualized volatility, Sharpe, Sortino, maximum drawdown, Calmar, downside deviation, CVaR 5%, turnover, and benchmark excess return.
- Use a configurable risk-free rate; default to 3% and run 0%/3%/5% sensitivity.
- Compute rolling 3-, 5-, 7-, and 10-year annualized returns and the percentage of windows that beat SPY, QQQ, and both.
- State prominently that overlapping rolling windows are descriptive observations, not independent probabilities.

ROBUSTNESS
- Walk-forward analysis with at least two non-overlapping eras plus expanding-window selection followed by untouched out-of-sample evaluation.
- At least 1,000 weight perturbation trials of ±5 percentage points, preserving valid sums and constraints. Report rank-flip frequency.
- Stress tables for Q4 2018, the 2020 crash, the 2022 bear market, and any other objectively defined period in the available data.
- Sensitivity to monthly vs quarterly rebalancing, fund expenses, 0/5/10 bps trading friction, and reasonable tracking error.
- Bootstrap or block-bootstrap confidence intervals where methodologically defensible; explain limitations.

ACCOUNT LOCATION / TAX ANALYSIS
- Keep market-performance analysis pre-tax. Add a separate U.S.-investor account-location module.
- For taxable brokerage, model PHYS only under explicit scenarios: timely QEF election with annual Form 8621, missed/no QEF, and tax-preparer cost. Do not claim the favorable treatment is automatic.
- For tax-advantaged accounts, compare PHYS with IAUM primarily on fee drag, structure, liquidity, and premium/discount behavior. Verify current fees and tax rules from official issuer and IRS sources at runtime.
- Clearly label tax output educational, jurisdiction-specific, and subject to professional review.

REQUIRED ARTIFACTS
- README.md with exact setup and rerun commands
- pyproject.toml and locked dependencies
- config/default.yaml containing dates, weights, constraints, costs, and risk-free rate
- src/ package with separate data, portfolio, metrics, rolling-window, robustness, tax-scenario, and reporting modules
- tests/ covering weight sums, rebalance dates, return math, drawdown, missing-data failure, benchmark alignment, and no-look-ahead behavior
- data/manifest.json and cached parquet (or a documented fetch command if licensing prevents redistribution)
- results/summary.csv, rolling_windows.csv, walk_forward.csv, robustness.csv, stress.csv, and account_location.csv
- results/report.md with an executive summary, methods, findings, caveats, and links to every generated artifact
- output/index.html with accessible charts and tables; no external CDN dependency

ACCEPTANCE GATES
- Run formatting, linting, type checking, and pytest.
- Independently reimplement CAGR, Sortino, and max drawdown in a verification module and compare within stated tolerances.
- Confirm every chart number traces to a saved result row.
- Show the exact data cutoff and whether results are direct fund history or proxy history.
- Do not present any allocation as a forecast, guarantee, or adopted recommendation. If no mix reliably beats both benchmarks, say so plainly.

Before editing, summarize the repo state and the implementation plan. Then build the full pipeline, run it, fix failures, and return the final evidence table plus the exact commands needed to reproduce it.
07

PRIMARY SOURCES

Read past the summary.

Fund details and U.S. tax references were refreshed in August 2026. Historical results come from the local research archive completed June–August 2026.