Free lesson · Stochastic calc
Itô's lemma: why gamma exists
Open interactive lessonPractice calculationsExplore labs
Start with the idea
Ordinary calculus drops squared increments when they are too small. Brownian increments are different: their squares accumulate at order dt. The extra curvature term is the mathematical source of gamma exposure.
Symbols, units & horizon
- V(S,t): derivative value in currency
- S: underlying price
- ∂V/∂t or Θ: value change per year at fixed spot
- ∂V/∂S or Δ: delta, value units per price unit
- ∂²V/∂S² or Γ: gamma, value units per squared price unit
- σ: return volatility in GBM
- σ_imp: model implied volatility
- σ_realised: volatility used in the local realised-move approximation
- dt: years
- dS: stochastic price increment
- dW: Brownian increment with (dW)²=dt in Itô calculus
- P&L: value change after subtracting the delta exposure, before financing and costs
- V_t,V_S,V_SS: partial derivatives with respect to time, spot, and spot twice
- σ_imp and σ_real: implied and realised return volatilities in the same time units
When and why to use this
Use the expansion to explain option P&L and why delta hedging removes only local first-order spot exposure. It separates theta, realised variation and hedge error.
In ordinary calculus, if depends on and moves by , then . Brownian paths are too rough for that: is not negligible, so a second-order term survives.
Retain the Brownian second-order term
- Taylor-expand . Terms involving dt² and dt·dW vanish in the Itô limit.
- Substitute GBM and use in the quadratic-variation sense: . This yields the displayed formula.
- The statement about squared Brownian increments is a stochastic-calculus result, not an ordinary pointwise equality of numbers.
For V=S², derivatives are Vₛ=2S, Vₛₛ=2 and Vₜ=0. Thus .
The three partial derivatives have names on every options desk: is theta, is delta, is gamma. The last term says that a convex position earns from volatility, at rate , even with no drift. That is why an option has time value: it is the price of that convexity.
Hold a delta-hedged option and the term cancels. What remains, per unit time, is
Subtract delta and isolate the volatility contribution
- An option’s local price change is . Shorting Δ units of stock removes the linear term over that instant.
- Approximating realised quadratic variation as leaves the displayed theta-plus-gamma expression before carrying adjustments. In the zero-rate, no-dividend model, .
- Substitution gives local long-option hedged P&L . With rates/dividends, include financing and carry consistently.
Γ=.02, S=100, realised vol=.25, implied=.20, dt=1/252 gives approximate long-option P&L per option unit.
Under a zero-rate, no-dividend diffusion model with continuous delta hedging and a fixed pricing volatility, the local variance contribution is . With nonzero rates, account explicitly for financing the option and stock hedge before interpreting excess P&L. The expression weights variance differences by the changing gamma and spot along the path; it is not a guarantee based on an unweighted volatility comparison. Changing implied volatility, jumps, discrete hedging and transaction costs add exposures that this local approximation omits.
In your own words: why does a delta-hedged long option position lose money on a quiet day?
Delta hedging removes exposure to the direction of the move, leaving theta and gamma. Gamma earns in proportion to the square of the realised move; theta is paid regardless. The option was priced assuming a certain daily move (implied vol). On a quiet day the realised move is smaller than that, so gamma earnings fall short of theta, and the position bleeds. The premium you paid was for movement that didn't happen.
Python implementation
Self-contained teaching example. Python 3.10+; dependencies and input conventions are shown in the code and notation. Run in your own Python environment.
def ito_local_change(theta, delta, gamma, spot, volatility, dt, delta_spot):
"""Differential approximation, not a finite-move exact price."""
return theta*dt+delta*delta_spot+.5*gamma*volatility**2*spot**2*dt
def delta_hedged_local_pnl(theta, gamma, spot, realized_volatility, dt):
"""Before cash-account financing, hedge costs and discrete-hedge error."""
return theta*dt+.5*gamma*spot**2*realized_volatility**2*dt
print(delta_hedged_local_pnl(-5, .03, 100, .2, 1/252))
def zero_carry_variance_pnl(gamma, spot, realized_vol, implied_vol, dt):
return .5*gamma*spot**2*(realized_vol**2-implied_vol**2)*dt
Continue learning
Stochastic Calculus — all lessons- Start with one random step before continuous noise
- Before Itô: random walks, Brownian motion and information
- Itô integration and quadratic variation
- SDEs, Euler–Maruyama and an Ornstein–Uhlenbeck example
- Geometric Brownian motion: the model under Black–Scholes
- Itô's lemma: why gamma exists
- Black–Scholes and delta hedging in production
- Put–call parity and a full Greek P&L budget
Quantitative finance and development glossary · Python resources and libraries · Research sources and limitations