GSEC/Sovereign AAA+ bonds overhyped?

@BB789

  • by “No bond” above,
    i assume you are specifically referring to central government fixed-rate sovereign bonds (GSECs), since that’s what we started early-on in this discussion. Right?

  • by “long time”,
    how long into the recent past are you referring to?

While we began by talking specifically about GSECs earlier in this topic-thread,
subsequent posts also included SDLs and non-sovereign bonds
as the discussion has moved to equity vs. debt.

( Calling this out here
as it seems like others reading this topic-thread may easily misses this nuance.
Central-govt. “GSECs” are just one subset of “Bonds”.)


Absolutely. 9,999 is not 10,000.
For most folks, extreme odds aren’t intuitive.
By ignoring the difference as “close enough”, one end’s up with a sub-optimal decision. :sweat:

Also, on the topic of something being “risk-free”,
Risk isn’t a single fungible number.
An asset maybe free of a specific type of risk? Sure.
A recent discussion evaluating different types of risk in Equity vs Gold.
Maybe can do that now for also “… vs. Debt” ? :thinking:

However, for 9999/10000 odds (continuing with the example odds shared above),
are folks sufficiently invested upto 99.9%# of their expected debt fraction (40%) of their portfolio?
Based on what i read, i believe this is very unlikely.
Hence, i have been choosing to highlight these aspects of debt (especially sovereign) quite often.

# - Ensuring survival always supersedes maximizing your expected value.
To handle a total wipe-out in case of a loss, apply the Kelly criterion
to further limit exposure to a particular asset with some non-zero risk.

As an example,
consider the following approach
to determine the composition of the debt fraction (say the 40%) of one’s portfolio…

Multi-Asset Kelly Criterion: GSEC vs Corporate Bonds (vs. Cash)

Note: Numbers in parenthesis refer to % of total-portfolio.
(currently assuming a 40% debt allocation) .

GSEC Yield Corp Yield GSEC Alloc. Corp Alloc. Cash Alloc.
6% 10% 99.8% (39.9%) 0.0% ( 0.0%) 0.2% ( 0.1%)
6% 12% 99.8% (39.9%) 0.1% ( 0.0%) 0.1% ( 0.0%)
6% 14% 99.7% (39.9%) 0.2% ( 0.1%) 0.1% ( 0.0%)
8% 10% 99.9% (40.0%) 0.0% ( 0.0%) 0.1% ( 0.0%)
8% 12% 99.8% (39.9%) 0.1% ( 0.0%) 0.1% ( 0.0%)
8% 14% 99.8% (39.9%) 0.1% ( 0.0%) 0.1% ( 0.0%)
10% 10% 99.9% (40.0%) 0.0% ( 0.0%) 0.1% ( 0.0%)
10% 12% 99.9% (40.0%) 0.0% ( 0.0%) 0.1% ( 0.0%)
10% 14% 99.8% (39.9%) 0.1% ( 0.0%) 0.1% ( 0.0%)
Table generated using the following Python script - kelly-bonds.py, for reference.
import math

def calculate_single_kelly(win_prob, win_payoff_ratio):
    """Calculates the Kelly Criterion fraction for a single asset."""
    loss_prob = 1 - win_prob
    kelly_fraction = win_prob - (loss_prob / win_payoff_ratio)
    return max(0, kelly_fraction)

def calculate_multi_kelly(p1, b1, p2, b2):
    """
    Calculates the Kelly Criterion for two independent simultaneous bets.
    Uses a grid search to find the optimal fractions that maximize expected log wealth.
    
    :param p1: Probability of winning Asset 1
    :param b1: Payoff ratio of Asset 1
    :param p2: Probability of winning Asset 2
    :param b2: Payoff ratio of Asset 2
    :return: Tuple of (optimal_fraction_1, optimal_fraction_2)
    """
    best_f1, best_f2, max_g = 0.0, 0.0, -float('inf')
    
    # Grid search with 0.1% resolution
    steps = 1000
    for i in range(steps + 1):
        f1 = i / steps
        for j in range(steps + 1 - i): # Constraint: f1 + f2 <= 1.0 (No leverage)
            f2 = j / steps
            
            # The 4 possible states of the world:
            w1 = 1 + f1*b1 + f2*b2  # Both win
            w2 = 1 + f1*b1 - f2     # Asset 1 wins, Asset 2 defaults
            w3 = 1 - f1 + f2*b2     # Asset 1 defaults, Asset 2 wins
            w4 = 1 - f1 - f2        # Both default
            
            # If any outcome results in total ruin (wealth <= 0), this allocation is invalid
            if w4 <= 0: 
                continue 
                
            # Calculate Expected Log Wealth (Geometric Growth Rate)
            g = (p1 * p2 * math.log(w1) + 
                 p1 * (1 - p2) * math.log(w2) + 
                 (1 - p1) * p2 * math.log(w3) + 
                 (1 - p1) * (1 - p2) * math.log(w4))
                 
            if g > max_g:
                max_g = g
                best_f1, best_f2 = f1, f2
                
    return best_f1, best_f2

