Skip to content
Horalis
Theme

Kept only in this tab.

HoralisAll the Horalis tools

Tools

Theme

Kept only in this tab.

Sheet: mixes (and single shares, a future piece)

All the research sheets

Translated from the Spanish original. Where they differ, the Spanish one holds.

  • App: Horalis Growth · Reviewed: 9 October 2026 (phase A2)
  • Code (in projects/wealth-lens/): src/lib/mix.ts (mixModel, mixPercentiles, mixSuccessRates, worstYear, TEMPLATES), src/lib/volatility.ts (logStats, the swing of a series)

The question it answers

"What if I do not put it all in the same thing?" A mix of asset types with weights (US shares, German bonds, gold and savings) and the templates 100 %, 80/20 and 60/40.

The formula, in plain words

  • How much it grows (the big number): the average of what each part grows, by its weight.
  • How much it moves (the band, "if it goes badly", the withdrawal rate): 1,000 paths of 60 years in which, each year, the same real year is drawn for all the parts, so they move together as they did (in 2022 shares and bonds fell at once).
  • Weights over time: either they are left to run (what rises most weighs more; contributions are split by the weights) or they are reset to the weights every year.

"Worst year in the data": the mix's worst calendar year, rebalanced every January, over the years that all its parts have. Beside the mix, the same figures for US shares alone, over the same years.

Assumptions

  • The templates are the textbook starting points, not a recommendation; the app never proposes weights (see Kelly).
  • The relationship between assets from 1988 to 2022 (correlation of US shares and German bonds, in logarithms: 0.18) holds.
  • A savings part yields its interest minus inflation, with no swing.

Sources (dated)

  • The yearly 1988–2022 data of growth: US shares (Shiller), German bonds (OECD, Bundesbank, Destatis) and gold (the World Bank's Pink Sheet).

Validation (tests)

  • src/lib/mix.test.ts (21): weights that add up to 100 %; templates; growth as a weighted average; 60/40 with a narrower band and a milder worst year than 100 % shares; the same year for all the parts; 2022 as the 60/40's worst year; running against rebalancing; a valid Cholesky; a mix from an earlier file with World or Nasdaq-100 read as US shares; recalculating in far less than 16 ms.

Limits

  • Only asset types with a long public history; never a particular fund, ticker or company.
  • Currency changes (shares and gold in dollars) are not modelled: they are deflated with US inflation.

What is debatable

  1. The projection of a rebalanced mix falls short. The weighted average of geometric averages ignores the gain from diversifying: with the same data, a 60/40 of US shares and German bonds grows 5.51 % in the big number and 5.87 % when really rebalanced every year (0.36 points a year). The simulations do capture it, so the big number and the band's median diverge. Cost: project with the geometric average of the simulated mix.
  2. Stable correlations. In crises, correlations rise; the joint draw captures it for the years in the sample (2008, 2022), but not beyond.
  3. Templates. Calling them "textbook" is correct, but showing them as buttons can read as a suggestion. See inform, do not advise. Cost: review texts.
  4. A single stock market. The shares are only US ones, the only market with a long open series with dividends. A person from another country has their shares on other markets. Cost: look for open official series of other markets with dividends (see below).

A future piece: single shares and portfolios

Until phase A2 (9 October 2026) the app had 12 shares and 3 funds from a list, My portfolio (the person's holdings, weighted by their value) and the concentration effect (one share with more than 20 % of the mix). They were removed because they depended on daily prices from unofficial sources (Yahoo Finance, Stooq) whose terms do not allow publishing their data, on a daily task that had to be maintained, and on the names of particular products.

What would be needed (phase B2, 14 October 2026): real single shares need up-to-date prices with a licence to publish and a server that downloads and serves them every day. Both clash with Horalis's North (nothing to maintain, no central server), so they would be another piece, separate from Horalis Growth, with its own decision. In Growth only asset classes with historical data under a clear licence remain; there are no charts per share, ticker lists or instruments.json left (checked in B2).

The method is noted here in case a future piece takes it up again with data the person brings themselves (for example, a file from their broker, read only in their browser):

  • A share grows like its index: its own past is never projected (nobody can foresee a company).
  • It moves like its index multiplied by its β, plus a movement of its own, minus a "drag" that leaves its expected growth equal to the index's: log(1 + r_share) = μ_index + β·(log(1 + r_index,t) − μ_index) + ε − drag, with β = ρ·σ_share / σ_index and ε ~ Normal(0, σ_share²·(1 − ρ²)).
  • σ_share from its daily closes (at least 3 years; if not, 2 × σ_index) and ρ from the weekly correlation with its index; the ε of several shares, correlated with a Cholesky factor.
  • Concentration: the same mix with its index instead of the share, over the same draws; said with the figures, never assumed.
  • The model's sources: Sharpe (1963), "A Simplified Model for Portfolio Analysis", Management Science 9(2); the volatility drag (geometric average ≈ arithmetic − σ²/2).
  • What was debatable about it: "no alpha, whatever β" (the low-volatility anomaly), fragile estimates with few years, and the 20 % threshold not justified with data.

The code is in the git history (branch master before phase A2: src/lib/mix.ts, portfolio.ts, volatility.ts, mix-stocks.test.ts).

History

  • 2026-10-03: first sheet (no change to the calculation).
  • 2026-10-05: the description of concentration tells the expected average apart from the central case. The calculation does not change.
  • 2026-10-07: a single concentration threshold, 20 %, in the check of your plan; the 40 % finding of My portfolio is removed.
  • 2026-10-09 (phase A2): single shares, My portfolio and the concentration effect are removed (see "A future piece"), and so are world shares and the Nasdaq-100 (their data are not open). The templates use US shares instead of the World; the reference beside a mix is US shares alone. The calculation of a mix of assets does not change.