From the desk · Allocation methodology

How we project forward: drift-velocity annualization

The "Projected value of your portfolio" panel on our model-portfolio page is doing real math on live data. Here's exactly what — and why we don't just compound the observed alpha.

Forward projection as a cone, not a line A point observation becomes a horizon-damped forecast inside a skeptical envelope forward horizon annualized α sample noise 10d 30d 90d 180d 365d +25% cap +6% floor observed α N days realized +12% +8% naive linear — α × (365 / N) drift-velocity damped — sample-confidence weighted
Same observation, two forward extrapolations. The naive cone (taupe) diverges fast — small early observations explode under linear-times-365/N. The damped cone (terracotta) is anchored by the observation, narrowed by sample-size confidence weighting, and clipped at the +6% / +25% skeptical envelope. The model-portfolio panel shows the damped projection.

The standard approach, and why we don't use it

Most allocation tools compute an annualized return like this: take the observed period return, raise it to the power of one-over-fraction-of-a-year, subtract one. "Compounding." It's the right answer when you're working with a stable, multi-year track record where the return rate has had time to express itself.

It's the wrong answer when you're working with a few weeks of live observation. Compounding makes a small short-term return explode geometrically — a +1% week becomes "+68% annualized" if you naively raise it to the power of 52. The number is mathematically derivable but it's not predictive; it's a projection of a noise sample to a year-long horizon, treated as if every week of the next year would behave the same way.

Sequential return models have a name for this: they call it the difference between the geometric return (what you compound) and the arithmetic return (what you average). For long, low-vol series the gap closes; for short, noisy series it explodes. The Quark architecture treats observed alpha as a third thing entirely.

Alpha as a drift velocity, not a return

Inside the architecture, the realized return process decomposes into two independent components: a signed drift — the bit that points somewhere on average — and a diffusion — the bit that doesn't. This is the same decomposition that shows up in any continuous-time stochastic process: drift × dt plus volatility × dW. Alpha, in our framing, is what shows up in the drift bucket.

Drift accumulates linearly in time. Diffusion accumulates as the square root of time. Naively compounding the observed period alpha mixes the two together, treating noise as if it compounded like signal — which it doesn't.

Compounding observed alpha treats noise as if it accrued like signal. It doesn't. Drift adds linearly; diffusion goes as √t. Annualize them differently or you'll get a number that looks impressive on a spreadsheet and means nothing on a real portfolio.

The right move on a short observation window is to estimate the drift component separately, scale it linearly to a one-year horizon, and apply a confidence weight that accounts for how much of the realized period was actually drift versus how much was noise. Then — once you have an annual rate — compounding it over multi-year horizons is fine, because at that scale the year-over-year sequence really is stationary enough to compound.

The actual formula on the model-portfolio page

What the page computes, given an observed alpha αobs over N trading days versus a benchmark:

Step 1 · Linear annualization of observed drift αraw = αobs · (365 / N)

This is linear, not compound. The implicit assumption is that if the observed alpha really is signal-driven drift, it would accrue at the same rate over a longer window. We don't compound it because we don't yet have evidence the rate persists.

Step 2 · Sample-size confidence weight w(N) = min(1, 0.3 + 0.7 · N / 365)

This shrinks the raw annualization toward zero on small samples. With ten days of data, w is roughly 32% — we present the projection as if only a third of the observed alpha were signal. With a full year of data, w is 100% and we trust the rate. This is a Bayesian-flavored shrinkage step: the prior is "no alpha," and observed alpha pulls the posterior toward the linearly-annualized rate at a speed proportional to sample size.

Step 3 · Skeptical envelope αann = clip( w(N) · αraw, +6%, +25% )

The clip is deliberate. The lower bound (+6%) is roughly the long-run alpha we'd expect from regime-aware allocation versus a static benchmark; even on a noisy short sample, our prior on the rate is non-zero. The upper bound (+25%) is a sanity ceiling: any sample window that linearly extrapolates above 25% has more sample-period idiosyncrasy than signal, and shouldn't be projected forward as if it were a stable rate.

Step 4 · Multi-year compounding VT = V0 · (1 + base + αann)T

Once we have an annual rate, year-over-year compounding is the right operation — portfolio value really does grow multiplicatively. The annual rate is held constant across the projection horizon; we don't try to forecast year-on-year alpha decay, because that would imply we know more about the future than we do.

Why this matters for what you see on the page

If you visit the model-portfolio page during a strong week, the live-alpha banner might show "+9pp over 27 days vs SPY." A naive linear annualization would extrapolate that to 9 · (365 / 27) ≈ +122% annualized. The methodology above takes that number, multiplies by a w(27) ≈ 35% confidence weight, and clips at the +25% ceiling — so the projection panel reads +25%, not +122%.

If the same desk had a flat week instead, the same machinery would honestly report a much smaller annualized number, with the lower bound (+6%) eventually catching the floor. The point is not to flatter the model: it's to express, in a single number, both what we've observed and how confident we are that the observation generalizes.

What this is not

Three things this methodology is explicitly not:

Why we publish the formula

An allocator looking at any "projected return" number should be able to ask one question and get a clean answer: where does that number come from. If the answer is "proprietary model" or "back-tested over 20 years," that's not an answer; that's a line of marketing copy. Publishing the formula is the alternative. You can replicate the projection panel from the live alpha number alone, in a spreadsheet, with the four steps above.

The methodology panel on the model-portfolio page shows all four inputs in real time: the observed alpha, the sample window, the confidence weight, and the resulting annualized rate. Refresh the page tomorrow and the numbers update; the formula doesn't.

See the methodology in action

Live projection panel, current allocation, and the full live-alpha track record — all on one page.

Open the model-portfolio page View live performance