Learn Without Walls

Module 13: Options & Derivatives

Where stochastic calculus, probability theory, and estimation converge

Part III of 5 Module 13 of 22

1. What Are Derivatives?

A derivative is a financial contract whose value derives from the price of an underlying asset. The underlying can be a stock, bond, commodity, interest rate, currency, or even another derivative. Derivatives are the most mathematically rich instruments in finance, and for a statistician, they are where stochastic calculus, probability theory, and estimation all converge.

Finance Term

Derivative = a contract between two parties whose payoff depends on the value of an underlying asset. The four main types are: options (right but not obligation to buy/sell), futures (obligation to buy/sell at a future date), forwards (like futures but traded privately), and swaps (exchange of cash flow streams).

Stats Bridge

A derivative is a function of a random variable. If S is the price of the underlying (a random variable), then the derivative's payoff is g(S) for some function g. Pricing the derivative means computing E[g(S) · e−rT] under the appropriate probability measure. This is expected value of a transformation — the same operation you perform when computing E[g(X)] in any probability course.

This module focuses on options, the most commonly traded and conceptually rich type of derivative.

1.1 Why Derivatives Exist

Derivatives serve three fundamental purposes:

Purpose Description Statistical Analogue
Hedging Reduce risk by offsetting an existing exposure Variance reduction technique (like control variates)
Speculation Make leveraged bets on price direction Concentrated portfolio (high variance, high expected return)
Price discovery Derivative prices reveal market expectations Inverse problem — extracting latent parameters from observables

2. Call and Put Options

2.1 Call Options

A call option gives the holder the right, but not the obligation, to buy the underlying asset at a specified price (the strike price K) on or before a specified date (the expiration date T). The payoff at expiration is:

Call Payoff = max(ST − K, 0)

If ST > K, you exercise the option and profit ST − K. If ST ≤ K, the option expires worthless and your payoff is zero.

Stats Bridge

The call payoff max(ST − K, 0) is a truncated random variable. If ST follows a continuous distribution, the call payoff is the positive part of (ST − K). Its expected value is: E[max(ST − K, 0)] = ∫K (s − K) f(s) ds, where f is the density of ST. This is the partial expectation or truncated mean that appears frequently in actuarial science and survival analysis.

2.2 Put Options

A put option gives the holder the right to sell the underlying at the strike price. The payoff at expiration is:

Put Payoff = max(K − ST, 0)

If ST < K, you exercise and profit K − ST. If ST ≥ K, the put expires worthless. The put is like insurance against a price decline.

Stats Bridge

The put payoff is the mirror truncation of the call: it captures the left tail of the distribution. Together, call and put payoffs decompose the absolute deviation |ST − K| into positive and negative parts: max(S − K, 0) − max(K − S, 0) = S − K. This identity underlies put-call parity, which we derive later.

2.3 Option Terminology

Term Meaning For Calls For Puts
In the money (ITM) Option has positive intrinsic value S > K S < K
At the money (ATM) Strike equals current price S ≈ K S ≈ K
Out of the money (OTM) Option has zero intrinsic value S < K S > K
Intrinsic value Payoff if exercised now max(S − K, 0) max(K − S, 0)
Time value Option price minus intrinsic value The premium for optionality; always ≥ 0
Premium Price paid to buy the option The upfront cost; your maximum loss as a buyer

2.4 Profit Diagrams

The profit (not payoff) accounts for the premium paid upfront. For a call buyer with premium c:

Profitcall = max(ST − K, 0) − c

For a put buyer with premium p:

Profitput = max(K − ST, 0) − p

The breakeven point for a call is ST = K + c, and for a put is ST = K − p. Note the fundamental asymmetry: the buyer's maximum loss is the premium paid (bounded), but the potential gain is unlimited for calls and large for puts.

Key Insight

Options create asymmetric payoff distributions. A call buyer has a right-skewed payoff: small probability of large gains, high probability of a small fixed loss (the premium). This is the opposite of selling insurance — you pay a small regular cost for protection against a large adverse event. Conversely, the option seller has a left-skewed payoff: frequent small gains (collecting premium) with rare large losses.

3. The Black-Scholes Formula

The Black-Scholes formula (1973) is one of the most important equations in finance. It provides a closed-form solution for the price of a European call or put option on a non-dividend-paying stock.

3.1 The Model Assumptions

Black-Scholes rests on several strong assumptions. A statistician should know each one and its implications:

