Given N approved strategies, decide how much capital each one gets — without over-trusting any single Sharpe estimate.
Five analysts each defended an Investment Proposal this semester. Each backtest passed. Each Sharpe is positive. Now QT has to deploy a single dollar of fund capital across all five.
By Friday you should be able to:
Construction, sizing, limits. The reading is Palomar Chapters 6, 7, and 10 (skim 8 and 9); Thorp (2006) on the Kelly criterion.
Let \( N \) be the number of approved strategies. Each strategy \( i \) has a return time-series \( r_i(t) \) with sample mean \( \hat{\mu}_i \) and variance \( \hat{\sigma}_i^2 \). Across strategies, the sample covariance is \( \hat{\boldsymbol{\Sigma}} \). A portfolio is a weight vector \( \mathbf{w} \). The portfolio return is:
\[ R_p(t) = \mathbf{w}^\top \mathbf{r}(t), \qquad \mathbf{1}^\top \mathbf{w} = 1 \]Every construction method below is a different choice of objective and constraints over this same \( \mathbf{w} \).
Three constraints AlgoGators always enforces:
| Constraint | Math | Why |
|---|---|---|
| Capital budget | \( \mathbf{1}^\top \mathbf{w} = 1 \) | Deploy exactly the capital the fund has. |
| Per-strategy cap | \( w_i \leq 0.35 \) | No single analyst's strategy can dominate the fund. |
| Turnover cap | \( \|\mathbf{w}_t - \mathbf{w}_{t-1}\|_1 \leq 0.25 \) | Rebalancing costs eat alpha. Cap weight movement per period. |
You already know Sharpe from W1 — \( (\mathbb{E}[R_p] - r_f)/\sigma_p \), symmetric, treats a 5% gain and a 5% loss as equivalent "vol". For a student fund with a drawdown mandate, that symmetry is the problem. Three measures fix it.
Same numerator as Sharpe, but \( \sigma_p^{-} \) is the std-dev of only the negative returns. Reward per unit of downside.
Expected loss given you're in the worst \( \alpha \) of outcomes (usually \( \alpha = 5\% \)). The number the GP actually asks about in a bad month.
Peak-to-trough loss on the NAV curve. A strategy with 1.5 Sharpe and 40% max drawdown ends student funds.
Calmar ratio = annual return / MDD. Track it explicitly.
Start here. These three cover most of what real CTAs deploy.
The no-information prior. Hard to beat out-of-sample (DeMiguel, Garlappi & Uppal, 2009) because it ignores estimation noise entirely.
When it fails: when strategy vols differ wildly. A 6%-vol calendar spread and an 18%-vol satellite strategy each at 20% gives the satellite roughly 3× the actual risk contribution.
Each strategy contributes the same standalone volatility. Ignores correlation — that's its blind spot.
When it fails: two strategies with correlation 0.8 still get separate vol budgets. You end up double-loaded on the same factor.
Every strategy contributes the same dollar of risk to the portfolio:
\[ w_i \cdot (\boldsymbol{\Sigma} \mathbf{w})_i = w_j \cdot (\boldsymbol{\Sigma} \mathbf{w})_j \quad \forall\, i, j \]Uses \( \boldsymbol{\Sigma} \) but not \( \boldsymbol{\mu} \). That's the point — it avoids the noisiest input. This is what Bridgewater All Weather, AQR Risk Parity, and most large CTAs run as their default.
When it fails: in crisis regimes when correlations spike to 1. The covariance estimate from a calm regime doesn't predict the panic regime.
Markowitz's 1952 framework formalized the trade-off between expected return and variance:
\[ \max_{\mathbf{w}} \; \boldsymbol{\mu}^\top \mathbf{w} - \tfrac{\lambda}{2}\, \mathbf{w}^\top \boldsymbol{\Sigma} \mathbf{w} \quad \text{s.t.} \quad \mathbf{1}^\top \mathbf{w} = 1 \]On paper this is the right answer. In practice it almost always disappoints live. The reason has a name: error maximizer (Michaud, 1989).
W1 showed the intuition: backtest Sharpe is biased upward. Here's the statistical version. The Sharpe estimate on \( T \) daily observations has standard error \( \sqrt{(1 + \hat{S}^2/2)/T} \). For \( T = 252 \) and \( \hat{S} = 1.5 \), \( \mathrm{SE} \approx 0.08 \). The optimizer treats 1.5 and 1.3 as distinguishable. They're not. Tiny differences in \( \hat{\boldsymbol{\mu}} \) flip the "optimal" allocation from balanced to all-in on one strategy. Out-of-sample, you've concentrated on noise.
Practical fixes:
Variance is symmetric. Returns aren't — W5's fat-tail residuals are exactly why variance underweights tail risk. The AlgoGators IPS caps drawdown explicitly. Use a construction method that bakes the constraint into the math.
Minimize expected loss in the worst \( \alpha \) of outcomes. Rockafellar & Uryasev (2000) showed this is convex — solvable as a linear program when returns are sample-based. Fast, stable, asymmetric-by-design.
Maximize return subject to a cap on max drawdown — the constraint is the mandate. Non-convex in general but tractable as a stochastic program.
Every method above gives relative weights \( \mathbf{w} \) — how to split risk across strategies. None sets the book's overall risk level: a 100% risk-parity portfolio can run at 5% or 25% annualized vol depending on the capital and leverage behind it. Two questions are left — what level, and how to hold it.
Scale gross exposure each period so realized portfolio vol tracks a target \( \sigma^{\text{target}} \):
\[ k_t = \frac{\sigma^{\text{target}}}{\hat{\sigma}_{p,t}}, \qquad \text{position}_t = k_t \, \mathbf{w}\,(\text{capital}) \]\( \hat{\sigma}_{p,t} \) is a trailing vol estimate (an EWMA over ~20–60 days). Below target you lever up; when a vol spike hits — the crisis regimes of W8 — the same formula scales the book down automatically, before a human decides to. The two axes don't conflict: inverse-vol and risk parity size across strategies at a point in time; vol targeting sizes the whole book through time. You do both.
What should \( \sigma^{\text{target}} \) actually be? The Kelly criterion answers the question the mandate keeps asking — how large a bet does the edge warrant? For a Gaussian return stream, the growth-optimal fraction and the vol target it implies are:
\[ f^{*} = \frac{\mu}{\sigma^{2}} \qquad\Longleftrightarrow\qquad \sigma^{\text{target}}_{\text{Kelly}} = \mathrm{Sharpe} \]Full Kelly targets an annualized vol equal to the strategy's Sharpe — a Sharpe-1 book at full Kelly runs ~100% vol, far too hot, because \( \mu \) is estimated with enormous error (the Markowitz error-maximizer again). So desks run fractional Kelly, \( f = c\,f^{*} \) with \( c \in [0.25, 0.5] \): half-Kelly keeps ~75% of the long-run growth at ~half the vol and a quarter of the drawdown. Fractional Kelly is just a principled way to set the target — \( \sigma^{\text{target}} = c \cdot \mathrm{Sharpe} \).
Full Kelly on an estimated edge is a ruin machine. Half-Kelly is the desk default — most of the compounding at a fraction of the drawdown. When in doubt, size lower; you can't compound back from zero.
Sizing is the model's answer. Limits are the hard caps bolted on top of it — independent of any estimate, because every \( \hat{\mu} \), \( \hat{\sigma} \), and correlation can be wrong at exactly the moment it matters (W8). They bound the damage when vol targeting under-reads a regime break or Kelly over-bets a decayed edge.
| Limit | Typical cap | Guards against |
|---|---|---|
| Per-strategy weight | ≤ 35% | one analyst's model dominating the fund |
| Sector / asset-class | gross ≤ 40% | a concentrated factor bet hiding across strategies |
| Gross exposure | ≤ 2× capital | vol targeting quietly levering the book up in calm markets |
| Net exposure | |net| ≤ 20% | an unintended directional tilt |
| Margin-to-equity | ≤ 25% | futures leverage / margin-call risk |
| Daily loss limit | halt at −5% | a tail day or an outright model failure |
The per-strategy 35% and turnover caps from the construction problem earlier are two of these; the rest bound leverage and concentration at the book level. On a futures book margin-to-equity is the leverage number that matters — vol targeting can push gross exposure well past 100% when realized vol is low, and the margin cap is the backstop that stops it.
Limits are not the optimizer's objective — they are the constraint set it runs inside. When the sizing model and a limit disagree, the limit wins: each one is a line the fund won't cross no matter how good the backtest looks.
The weights themselves can overfit. If you optimize \( \mathbf{w} \) on the full sample and then report in-sample performance, you've data-mined the allocation. The fix is walk-forward construction:
Two traps to avoid: look-ahead bias (using \( t+k \) data to choose \( \mathbf{w}_t \)) and turnover cost (high rebalance frequency turns a 1.5 backtest Sharpe into a 0.4 live Sharpe).
Full backtesting (Palomar Ch 8) gets its own QT week later. For now: every weight vector you produce is walk-forward, period.
Five hypothetical approved strategies. Backtest statistics over the prior 24 months:
| Strategy | Description | Sharpe | Vol | Max DD |
|---|---|---|---|---|
| A | Trend-following, commodities | 0.86 | 14% | 22% |
| B | Calendar spread, energy | 0.83 | 6% | 8% |
| C | Cross-asset momentum (corr 0.65 with A) | 0.89 | 9% | 14% |
| D | Macro mean-reversion, rates | 0.64 | 11% | 18% |
| E | Satellite-data corn yield (the W1 NasaPowerCouncil example; uncorrelated with A–D) | 0.78 | 18% | 25% |
Four construction methods on the same five strategies produce dramatically different weights:
Given the five strategies above, one defensible answer: deploy with Risk Parity, capped at 35% per strategy, re-derived monthly using a 12-month rolling window with a 25% turnover cap per rebalance. After 6+ months of live (non-backtest) data, evaluate switching to drawdown-constrained CVaR.
Why this fits the problem: Risk parity handles the A/C correlation cluster better than inverse vol (which double-counts that exposure), ignores the noisy \( \hat{\boldsymbol{\mu}} \) that drives Markowitz to put 50% in C, and still gives E meaningful weight for the diversification it offers despite its 25% standalone drawdown. The per-strategy cap prevents any allocation from running away if estimation noise tilts the weights from one rebalance to the next.