How Steady Otter searches and compares ETF portfolios
Objective: find ETF mixes with stronger historical compound growth after modeled trading costs, within allocation, risk, turnover and liquidity limits. Historical comparisons do not establish future returns.
| Identity | Current value |
|---|---|
| Revision Date | 2026-10-19 |
| Method | alpha-p0-v1.4 |
| Algorithm | alpha-p0-v1.4-robust-selection-v9 |
| Result | scenario-ranking-v2.12 |
| Engine | JAX/XLA in compute-core-gpu; same numerical source for GPU and CPU checks |
Exact rules: numerical reference. Display scores: evidence-score paper.
The data and portfolio rules
| Element | Rule |
|---|---|
| Snapshot | Immutable adjusted returns, unadjusted closes and volume; cutoff is the last XNYS session before acquisition date in New York |
| History | Full requested actual-history calendar1. Every requested ETF/reference is required; legacy frozen inputs retain the 2,520-actual-return cap |
| Training | Standard minimum 1,262 returns; explicitly accepted limited history minimum 756 |
| Later test | Reserve the longest admissible period before search: standard 252 or 126 sessions; limited 126; otherwise historical-only |
| Allocations | Long-only, total 100%, integer 1% ticks; optional holdings may be zero or meet the configured floor; ticker-specific positive minima override that floor; grouped constraints unsupported |
| Comparators | Starting portfolio (seed), VTI, VT and starting 60% VTI / 40% BND |
| Rebalancing | Monthly by default; otherwise holdings drift. Explicit chronological refits still execute |
| Costs | Base, stress, modeled and funded rates default to zero; equal base/stress rates provide no distinct fee stress |
All comparisons share dates and execution assumptions. History floors and window choices are product policies, not evidence of adequate sample size.
Missing ETF history blocks a run. Compute identifies affected ETFs and available dates so the user can remove or replace them or choose a later start year. The product does not reconstruct history from proxies or holdings.
Measures and qualification
Returns and weights are fractions. Daily annualization uses 252 sessions; volatility uses sample standard deviation. Drawdown includes initial wealth 1.
Historical and modeled trading cost = pretrade wealth × rate × turnover, including cash. Establishment turnover is 1; recurring turnover excludes it. Funded paths charge the rate on executed purchases plus sales; these conventions differ at positive rates. Ranking excludes contributions, taxes and inflation; expense drag embedded in adjusted returns remains.
Development is the last 60% of training, split into three consecutive blocks with one continuous holdings path. Full-training risk also includes the first 40%.
| Gate | Requirement |
|---|---|
| Growth | Linked development CAGR exceeds every fixed reference by at least 0.5 percentage points/year, at both costs |
| Drawdown | At most min(40%, same-scope seed drawdown + 5 percentage points) |
| Volatility | At most min(25%, 1.10 × same-scope seed volatility) |
| Turnover | Maximum rolling-252-session recurring one-way turnover at most 100% |
| Liquidity | Every active ETF: trailing-60-session median close × volume at least $5 million/day |
Risk gates cover each development block, linked development and full training, at both costs. Individual-block growth persistence is diagnostic.
- Feasible: legal allocation passing risk, turnover and liquidity gates.
- Qualified: non-seed feasible allocation also passing growth and bootstrap gates.
- Seed: qualification inapplicable; feasibility still applies.
There is no general requirement to beat seed CAGR.
The paired circular stationary bootstrap resamples computed daily net-return paths within each development block, using common candidate/reference indices.2 Each replicate links the three blocks and takes minimum CAGR excess across three references and two costs. At every expected block length—10, 21 and 63 sessions—the one-based ceil(replicates/10) order statistic must exceed zero. These lengths and the lower-decile gate are engine policies. Candidate-level bounds neither correct for searching many mixes nor estimate future-win probabilities.3
Search
| Route | Mechanism |
|---|---|
| Pool | Dirichlet proposals, legal tick projection, capped point screening and bounded full evaluation |
| Evolutionary | Parent crossover, one-tick mutation and immigrants |
| CMA | Active full-covariance adaptation of continuous proposals, followed by tick projection4 |
| Islands | Sequential CMA routes with distinct streams and refreshed parents |
| Blends | Dirichlet combinations of up to three distinct best route winners |
Routes share validity checks, fitness, allocation identities and a per-search cache. Seed allocations cannot be parents; admitted benchmark controls may participate. Optional illiquid ETFs are masked in proposals; financial liquidity validation still applies.
Search fitness maximizes the same growth/risk/diversity preference f as final selection for qualified candidates, then prefers allocations passing observed gates but failing bootstrap by their bound, then remaining failures by normalized gate shortfalls. Qualified exact ties use the same financial keys as final ranking. Duplicates consume proposal budgets and reuse evidence. Keyed Threefry streams identify proposals and paths; repeatability requires pinned inputs, settings and execution environment.
Final order and retained alternatives
Feasible qualified mixes precede feasible unqualified mixes. Within each group:
Here G is linked-development base-cost net CAGR; w_j is ETF weight and h_{j,s} its original NAV fraction in stock s. E is ETF HHI; H is observed stock HHI; Q is squared exposure above soft threshold t. Weights and thresholds are fractions. P is in annual CAGR percentage points, applied once. Only frozen SEC common/preferred-stock rows eligible at each fit cutoff enter; partial rows keep original weights and missing rows add no estimate or penalty. No usable stock rows means the stock component is unavailable and contributes no cost.
| Independent control | Min / Balanced / Max defaults | Algorithm effect |
|---|---|---|
| Candidate variety | Distance floor 10 / 15 / 20 points; default Max | Final and exploratory retention only |
| ETF diversity | a = 0.5 / 1 / 2; default Balanced | Qualified search fitness and feasible final order |
| Stock diversity | b = 5 / 10 / 20; t = 6% / 4% / 2%; default Balanced | Qualified search fitness and feasible final order; k defaults to 100 at all levels |
These configurable preferences leave point screening, qualification, hard limits and failure ordering unchanged. Stronger settings need not change every ordering or monotonically reduce selected exposures. Policy formulas and units. CAGR/risk preference points: higher f ranks first; exact ties prefer lower risk usage, then the remaining comparison keys. The configured risk coefficient defaults to 0.5 annual CAGR percentage points per raw risk-usage point. Post-run comparison holds development CAGR and P fixed, expands risk to include the matched later test, and leaves historical ranks unchanged. Missing later evidence leaves the after score unavailable; later CAGR remains separate. Using later results for choice consumes their untouched-validation role. The evidence-score paper gives the in-run and post-run equations and a worked example. This is a chosen preference, not an expected return or calibrated optimum. The current engine requires this mode; legacy band ranking is unsupported.
Retain at most eleven mixes. Preserve the seed reference and one highest raw-CAGR alternative in the best feasible tier. Other nonseed rows, including score and defensive winners, must meet the selected allocation-distance floor and eligible SEC holdings-distance checks. Fewer alternatives are valid. Unknown holdings cannot establish separation; missing eligible SEC data uses allocation distance. Roles name only surviving exact IDs. Select the first retained feasible mix. Exploratory output also spaces alternatives and retains its diagnostic labels. The selected mix is a comparison focus, not a trade instruction.
Checks and output boundaries
| Check | Purpose and effect |
|---|---|
| Repeatability | Compare qualified top sets and leading allocations across enabled seeds |
| Expanded search | Compare primary results with larger budgets |
| Training stability | Failed or omitted required checks with alternatives → exploratory, unranked output; unanimous no-qualification permits feasible diagnostic comparison (“No qualified winner”) |
| Five chronological refits | Repeat the complete enabled policy on strict prefixes; freeze each target, then evaluate its next segment; defaults total twenty constituent searches |
| Continuous outer path | Carry holdings and transitions across five segments; cash-reset diagnostics remain separate |
| Reserved later test | Evaluate frozen retained allocations after a separate execution row; historical qualification and rank stay fixed |
| Projections | After rank freeze, resample complete common months, including later-test rows; ten-year conditional simulations, not independent validation |
| Holdings reports | Partial disclosed-position HHI and sectors describe frozen facts without changing qualification or rank; concentration needs holdings context5 |
| AI | Explain deterministic results without changing metrics or ranking; optional text may be absent |
What the results cannot establish
- Results depend on available history, included ETFs, provider adjustments, trading assumptions and policy limits.
- Historical risk limits do not cap future losses. Partial holdings omit unknown exposure. Resampling bounds are not future probabilities.
- Reused history can favor chance patterns. Tuning against later-test results consumes their independence.6
Implementation: numerical reference. Historical SEC evidence enters stock scoring and diversity retention only with eligible identity and public timing at each fit cutoff. Outer results, later-test results, projections and report-only exposures cannot change final historical selection.
References
- 1
New inputs select a start year from 2000 through the current New York year, defaulting to ten years back. Every required symbol must have actual history for the selected period. No silent truncation, exclusions or renormalization are permitted. Legacy frozen inputs retain their original actual-only window; its 2,520-return cap is a runtime/recency policy, not an empirically optimal history.
- 2
D. N. Politis and J. P. Romano (1994), The Stationary Bootstrap, JASA 89(428), 1303–1313, §2. Geometric circular blocks for stationary, weakly dependent series; no validation of this engine's fixed lengths, lower-decile threshold or ETF sample adequacy.
- 3
H. White (2000), A Reality Check for Data Snooping, Econometrica 68(5), 1097–1126, abstract and §1. Tests the best model in a searched family; the engine does not implement that search-wide correction.
- 4
N. Hansen (2016; revised 10 March 2023), The CMA Evolution Strategy: A Tutorial, §§1–4 and Appendix A. Continuous CMA-ES lineage; tick projection, portfolio fitness and route coordination are local adaptations, without a global-optimality or investment-performance guarantee.
- 5
J. M. Hill, E. Kashner and D. Nadig (2026), A Comprehensive Guide to ETFs (2nd Edition), Module 2: Evaluating ETFs, CFA Institute Research Foundation, printed p. 21, Exhibit 13. Compares holdings counts and Herfindahl concentration. It does not validate this tool's partial-coverage estimates, identity matching or SEC distance thresholds.
- 6
D. H. Bailey, J. M. Borwein, M. López de Prado and Q. J. Zhu (27 February 2015 manuscript), The Probability of Backtest Overfitting, abstract and §§1–2. Discusses backtest selection and holdout limitations; the engine does not implement its combinatorially symmetric cross-validation diagnostic.