Assumption Mathematical Form Reality Check
Stock follows geometric Brownian motion dS = μS dt + σS dW Approximate but tails are fatter in reality
Volatility is constant σ = constant Violated — vol clusters and changes over time
Log-returns are normally distributed ln(ST/S0) ~ N((μ − σ²/2)T, σ²T) Approximately true for moderate horizons; fails in tails
No arbitrage opportunities Risk-neutral pricing applies Approximately true in liquid markets
Continuous trading is possible Can rebalance hedge at every instant Impossible in practice; introduces hedging error
No transaction costs or taxes Frictionless markets Costs are small but nonzero
Risk-free rate is constant and known r = constant Rates fluctuate; less important for short-dated options
Stats Bridge

The geometric Brownian motion (GBM) assumption means log-returns follow a random walk with drift: ln(St+1/St) = μdt + σdWt, where dWt ~ N(0, dt). This is a Gaussian AR(0) model for log-returns: no autocorrelation, constant variance, normally distributed innovations. Every empirical finance paper since the 1960s has shown these assumptions are violated (fat tails, volatility clustering, serial correlation), yet Black-Scholes remains the industry standard benchmark because of its elegant closed form.

3.2 The Black-Scholes Formulas

For a European call option:

C = S0 N(d1) − K e−rT N(d2)

For a European put option:

P = K e−rT N(−d2) − S0 N(−d1)

where:

d1 = [ln(S0/K) + (r + σ²/2)T] / (σ√T)

d2 = d1 − σ√T

and N(·) is the standard normal CDF.

Stats Bridge

The Black-Scholes formula is a discounted expected value under the risk-neutral measure: C = e−rT EQ[max(ST − K, 0)]. The terms N(d1) and N(d2) are tail probabilities of the standard normal distribution. Specifically, N(d2) is the risk-neutral probability that the option expires in the money: PQ(ST > K). The quantity d2 is a z-score — how many standard deviations the log-forward price is above the log-strike.

Key Insight

