PN Portfolio Neutrality
Removing market exposure — dollar-neutral, beta-neutral, and beyond
Learning Objectives
- •Understand different types of portfolio neutrality
- •Implement dollar-neutral and beta-neutral constructions
- •Know when each type of neutrality applies
Explain Like I'm 5
Neutrality means removing exposure to directional market moves. Dollar-neutral means your long positions equal your short positions in dollar terms. Beta-neutral goes further — it adjusts for the fact that some assets move faster than the market. Sector-neutral removes industry biases. Factor-neutral removes exposure to systematic risk factors. Each layer of neutrality reduces your exposure to systematic risk and isolates pure alpha more cleanly.
Think of It This Way
Think of portfolio neutrality as balancing a scale. Dollar-neutral puts equal weight on both sides. But if one side has lead weights (high-beta stocks) and the other has feathers (low-beta), the scale still tips when the ground shakes (market moves). Beta-neutral adjusts for the weight difference, so the scale stays balanced no matter what.
1Types of Neutrality
2When Neutrality Matters (and When It Doesn't)
Key Formulas
Beta-Neutral Hedge Ratio
Adjusts the short position size so that market beta is zero across the portfolio. Higher beta on the long side requires proportionally larger short-side exposure.
Hands-On Code
Portfolio Neutrality Checker
def check_neutrality(positions):
"""Check portfolio neutrality across multiple dimensions.
positions: list of dicts with keys:
'name', 'notional', 'beta', 'sector', 'side' ('long'/'short')
"""
long_notional = sum(p['notional'] for p in positions if p['side'] == 'long')
short_notional = sum(p['notional'] for p in positions if p['side'] == 'short')
long_beta = sum(p['notional'] * p['beta'] for p in positions if p['side'] == 'long')
short_beta = sum(p['notional'] * p['beta'] for p in positions if p['side'] == 'short')
dollar_imbalance = (long_notional - short_notional) / max(long_notional, 1)
beta_imbalance = (long_beta - short_beta) / max(long_notional, 1)
print(f"=== NEUTRALITY CHECK ===")
print(f"Long notional: ${long_notional:,.0f}")
print(f"Short notional: ${short_notional:,.0f}")
print(f"Dollar imbalance: {dollar_imbalance:+.1%}")
print(f" {'[PASS]' if abs(dollar_imbalance) < 0.05 else '[FAIL]'} Dollar-neutral")
print(f"")
print(f"Long beta-$: {long_beta:,.0f}")
print(f"Short beta-$: {short_beta:,.0f}")
print(f"Beta imbalance: {beta_imbalance:+.1%}")
print(f" {'[PASS]' if abs(beta_imbalance) < 0.05 else '[FAIL]'} Beta-neutral")
return abs(dollar_imbalance) < 0.05, abs(beta_imbalance) < 0.05Checks whether a portfolio achieves dollar-neutral, beta-neutral, and sector-neutral conditions, and reports any imbalances.
Knowledge Check
Q1.You have $200K long and $100K short. Is this dollar-neutral?
Assignment
Construct a dollar-neutral and beta-neutral portfolio from 4-6 instruments. Verify neutrality before and after a simulated 5% market move. How much does each neutrality type protect you?