Portfolio Rules

Tangency, minimum variance, and risk parity

Kerry Back

Tue Sep 29, 2026

Install two plugins

/plugin marketplace add kerryback/skills
/plugin install risk-parity@kerryback
/plugin install two-stage-dcf@kerryback

Now ask Claude what it installed.

Today

  1. Three rules for choosing portfolio weights, and what each one needs
  2. Tangency and minimum variance
  3. Risk parity: each asset’s share of portfolio variance
  4. All three on ten industry portfolios, weekly returns, the past ten years
  5. Solving for the risk parity weights, and turning that into a skill
  6. A ninety-year backtest: rolling ten-year windows, rebalanced monthly

The three rules

Tangency

Maximizes the Sharpe ratio.

Inputs: expected returns, the covariance matrix, and the risk-free rate.

Minimum variance

Minimizes portfolio variance.

Inputs: the covariance matrix.

Risk parity

Equalizes each asset’s share of portfolio variance.

Inputs: the covariance matrix.

All three are long only here: no short sales, and the weights sum to one.

Tangency and minimum variance

Tangency

The highest Sharpe ratio available from the ten industries.

Needs an expected return for every industry.

Minimum variance

The smallest variance available from the ten industries.

Needs only the covariance matrix.

Tangency is the only one of the three rules that uses expected returns. Long only, none of the three has a closed-form solution, so all three are solved numerically.

Risk Parity

What minimum variance leaves out

Minimum variance uses no expected returns at all. It is the portfolio you would hold if you believed every industry had the same expected return.

It puts the most weight wherever the sample says risk is lowest, so an industry whose risk the sample underestimates is rewarded with a large weight for that reason.

Long only on these ten industries, it holds five of them, with 46% in consumer nondurables.

Two rules from the covariance matrix

Minimum variance

Makes the portfolio’s variance as small as it can be.

Concentrates on the quietest assets.

Risk parity

Makes every asset’s contribution to that variance the same.

Holds everything on the menu.

Neither uses expected returns. With two assets, equal contributions mean weights proportional to one over volatility, whatever the correlation.

Nondurables, energy, technology

standard deviation NoDur 15.2%Enrgy 30.0%HiTec 21.8%
correlation NoDur–Enrgy 0.45NoDur–HiTec 0.51Enrgy–HiTec 0.29

Ten years of weekly returns. Both portfolios keep their weights whatever you choose; risk parity sits inside the frontier.

Risk shares under equal weights

Ten industries, equally weighted. Consumer durables have an annualized volatility of 39%, consumer nondurables 15%.

Share of portfolio variance

Take an asset’s weight in the portfolio, multiply by the covariance of that asset with the return of the portfolio, and divide by the variance of the portfolio. That is the asset’s share of portfolio variance.

Those weighted covariances add up to the portfolio variance, so the shares sum to one.

Risk parity sets every share equal: one tenth each, across ten industries.

Ten Industries

The data

  1. Ken French’s 10 Industry Portfolios, value weighted, daily
  2. Compounded to weeks ending Friday: 522 weeks, 9 September 2016 to 4 September 2026
  3. Expected returns and the covariance matrix are the sample mean and covariance over those weeks, annualized by 52
  4. The risk-free rate is French’s daily rate compounded the same way, 2.4% a year

NoDur, Durbl, Manuf, Enrgy, HiTec, Telcm, Shops, Hlth, Utils, Other.

The three portfolios

Weights from the full 522 weeks, long only.

What each rule holds

Rule Industries held Largest position Largest share of variance
Tangency 3 HiTec, 88% HiTec, 93%
Minimum variance 5 NoDur, 46% NoDur, 46%
Risk parity 10 NoDur, 13% 10% each
Equal weight 10 10% each Durbl, 17%

Tangency holds energy and utilities alongside HiTec, at 10% and 1%. Risk parity’s smallest position is 5.9%, in consumer durables.

In sample

Rule Return Volatility Sharpe
Tangency 22.0% 20.5% 0.96
Minimum variance 9.2% 14.3% 0.47
Risk parity 13.1% 16.2% 0.66
Equal weight 14.0% 17.0% 0.68

