Universal Portfolios – Adaptive Sizing Without a Known Edge

You have five names on your swing book. One is trending. Two are chopping. One is about to break out and you have no idea which. You sized them equally last month, or maybe you gave extra to the one you liked best. Either way, you are guessing at allocation before the evidence is in. Thomas Cover published a paper in 1991 that reframes this problem entirely. His universal portfolio algorithm does not require you to know which name will win. It watches the returns come in and shifts weight toward whatever allocation mix has been working, without ever committing to a single fixed strategy. The method comes from information theory, not from classical portfolio optimization, and it has a property that matters for traders: it is guaranteed to do almost as well as the best fixed-weight allocation you could have chosen in hindsight.

If you have read about how the Kelly criterion sizes positions using edge and odds, universal portfolios pick up where Kelly leaves off. Kelly requires you to know your edge. Cover’s algorithm assumes you do not.

What a Constant-Rebalanced Portfolio Actually Is

Before universal portfolios make sense, you need to understand the building block: the constant-rebalanced portfolio, or CRP.

A CRP holds a fixed percentage in each asset and rebalances to those percentages at the end of every period. Say you run a two-stock book and decide on 60% in stock A and 40% in stock B. After each day, you sell winners and buy losers to reset to 60/40. That is a CRP.

The rebalancing generates a return bonus in choppy, mean-reverting markets. When A goes up and B goes down, you sell some A and buy some B. If they reverse the next day, you bought low and sold high automatically. This is called the volatility pumping effect, and it is real. It does not appear in buy-and-hold. It only works with rebalancing.

The problem is choosing the right fixed weights. 60/40 might lose to 30/70 or 80/20 depending on what the market does over the next month. You do not know the right CRP in advance. That is exactly the gap Cover’s algorithm fills.

Universal Portfolios Explained

Cover’s insight was to hold every possible CRP at once and let performance sort out the weights.

Imagine laying out all possible allocation mixes on a triangle (for a three-asset book) or a line (for two assets). Every point on that surface represents one CRP with specific fixed weights. At the start, the universal portfolio gives equal weight to all of them. After each trading period, it reweights: CRPs that have accumulated more wealth get more influence. CRPs that performed poorly fade.

The portfolio you actually hold at any moment is the performance-weighted average of all those CRPs. In math, for a two-asset case, the weight in asset 1 on day t+1 is:

\hat{b}_{t+1} = \frac{\int_0^1 b \cdot S_t(b) \, db}{\int_0^1 S_t(b) \, db}

 

where S_t(b) is the cumulative wealth that a CRP with weight b in asset 1 would have achieved through day t. The integral runs over every possible allocation from 0% to 100%.

In plain language: compute how rich each possible fixed-weight portfolio would be right now, then take the wealth-weighted average of their allocation weights. That becomes your allocation for tomorrow.

Why This Matters for Swing Traders

I run a multi-name swing book where some names trend for weeks while others chop and reverse. The standard approach is to size by conviction. More confidence means more size. But conviction is often just recency bias wearing a better outfit.

Universal portfolios replace conviction-based sizing with evidence-based sizing. The algorithm does not care about your thesis. It watches which allocation mixes have been compounding wealth and tilts toward them. If your momentum name has been driving returns, the algorithm shifts weight there. If the mean-reverter starts working instead, the weights adjust. No manual intervention. No second-guessing.

The guarantee is the striking part. Cover proved that the universal portfolio’s total wealth grows at a rate that approaches the best CRP’s growth rate, regardless of what the market does. The gap shrinks as the number of trading periods increases. For a two-asset case, the wealth ratio between the best CRP and the universal portfolio is bounded by O(\sqrt{T}), which becomes negligible relative to the exponential wealth growth over T periods.

This is not a claim about beating the market. It is a claim about not leaving much on the table relative to the best fixed allocation you could have chosen with perfect hindsight. That is a different kind of edge: the edge of not needing to know the answer in advance.

