5D Library › Non-Ergodic Wealth Dynamics, the Kelly Criterion and Volatility Drag · 中文

Chapter 6 Tail Risk, Fat Tails and the Barbell

What the normal distribution underestimates

Most of the earlier chapters assumed normally (or log-normally) distributed returns. The assumption is mathematically convenient and systematically underestimates extreme events.

Evidence

Fat tails. In 1963 Mandelbrot, studying changes in cotton prices, found that large moves occurred far more often than the normal distribution predicts, and proposed describing price changes with stable distributions that have thicker tails (Mandelbrot 1963). A great deal of later research has confirmed a set of “stylised facts” about asset returns: the tails of the return distribution are much heavier than normal, with tail exponents usually between 2 and 5; large fluctuations cluster together; and returns themselves are almost uncorrelated while their absolute values are correlated over long periods (Cont 2001). Gabaix and colleagues report that the tails of daily stock returns roughly follow a power law with exponent about 3, the so-called “inverse cubic law” (Gabaix et al. 2003).

Calculation

Three distributions with the same variance: the normal distribution, Student’s t with 3 degrees of freedom (tail exponent 3), and a symmetric Pareto-type tail with exponent 3. With 252 trading days a year, the probability of a one-day fall of k standard deviations and “once in how many years”.

# How often should a daily fall of k standard deviations happen? Three distributions with
# the SAME variance: Gaussian; Student t with 3 degrees of freedom (tail exponent 3, close
# to the "inverse cubic law" estimated for daily stock returns); and a symmetric
# Pareto-type tail with exponent 3.
import math

def gauss_tail(k):                   # P(Z < -k), computed without cancellation
    return 0.5 * math.erfc(k / math.sqrt(2))

def t3_cdf(x):                       # Student t, 3 d.f., closed form
    u = x / math.sqrt(3)
    return 0.5 + (math.atan(u) + u / (1 + u * u)) / math.pi

def t3_tail_same_var(k):             # t3 has variance 3; rescale to unit variance
    return t3_cdf(-k * math.sqrt(3))

def pareto_tail_same_var(k, a=3.0):
    # symmetric, |X| = xm U^(-1/a) (Pareto); E[X^2] = a xm^2 / (a - 2) = 1
    xm = math.sqrt((a - 2) / a)
    return 0.5 * (xm / k) ** a if k > xm else 0.5

days = 252
print("probability of a one-day fall of k s.d. (and once in how many years)")
print(f"{'k':>3} {'Gaussian':>23} {'Student t, 3 d.f.':>23} {'Pareto tail, a = 3':>23}")
for k in (3, 5, 10, 20):
    cells = [f"{p:7.1e} ({1 / (p * days):9.3g} y)"
             for p in (gauss_tail(k), t3_tail_same_var(k), pareto_tail_same_var(k))]
    print(f"{k:3d} " + " ".join(f"{c:>23}" for c in cells))
# 19 October 1987: the S&P 500 fell about 20.5 % in one day; ASSUMING a daily s.d. of
# about 1 %, that is roughly a 20-sigma event. (The universe is about 1.4e10 years old.)
p = gauss_tail(20)
print(f"\nGaussian 20-sigma fall: {p:.1e} a day, once in {1 / (p * days):.1e} years")
# probability of a one-day fall of k s.d. (and once in how many years)
#   k                Gaussian       Student t, 3 d.f.      Pareto tail, a = 3
#   3   1.3e-03 (     2.94 y)   6.9e-03 (    0.573 y)   3.6e-03 (     1.11 y)
#   5   2.9e-07 ( 1.38e+04 y)   1.6e-03 (     2.45 y)   7.7e-04 (     5.15 y)
#  10   7.6e-24 ( 5.21e+20 y)   2.1e-04 (     18.9 y)   9.6e-05 (     41.2 y)
#  20   2.8e-89 ( 1.44e+86 y)   2.6e-05 (      150 y)   1.2e-05 (      330 y)
#
# Gaussian 20-sigma fall: 2.8e-89 a day, once in 1.4e+86 years

The variance is the same; the difference is all in the tails. Under the normal distribution a one-day fall of 5 standard deviations happens on average once in more than ten thousand years, and for 10 standard deviations the time scale is 1020 years, far beyond the age of the universe (about 1.4 × 1010 years); under a distribution with tail exponent 3, a 5-standard-deviation fall happens every few years and a 10-standard-deviation fall every few decades. On 19 October 1987 the S&P 500 fell about 20.5 % in a single day. By the author’s rough arithmetic, assuming a daily volatility of about 1 %, that is about 20 standard deviations, something that should never happen under the normal distribution.