Every figure is computed on the same 522 weeks that produced the expected returns and the covariance matrix. Tangency’s 0.96 is the largest Sharpe ratio any long-only portfolio could have had over those weeks, by construction.

Splitting the decade

Re-estimate each rule on the first five years and on the second five.

Rule Largest position, 2016–21 Largest position, 2021–26 Weight change
Tangency HiTec, 100% Enrgy, 54% 54.5%
Minimum variance NoDur, 35% NoDur, 53% 43.8%
Risk parity NoDur, 12% NoDur, 15% 7.1%

Weight change is half the sum of the absolute differences between the two sets of weights.

How It Was Solved

The convex form

Minimize this over positive weights, then rescale the answer to sum to one:

\[\tfrac{1}{2}\,(\text{portfolio variance}) \;-\; \tfrac{1}{n}\sum_i \log w_i\]

The log term forces every weight strictly positive, the objective is strictly convex, and its solution has equal risk contributions.

Solving for the weights

def risk_parity(Sigma):
    n = Sigma.shape[0]
    x0 = 1 / np.sqrt(np.diag(Sigma))
    f = lambda x: 0.5 * x @ Sigma @ x - np.mean(np.log(x))
    g = lambda x: Sigma @ x - 1 / (n * x)
    x = minimize(f, x0 / x0.sum(), jac=g, method="L-BFGS-B",
                 bounds=[(1e-10, None)] * n).x
    return x / x.sum()

The starting point weights each asset by one over its volatility, and g is the analytic gradient. On ten industries it converges in 10 iterations.

Ask Claude

Prompt

The file session11-covariance.csv holds the annualized covariance matrix of ten industry portfolios. Find the long-only risk parity portfolio, meaning the weights for which every industry contributes the same share of portfolio variance. Explain the method you chose and why.

Download it: session11-covariance.csv. More than one method finds these weights.

What you should get

Industry Weight Share of variance Industry Weight Share of variance
NoDur 12.9% 10% Telcm 11.2% 10%
Durbl 5.9% 10% Shops 10.6% 10%
Manuf 8.9% 10% Hlth 12.0% 10%
Enrgy 8.5% 10% Utils 11.8% 10%
HiTec 9.5% 10% Other 8.7% 10%

If you got this, tell Claude to create a risk parity skill and to save its code as a script that the skill uses.

Out of Sample

What the backtest asks

In the ten-year sample each rule was estimated on the same weeks it was judged on, which is why tangency’s Sharpe ratio was the largest available. The backtest takes that away: at every date the weights come from past returns only.

  1. The same ten industry portfolios, French’s daily history from July 1926
  2. Compounded to weeks ending Friday
  3. Risk-free rate: French’s daily series, which is the one-month Treasury bill rate spread over each month’s trading days, compounded to the same weeks
  4. It averaged 3.3% a year over the backtest

The rolling backtest

  1. Estimate expected returns and the covariance matrix on the trailing 522 weeks
  2. Solve each rule and hold its weights to the next month end
  3. Repeat at every month end from June 1936 to September 2026

1,084 rebalances over 90 years. Equal weighting, reset to one tenth each on the same schedule, is the benchmark.

Ninety years

The record

Rule Return Vol Sharpe Worst drawdown Turnover
Tangency 11.1% 16.2% 0.53 −50.9% 99%
Minimum variance 10.1% 12.0% 0.59 −43.1% 17%
Risk parity 11.4% 14.2% 0.60 −49.8% 2%
Equal weight 11.5% 14.8% 0.58 −52.0% 0%

Turnover is the annualized one-way change in target weights, so it leaves out the trading every rule does to offset drift. At 10 basis points a trade, costs take 0.11 points a year off tangency and 0.02 off minimum variance.

Choose the window

Sharpe ratio
Turnover a year

Sharpe ratios are against the bill rate; turnover is the one-way change in target weights.

Sharpe against equal weight

Rule Difference t
Tangency −0.056 −0.99
Minimum variance +0.002 +0.04
Risk parity +0.017 +2.32

Jobson–Korkie differences with Memmel’s correction, on 4,706 weekly excess returns. Risk parity and equal weight have a weekly return correlation of 0.997.