How It Differs From Kelly and Mean-Variance

Three frameworks, three different assumptions about what you know.

Kelly sizing needs a probability estimate and a payoff ratio. You tell it your win rate is 55% and your average winner is 1.5 times your average loser, and it tells you to risk a specific fraction. If your win rate estimate is wrong, Kelly over-bets or under-bets. The input quality determines the output quality.

Mean-variance optimization (Markowitz) needs expected returns, volatilities, and correlations. These are notoriously unstable out of sample. Small errors in expected returns produce large swings in optimal weights. Every practitioner who has tried mean-variance on live data has watched the optimizer concentrate into one or two names.

Universal portfolios need nothing. No return estimates. No volatility forecasts. No correlation matrix. The algorithm adapts purely from observed price relatives. It belongs to the online learning family of algorithms, where the decision-maker acts first, sees the outcome, and updates. The theoretical guarantee holds against any sequence of returns, including adversarial ones. The market does not need to be stationary, ergodic, or well-behaved.

The cost of this generality is speed. Kelly converges to the optimal bet size quickly if your edge estimate is right. The universal portfolio converges more slowly because it makes no assumptions. In practice, the first 30 to 50 periods carry a noticeable drag while the algorithm is still spreading weight across many CRPs. After that, the performance-weighted averaging concentrates into the productive region of the allocation space.

Practical Implementation for a Multi-Name Swing Book

Running Cover’s algorithm exactly requires integrating over a continuous simplex of all possible weight vectors. That is computationally expensive for more than three or four assets. Practitioners use two common approximations.

The grid approach discretizes the simplex. For a five-name book, you pick a grid spacing (say 10% increments) and enumerate every possible allocation that sums to 100%. Each grid point is one CRP. You track the cumulative wealth of each, then compute the weighted average. With 10% granularity and five assets, you get about 1,001 grid points. That is manageable in a spreadsheet or a simple Python script. Finer grids (5% increments) give better approximation but scale to tens of thousands of points.

The exponential gradient approach, introduced by Helmbold, Schapire, Singer, and Warmuth in 1998, avoids the grid entirely. It updates portfolio weights multiplicatively after each period. Each asset’s weight gets multiplied by e^{\eta \cdot r_i}, where r_i is the asset’s return and \eta is a learning rate, then the weights are renormalized to sum to one. This is lighter, faster, and scales well to larger books. It gives up a small amount of theoretical tightness compared to Cover’s original, but works in practice.

I would start with the grid method for a book of three to five names. Rebalance weekly, matching your swing holding period. Track the cumulative wealth of each grid-point CRP using price relatives (today’s close divided by yesterday’s close). Compute the performance-weighted average allocation at the start of each week. That is your sizing for the week.

A Worked Example With Two Names

Suppose you trade two ETFs on a weekly swing basis. You define a grid of 11 possible allocations: 0/100, 10/90, 20/80, all the way to 100/0. At the start, each allocation gets equal weight (1/11).

After week one, ETF A returns +3% and ETF B returns -1%. The CRP with 100% in A grew its wealth by 1.03. The CRP with 50/50 grew by 1.03^{0.5} \times 0.99^{0.5} \approx 1.0099. The CRP with 100% in B shrank to 0.99. You compute the wealth-weighted average of all 11 grid points. The allocation tilts toward higher A exposure because A-heavy CRPs accumulated more wealth.

After week two, B reverses and gains 4% while A drops 1%. Now the CRPs that held more B catch up. The overall allocation recenters. This is the volatility pumping effect at the portfolio-of-portfolios level.

Over 20 weeks, the algorithm converges toward whatever fixed allocation mix would have been best for that particular sequence of returns. You never had to guess. You just watched and adapted.

Where Universal Portfolios Fail

No sizing method works everywhere. I have found three situations where universal portfolios break down or underperform simpler approaches.