# --- Portfolio Allocation ---
PORTFOLIO_DEBT_FRACTION = 0.40

# --- Asset 1: GSEC / SDL ---
p_gsec = 9999 / 10000  # 99.99% chance of success

# --- Asset 2: Corporate Bond ---
p_corp = 90 / 100      # 90.00% chance of success

print("Multi-Asset Kelly Criterion: GSEC vs Corporate Bonds\n")
print(f"Assuming {PORTFOLIO_DEBT_FRACTION*100:.0f}% of portfolio is allocated to debt.\n")
print(f"{'GSEC Yield':>10} | {'Corp Yield':>10} | {'GSEC Alloc (Port %)':<20} | {'Corp Alloc (Port %)':<20} | {'Cash (Risk-Free)'}")
print("-" * 90)

# Model GSEC returns (6%, 8%, 10%) and Corp returns (10%, 12%, 14%)
for gsec_return in [6, 8, 10]:
    for corp_return in [10, 12, 14]:
        b_gsec = gsec_return / 100.0
        b_corp = corp_return / 100.0
        
        # Calculate optimal multi-asset allocation
        f_gsec, f_corp = calculate_multi_kelly(p_gsec, b_gsec, p_corp, b_corp)
        
        cash = 1.0 - (f_gsec + f_corp)
        
        gsec_str = f"{f_gsec*100:>5.1f}% ({f_gsec*100*PORTFOLIO_DEBT_FRACTION:>4.1f}%)"
        corp_str = f"{f_corp*100:>5.1f}% ({f_corp*100*PORTFOLIO_DEBT_FRACTION:>4.1f}%)"
        cash_str = f"{cash*100:>5.1f}% ({cash*100*PORTFOLIO_DEBT_FRACTION:>4.1f}%)"
        
        print(f"{gsec_return:>9}% | {corp_return:>9}% | {gsec_str:<20} | {corp_str:<20} | {cash_str}")

Few observations:

  1. At 10% Corporate Yield:
    • The expected value is negative (0.9 * 0.10 - 0.1 * 1.0 = -0.01).
    • Kelly allocates 0% to the corporate bond.
  2. At 12-14% Corporate Yield:
    • The corporate bond becomes +Expected Value,
      So, the Kelly-criterion logic, allocates a tiny portion (0.1%) to it,
      while keeping the vast majority in GSECs.
  3. Cash Buffer:
    • The model always leaves a tiny fraction in cash to prevent total ruin in the 1/10000 chance both default.

Next steps:

  1. Update the above script to account for inflation (an equal negative offset across all assets)
  2. Modify the probabilities and payoffs for each of the assets and check how the ideal allocation changes. I can bet that some of the results are going to be very non-intuitive for most folks who try this out. :wink:
    So please do.
    Here are a couple of quick experiments (click to expand)

    Q1. What is the probability of success for Corp. bonds
    at which the Kelly-Criterion suggests a ~85-15 split between Corp. bonds and GSECs?

    GSEC Yield Corp Yield GSEC Alloc. Corp Alloc. Cash Alloc.
    6% 14% 84.7% (33.9%) 15.2% ( 6.1%) 0.1% ( 0.0%)

    Q2. If the probability of success for GSECs increases/decreases by 10x,
    what are the ideal split-ups of investment in GSECs vs. Corporate bonds,
    according to the Kelly criterion?

  3. Expected-Value is NOT Expected-Utility.
    Optimizing for one (Kelly-Criterion) doesn’t always optimize for the other.
    • What’s the difference? [1] [2]
  4. Explore why diversifying across asset-classes alone
    cannot account for all Systemic Tail Risks and Liquidity Risks.
1 Like