This bears directly on the conclusions of earlier chapters:

  • The volatility tax is heavier. Chapter 2’s −σ2/2 was derived under the normal approximation; the fatter the left tail of the return distribution, the larger the loss in log growth for the same variance.
  • Kelly leverage is lower. Kelly leverage computed from a normal distribution is too aggressive in a fat-tailed reality.
  • The absorbing barrier is closer. Chapter 4’s ruin probabilities are higher with fat tails, because one extreme event can go straight through the buffer.

The barbell

Taleb argues that, faced with extreme events that cannot be predicted but have huge consequences (“black swans”, in his term), rather than holding a lot of moderately risky assets one should adopt a barbell: most of one’s money in extremely safe assets and a small part in high-payoff positions with limited losses that may pay off hugely in an extreme event, with almost nothing in between (Taleb 2007, 2012). The largest possible loss of such an allocation is capped at the size of the high-payoff part.

The barbell sounds attractive, but its results depend on a question that is often overlooked: how is the high-payoff part priced?

Evidence

Insurance is usually not cheap. Coval and Shumway found that the average returns of S&P 500 index put options are significantly negative, and that zero-beta at-the-money straddles lose about 3 % a week on average (Coval and Shumway 2001). In other words, people who buy “crash insurance” such as put options pay, on average, more than its actuarially fair (expected-payoff) value. Coval and Shumway interpret this premium as the market’s price for volatility risk (volatility soars in a crash): buyers are paying for a real risk, not merely being overcharged.

Calculation

An honest toy model (every parameter an illustrative assumption): equity has, in 95 % of years, log returns normally distributed with mean 8 % and standard deviation 15 %, and in 5 % of years falls 40 %; bills pay 3 % a year. Compared: all equity; 60/40; 90 % bills plus 10 % in different “high-payoff parts”; and 97 % equity plus 3 % crash insurance. The high-payoff parts are “lotteries” that go to zero in 85 % of years and pay 6 times the stake in 15 % (expected value 0.90, i.e. overpriced), at the fair price (6.67 times) or with a genuine edge (9 times), and crash insurance paying 12 times only in crash years (a fair price would be 20 times). Rebalanced once a year, 30 years.

# An honest toy model of a barbell. Yearly steps, 30 years, rebalanced once a year.
#  Equity: ordinary years (95 %) log-return ~ Normal(8 %, 15 %); crash years (5 %) -40 %.
#  Bills: 3 % a year, no risk.
#  "Lottery" sleeve: long-shot bets that lose everything in 85 % of years and pay `pay`
#   times the stake in 15 %, independently of equity (6x: expected value 0.90, a bleed).
#  "Crash insurance": options worthless in ordinary years, paying 12x in a crash year
#   (a fair price would be 20x; buyers of protection usually pay above fair value).
# All numbers are illustrative assumptions, not estimates for any market or product.
import math, random, statistics

def year(rng, pay):
    crash = rng.random() < 0.05
    eq = math.exp(-0.51) if crash else math.exp(rng.gauss(0.08, 0.15))  # e^-0.51 ~ -40 %
    lottery = pay if rng.random() < 0.15 else 0.0
    insurance = 12.0 if crash else 0.0
    return eq, lottery, insurance