Transaction costs eat the rebalancing bonus. The volatility pumping effect that makes CRPs attractive depends on frequent rebalancing. Every rebalance costs spread, slippage, and commissions. On a weekly swing timeframe with liquid large-caps, this is manageable. On daily rebalancing with small-caps or illiquid names, costs can exceed the theoretical gain. Always run a cost-adjusted backtest before deploying.

Strong trending markets punish the algorithm’s early diversification. If one name runs 40% in a straight line while others are flat, a conviction-based trader who sized that name heavily from day one will crush the universal portfolio for the first several weeks. The algorithm catches up eventually, but the convergence period can feel painful if you are watching the P&L.

High-dimensional books dilute the signal. With two or three names, the simplex of possible allocations is small and the algorithm converges fast. With 20 names, the number of CRPs on the simplex is enormous, and the weight assigned to any single good allocation is tiny. The exponential gradient method helps, but even then, books larger than 10 to 12 names may need additional structure, like grouping names into sectors and running the algorithm at the sector level first.

Combining Universal Portfolios With Your Existing Process

You do not need to replace your entire sizing framework. Universal portfolios work as a layer on top of discretionary or systematic selection.

Use your existing walk-forward tested entry signals to decide which names are in the book. Then hand the sizing question to the universal portfolio algorithm. You select the candidates. The algorithm allocates among them based on observed performance. This separates the “what to trade” decision from the “how much of each” decision.

Another approach: run the universal portfolio algorithm on your sector allocations rather than individual names. If you trade three sectors (say tech, energy, and financials) with two names each, let the algorithm decide how much capital goes to each sector. Within sectors, size equally or by volatility regime.

I have also seen traders use the algorithm’s allocation trajectory as a diagnostic. If the universal portfolio is shifting weight toward your momentum names and away from your mean-reversion names, the recent market regime favors trend. If it is spreading weight evenly, the market is not rewarding any particular style. That signal alone has value, even if you do not trade the exact weights it suggests.

The Information-Theoretic Foundation

Cover was not a trader. He was an information theorist at Stanford, best known for the textbook “Elements of Information Theory” with Joy Thomas. His universal portfolio paper applied the same ideas he used in data compression and sequential prediction.

The core principle: a universal code achieves compression close to the best fixed code for any source, without knowing the source statistics. Cover mapped this to portfolios. A universal portfolio achieves wealth growth close to the best fixed-weight portfolio for any market, without knowing the return distribution.

The mathematical tool is the same in both cases: a mixture over a parameter space, weighted by likelihood (or wealth). In coding, you mix over all possible probability models. In portfolios, you mix over all possible allocation vectors. The mixture pays a small overhead for its generality, but that overhead shrinks relative to total performance as the sequence gets longer.

This is why the algorithm requires no stationarity assumption. Classical portfolio theory assumes returns are drawn from some fixed distribution. Cover’s result holds for arbitrary sequences. The market can change its behavior every week and the guarantee still applies. For swing traders who deal with regime changes, sector rotations, and surprise moves, this property matters more than any specific return forecast.

Sizing Without Conviction

Most position sizing methods ask you to quantify your edge before you bet. Kelly needs a win rate. Volatility targeting needs a return forecast to calibrate the risk budget. Even equal-weight sizing assumes you have no information, which is itself an assumption.

Universal portfolios take a different path. They say: “I do not know which allocation is best, so I will maintain a performance-weighted portfolio of all possible allocations and let the data reveal the answer.” The cost is slower initial convergence. The benefit is a guarantee that holds regardless of what happens next.

For a swing trader running a five-name book on a weekly timeframe, the practical version is straightforward. Set up a grid of allocations. Track cumulative returns for each grid point. Compute the weighted average at each rebalance. Let the algorithm do the sizing while you focus on finding the next volume-confirmed breakout.

The edge is not knowing the future. The edge is not needing to.

Educational content only. Not investment advice. Trading involves risk. You are responsible for your decisions.