Notice that μ (the stock's expected return) does not appear in the Black-Scholes formula. This is the profound insight of risk-neutral pricing: we replace the real-world drift μ with the risk-free rate r and price the option as a discounted expectation under this modified probability measure. The option price does not depend on how fast the stock is expected to grow — only on how much it is expected to fluctuate (σ).

4. The Greeks: Partial Derivatives of Option Price

The "Greeks" are the partial derivatives of the option price with respect to various inputs. They measure how the option price changes when one parameter changes while all others are held constant. For a statistician, these are simply a sensitivity analysis.

Greek Symbol Definition Measures Statistical Analogue
Delta Δ ∂V/∂S Price sensitivity to underlying Regression coefficient (slope)
Gamma Γ ∂²V/∂S² Rate of change of delta Curvature; second derivative (like convexity for bonds)
Theta Θ ∂V/∂t Time decay (value lost per day) Depreciation rate of the option's time value
Vega ν ∂V/∂σ Sensitivity to volatility Sensitivity of estimator to dispersion parameter
Rho ρ ∂V/∂r Sensitivity to interest rate Often negligible for short-dated options

4.1 Delta in Depth

Delta is the most important Greek. For a call option under Black-Scholes:

Δcall = N(d1)

This means delta is always between 0 and 1 for calls, and between −1 and 0 for puts. An at-the-money call has delta ≈ 0.5: the option price moves about 50 cents for every $1 move in the stock.

Stats Bridge

Delta = N(d1) is the standard normal CDF evaluated at d1. As the option goes deeper in the money (d1 → ∞), delta approaches 1 (the option behaves like the stock). As it goes deeper out of the money (d1 → −∞), delta approaches 0 (the option is almost worthless). Delta traces out the sigmoid curve of the normal CDF — the same curve that appears in logistic regression as the link function.

4.2 Gamma: The Curvature

Gamma measures how fast delta changes. It is highest for at-the-money options near expiration, when small moves in the stock can flip the option from worthless to valuable.

Γ = φ(d1) / (S σ √T)

where φ is the standard normal PDF. Gamma is always positive for both calls and puts. High gamma means the option's delta is changing rapidly — the position is becoming more or less sensitive to the underlying price.

4.3 Theta: Time Decay

Theta measures how much value the option loses as time passes, all else equal. Options are wasting assets — they lose value every day due to the decreasing time until expiration. The rate of decay accelerates as expiration approaches.

Common Pitfall

Time decay is not linear. An option with 30 days to expiration loses value slowly. The same option with 5 days to expiration loses value rapidly. Theta scales approximately as 1/√T, meaning the last few days see the steepest decay. If you are long options, this time decay drag is a constant cost you bear. If you are short options, theta works in your favor — you earn "theta income" each day.

4.4 Vega: Sensitivity to Volatility

Vega measures sensitivity to volatility. Since volatility is the key input to option pricing, vega is arguably the most economically important Greek for traders:

ν = S φ(d1) √T

Vega is always positive for both calls and puts: higher volatility increases option values because it increases the probability of large moves, which benefits the option holder (due to the truncated payoff).

Key Insight

There is a deep relationship between the Greeks: the Black-Scholes PDE states that Θ + (1/2)σ²S²Γ + rSΔ = rV. This means theta, gamma, and delta are not independent — they are connected through a partial differential equation. If you know any two, you can derive the third. This is analogous to constraints in a statistical model that reduce the number of free parameters.

5. Implied Volatility

All inputs to Black-Scholes are directly observable (stock price, strike, time to expiration, risk-free rate) except one: volatility (σ). The implied volatility is the value of σ that makes the Black-Scholes price equal to the observed market price:

Cmarket = CBS(S, K, T, r, σimplied)
Stats Bridge

Finding implied volatility is an inverse problem: given the output (market price) and the model (Black-Scholes), find the parameter (σ) that produces that output. There is no closed-form solution, so we use numerical methods (Newton-Raphson, bisection). This is exactly like solving a maximum likelihood equation: find the parameter that makes the model best fit the observed data. The gradient needed for Newton-Raphson is vega — the sensitivity of price to volatility.

5.1 Why Implied Volatility Matters

Implied volatility has become the market's preferred way of quoting option prices. Instead of saying an option costs $5.30, traders say the implied vol is 25%. This has several advantages:

Finance Term

The VIX index (often called the "fear gauge") is a weighted average of implied volatilities on S&P 500 options. A VIX of 20 means the market expects the S&P 500 to move ±20%/√12 ≈ ±5.8% over the next month (annualized to a monthly number). The VIX typically spikes during market crashes and falls during calm periods.

6. The Volatility Smile and Skew

If Black-Scholes were perfectly correct, implied volatility would be the same for all strikes and maturities. In reality, it is not. When you plot implied volatility against strike price, you see a distinctive pattern:

6.1 The Volatility Smile

For short-dated options (especially on currencies and indices), implied vol is higher for both deep out-of-the-money calls and puts than for at-the-money options. This creates a U-shaped curve — the volatility smile.

6.2 The Volatility Skew

For equity index options (like S&P 500), the pattern is typically a skew: implied vol is higher for low strikes (OTM puts) and lower for high strikes (OTM calls). This creates a downward-sloping curve rather than a symmetric smile.

Stats Bridge

The volatility smile/skew tells us the market rejects the log-normal assumption. Higher implied vol at low strikes means the market assigns more probability to large downward moves than a normal distribution would predict — fat left tails. Higher implied vol at high strikes means fat right tails. The smile is the market's way of encoding its true distributional beliefs into the Black-Scholes framework, which only has one free parameter (σ). The smile is a misspecification diagnostic — if the model were correct, the smile would be flat.

Pattern Where Observed What It Reveals
Symmetric smile Currency options Fat tails in both directions; kurtosis > 3
Left skew (smirk) Equity index options Left tail fear (crash risk); negative skewness
Right skew Some commodity options Supply shock risk; positive skewness
Flat Theoretical (BS world) Log-normal distribution holds perfectly
Key Insight

The volatility skew became much more pronounced after the 1987 crash ("Black Monday"), when the S&P 500 fell 22% in a single day. Before 1987, the smile was relatively flat. After 1987, the market permanently "remembered" that extreme left-tail events are more likely than normal distributions predict. The skew is a scar from a tail event that permanently updated the market's prior distribution.

7. Put-Call Parity

Put-call parity is one of the most elegant results in finance. It states:

C − P = S0 − K e−rT

or equivalently:

C + K e−rT = P + S0

This is not a model — it is an arbitrage identity that must hold regardless of which option pricing model you use. It says that a call plus cash equals a put plus stock.

Stats Bridge

Put-call parity is a constraint equation. It reduces the number of free parameters: if you know the call price, stock price, and interest rate, the put price is determined (and vice versa). This is analogous to a linear constraint in estimation — like knowing that probabilities must sum to one, which means you only need to estimate k−1 probabilities for a k-category distribution.

7.1 Proof by No-Arbitrage

Consider two portfolios at time 0:

At expiration T:

Scenario Portfolio A value Portfolio B value
ST > K (ST − K) + K = ST 0 + ST = ST
ST ≤ K 0 + K = K (K − ST) + ST = K

Both portfolios have identical payoffs in every state of the world. By no-arbitrage, they must have the same price today. Therefore: C + K e−rT = P + S0.

Common Pitfall

Put-call parity only holds exactly for European options (exercisable only at expiration). For American options (exercisable any time before expiration), parity becomes an inequality: S − K ≤ C − P ≤ S − K e−rT. The early exercise feature introduces additional value for American options, particularly for puts on non-dividend-paying stocks and calls on dividend-paying stocks.

8. Python: Black-Scholes Pricer, Greeks, and Payoffs

8.1 Black-Scholes Implementation

Pythonimport numpy as np
from scipy.stats import norm
from scipy.optimize import brentq

class BlackScholes:
    """
    Black-Scholes option pricer with Greeks computation.
    All formulas assume European options on non-dividend-paying stocks.
    """

    def __init__(self, S, K, T, r, sigma):
        """
        S     : current stock price
        K     : strike price
        T     : time to expiration (years)
        r     : risk-free rate (annualized)
        sigma : volatility (annualized)
        """
        self.S = S
        self.K = K
        self.T = T
        self.r = r
        self.sigma = sigma

        # Precompute d1 and d2
        self.d1 = (np.log(S / K) + (r + sigma**2 / 2) * T) / (sigma * np.sqrt(T))
        self.d2 = self.d1 - sigma * np.sqrt(T)

    def call_price(self):
        return (self.S * norm.cdf(self.d1)
                - self.K * np.exp(-self.r * self.T) * norm.cdf(self.d2))

    def put_price(self):
        return (self.K * np.exp(-self.r * self.T) * norm.cdf(-self.d2)
                - self.S * norm.cdf(-self.d1))

    def delta(self, option_type='call'):
        if option_type == 'call':
            return norm.cdf(self.d1)
        return norm.cdf(self.d1) - 1

    def gamma(self):
        return norm.pdf(self.d1) / (self.S * self.sigma * np.sqrt(self.T))

    def theta(self, option_type='call'):
        # Per calendar day (divide by 365)
        term1 = -(self.S * norm.pdf(self.d1) * self.sigma) / (2 * np.sqrt(self.T))
        if option_type == 'call':
            term2 = -self.r * self.K * np.exp(-self.r * self.T) * norm.cdf(self.d2)
        else:
            term2 = self.r * self.K * np.exp(-self.r * self.T) * norm.cdf(-self.d2)
        return (term1 + term2) / 365

    def vega(self):
        # Per 1% change in volatility
        return self.S * norm.pdf(self.d1) * np.sqrt(self.T) / 100

    def rho(self, option_type='call'):
        if option_type == 'call':
            return self.K * self.T * np.exp(-self.r * self.T) * norm.cdf(self.d2) / 100
        return -self.K * self.T * np.exp(-self.r * self.T) * norm.cdf(-self.d2) / 100


# === Example: Price an option and compute all Greeks ===
bs = BlackScholes(S=100, K=100, T=0.25, r=0.05, sigma=0.20)

print("=== ATM Option (S=100, K=100, T=3mo, vol=20%) ===")
print(f"  Call price:  ${bs.call_price():.4f}")
print(f"  Put price:   ${bs.put_price():.4f}")
print(f"  Call delta:   {bs.delta('call'):.4f}")
print(f"  Put delta:    {bs.delta('put'):.4f}")
print(f"  Gamma:        {bs.gamma():.4f}")
print(f"  Theta (call): ${bs.theta('call'):.4f}/day")
print(f"  Vega:         ${bs.vega():.4f} per 1% vol")
print(f"  Rho (call):   ${bs.rho('call'):.4f} per 1% rate")

# Verify put-call parity
parity_lhs = bs.call_price() - bs.put_price()
parity_rhs = bs.S - bs.K * np.exp(-bs.r * bs.T)
print(f"\nPut-Call Parity Check:")
print(f"  C - P = {parity_lhs:.6f}")
print(f"  S - Ke^(-rT) = {parity_rhs:.6f}")
print(f"  Difference: {abs(parity_lhs - parity_rhs):.2e}")

8.2 Implied Volatility Solver

Pythondef implied_vol(market_price, S, K, T, r, option_type='call'):
    """
    Find implied volatility using Brent's method (root finding).
    """
    def objective(sigma):
        bs = BlackScholes(S, K, T, r, sigma)
        if option_type == 'call':
            return bs.call_price() - market_price
        return bs.put_price() - market_price

    # Brent's method: find sigma in [0.01, 5.0] where objective = 0
    return brentq(objective, 0.01, 5.0)

# Example: extract implied vol from market prices
print("=== Implied Volatility Extraction ===")
market_prices = {
    90:  12.50,   # Deep ITM call
    95:  8.20,    # ITM call
    100: 4.80,    # ATM call
    105: 2.40,    # OTM call
    110: 1.00,    # Deep OTM call
}

print(f"{'Strike':>8} {'Market Price':>14} {'Implied Vol':>13}")
for strike, price in market_prices.items():
    iv = implied_vol(price, S=100, K=strike, T=0.25, r=0.05)
    print(f"  {strike:>5}   ${price:>10.2f}    {iv:>10.1%}")

print("\nNote: if implied vol varies with strike, you're seeing")
print("the volatility smile/skew -- evidence of non-lognormal tails.")

8.3 Payoff and Profit Diagrams

Pythonimport numpy as np

def print_payoff_table(S_range, K, call_premium, put_premium):
    """
    Display call and put payoff/profit at various stock prices.
    """
    print(f"{'S_T':>6} {'Call Payoff':>13} {'Call Profit':>13} "
          f"{'Put Payoff':>12} {'Put Profit':>12}")
    print("-" * 60)
    for S in S_range:
        call_pay = max(S - K, 0)
        call_prof = call_pay - call_premium
        put_pay = max(K - S, 0)
        put_prof = put_pay - put_premium
        print(f"${S:>5.0f}  ${call_pay:>10.2f}   ${call_prof:>+10.2f}  "
              f"${put_pay:>9.2f}   ${put_prof:>+9.2f}")

# ATM option at K=100
print("=== Payoff/Profit Table: K=100, Call=$4.80, Put=$3.56 ===")
S_values = np.arange(80, 121, 5)
print_payoff_table(S_values, K=100, call_premium=4.80, put_premium=3.56)

print("\nBreakeven (call): S_T = K + premium = 100 + 4.80 = 104.80")
print("Breakeven (put):  S_T = K - premium = 100 - 3.56 = 96.44")
print("Max loss (buyer):  limited to premium paid")
print("Max gain (call):   unlimited")
print("Max gain (put):    K - premium = 96.44 (if stock goes to 0)")

8.4 Greeks Across Strike Prices

Python# Show how Greeks vary across strike prices for a fixed option
print("=== Call Greeks Across Strikes (S=100, T=0.25, vol=20%) ===")
print(f"{'Strike':>8} {'Price':>8} {'Delta':>8} {'Gamma':>8} "
      f"{'Theta':>8} {'Vega':>8}")
print("-" * 50)

for K in range(80, 121, 5):
    bs = BlackScholes(S=100, K=K, T=0.25, r=0.05, sigma=0.20)
    print(f"  {K:>5}  ${bs.call_price():>6.2f}   {bs.delta('call'):>.4f}  "
          f" {bs.gamma():>.4f}  {bs.theta('call'):>+.4f}   {bs.vega():>.4f}")

9. Summary

This module has covered the statistical foundations of options and derivatives:

Finance Concept Statistical / Mathematical Analogue
Derivative payoff g(S) Function of a random variable; E[g(X)] computation
Call payoff max(S-K, 0) Truncated random variable (positive part)
Put payoff max(K-S, 0) Mirror truncation (negative part)
Black-Scholes formula Discounted expectation under risk-neutral measure using normal CDF
d2 in Black-Scholes z-score: standardized log-moneyness
Delta = N(d1) Normal CDF: the sigmoid / logistic link function
Greeks Partial derivatives (sensitivity analysis)
Implied volatility Inverse problem: find parameter from observation (like MLE)
Volatility smile Model misspecification diagnostic (non-constant residual variance)
Put-call parity Constraint equation reducing free parameters

In the next module, we leave the world of pure financial instruments and enter the realm of physical assets: commodities, gold, and oil. We will see how supply and demand for real goods create unique pricing dynamics that differ fundamentally from stocks and bonds.