def run(weights, pay=6.0, years=30, n=20_000, seed=12):
    rng = random.Random(seed)
    finals, worst = [], []
    for _ in range(n):
        w, low = 1.0, 0.0
        for _ in range(years):
            eq, lot, ins = year(rng, pay)
            k = weights[0] * eq + weights[1] * 1.03 + weights[2] * lot + weights[3] * ins
            low = min(low, k - 1); w *= k
        finals.append(w); worst.append(low)
    finals.sort()
    return (statistics.median(finals), finals[len(finals) // 20],
            statistics.median(worst), min(worst))

# weights: (equity, bills, lottery, crash insurance)
rows = (("A 100 % equity", (1, 0, 0, 0), 6),
        ("B 60 % equity / 40 % bills", (0.6, 0.4, 0, 0), 6),
        ("C 90 % bills / 10 % lottery, pays 6x", (0, 0.9, 0.1, 0), 6),
        ("D same, fair price 6.67x", (0, 0.9, 0.1, 0), 20 / 3),
        ("E same, with an edge 9x", (0, 0.9, 0.1, 0), 9),
        ("F 90 % bills / 10 % crash insurance", (0, 0.9, 0, 0.1), 6),
        ("G 97 % equity / 3 % crash insurance", (0.97, 0, 0, 0.03), 6))
print(f"{'portfolio':<37} {'median':>6} {'5th pct':>7}"
      f" {'typ. worst yr':>13} {'worst seen':>10}")
for name, wts, pay in rows:
    med, p5, mw, ww = run(wts, pay)
    print(f"{name:<37} {med:6.2f} {p5:7.2f} {mw:13.0%} {ww:10.0%}")
# portfolio                             median 5th pct typ. worst yr worst seen
# A 100 % equity                          4.70    0.72          -40%       -47%
# B 60 % equity / 40 % bills              4.11    1.40          -23%       -27%
# C 90 % bills / 10 % lottery, pays 6x    0.76    0.28           -7%        -7%
# D same, fair price 6.67x                0.90    0.30           -7%        -7%
# E same, with an edge 9x                 1.55    0.40           -7%        -7%
# F 90 % bills / 10 % crash insurance     0.24    0.10           -7%        -7%
# G 97 % equity / 3 % crash insurance     3.73    0.98          -22%       -49%

The model’s results differ from the popular story:

  • The largest loss is indeed capped. With 90 % bills and 10 % in a high-payoff part, the worst year loses only about 7 %; with all equity the worst year loses more than 40 %.
  • But when it is overpriced, the barbell bleeds slowly. With the high-payoff part worth only 0.90 (lottery) or 0.60 (crash insurance) in expectation, median wealth after 30 years is only 0.76 and 0.24 times the start, far below all equity or 60/40. Even at a fair price the median is below the start: the high-payoff part goes to zero in most years, and the median path wins fewer times than average.
  • Only when the high-payoff part has a genuine edge (9 times) is the barbell’s median above the start, and it is still far below the portfolios holding equity. In this model, what the barbell buys is “a limited worst case”, and what it pays is growth.
  • A little crash insurance (97 % equity plus 3 % insurance) brings the typical worst year from −40 % to about −22 %, at the cost of median wealth falling from 4.7 to about 3.7 times the start. It is insurance with a definite price, not free return. It also covers only crash years: the worst year this portfolio saw in the simulation (−49 %) is even slightly worse than all equity’s (−47 %), because it was an ordinary year with no crash but a big fall in shares, in which the insurance paid nothing and took up 3 % of the money.

Note

What this model cannot show. Real option prices, the frequency and size of crashes, and the payoff distributions of lottery-like positions all differ from these assumptions and change over time; the model cannot be used to judge whether any particular option or product is worth buying. It shows a structure: the value of a barbell lies in capping the largest loss and keeping you in the game after an extreme event (Chapter 4’s absorbing barrier), while its effect on long-run growth depends on the pricing of the high-payoff part and cannot be assumed positive in advance.

Hypothesis · not established

The “survival first” hypothesis (not yet established). For individuals and small firms with rigid spending, first securing a cash buffer that is thick enough in the sense of Chapter 4, and then taking risk with the remaining funds at a fraction of Kelly, gives a median wealth after ten years no lower than, and a worst-5 % outcome clearly better than, an allocation with the same risk and no buffer. If tracking data on real households or firms showed the group with thicker buffers clearly behind in long-run median and no better in the tail, the hypothesis would be weakened.

Summary

The tails of asset returns are much heavier than the normal distribution’s, with tail exponents usually between 2 and 5; for the same variance, the frequency of extreme events can differ by many orders of magnitude. This makes the volatility tax heavier, Kelly leverage lower and the absorbing barrier closer. A barbell can cap the largest loss, but its long-run growth depends on the pricing of the high-payoff part; insurance-like positions usually have negative average returns, so a barbell often trades growth for a limited worst case. The next chapter reads the conclusions of the first six chapters beside the ways of managing wealth in the Shiji’s “Biographies of the Money-Makers”.

References

Cont, Rama. 2001. “Empirical Properties of Asset Returns: Stylized Facts and Statistical Issues.” Quantitative Finance 1 (2): 223–36.
Coval, Joshua D., and Tyler Shumway. 2001. “Expected Option Returns.” Journal of Finance 56 (3): 983–1009.
Gabaix, Xavier, Parameswaran Gopikrishnan, Vasiliki Plerou, and H. Eugene Stanley. 2003. “A Theory of Power-Law Distributions in Financial Market Fluctuations.” Nature 423: 267–70.
Mandelbrot, Benoit. 1963. “The Variation of Certain Speculative Prices.” Journal of Business 36 (4): 394–419.
Taleb, Nassim Nicholas. 2007. The Black Swan: The Impact of the Highly Improbable. Random House.
Taleb, Nassim Nicholas. 2012. Antifragile: Things That Gain from Disorder. Random House.

Fan, Y. (2026). Non-Ergodic Wealth Dynamics, the Kelly Criterion and Volatility Drag: From Itô's Lemma on Geometric Brownian Motion and Ruin Barriers to Barbell Portfolios, Read Beside the Shiji's 'Biographies of the Money-Makers' [非遍历性财富动力学、凯利准则与波动率税] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23754709 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).