Black-Scholes Formula and European Option Pricing › Introduction to the Greeks
Quantitative FinanceAll chapters Black-Scholes Formula and European Option Pricing › Introduction to the GreeksOne section · Sections in this chapter7 / 11 ↓
Reading tools Definitions & inline links
Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.
Article links
Make inline references clickable
The Greeks are partial derivatives of the option price with respect to various inputs. They quantify how sensitive an option's model price is to small changes in those inputs. Understanding the Greeks is essential for risk management and hedging. Each Greek measures a different dimension of local, model-based sensitivity; this set does not capture every risk, including model misspecification or liquidity risk.
The Greeks derive their importance from the dynamic nature of hedging. As we learned when studying the derivation of the Black-Scholes PDE, perfect replication within that model requires continuous adjustment of a hedge portfolio. Delta gives the model's stock hedge ratio, while the other Greeks help assess how that hedge and the option value respond as inputs change. These sensitivities do not eliminate errors from discrete rebalancing or departures from the model's assumptions.
The Greeks are usually named after Greek letters and measure the sensitivity of option prices to changes in underlying parameters. The five primary Greeks are Delta, Gamma, Theta, Vega (whose name is not a Greek letter), and Rho.
Delta: Sensitivity to Stock Price
Delta () measures the local rate of change of the option price with respect to the stock price, holding the other inputs fixed. Multiplying delta by a stock-price change gives a first-order estimate of the option-price change, not an exact repricing for a finite $1 move. Delta answers the practical question: if the stock moves a little, how much does your option position change in value?
where:
- : delta of the call option
- : call option price
- : stock price
- : cumulative normal distribution value at
The result that call delta equals comes directly from differentiating the Black-Scholes formula. The derivative of the first term with respect to is not simply because itself depends on . However, when we carefully apply the chain rule, the additional terms cancel out, leaving just . This cancellation is not coincidental; it reflects a deep property of the Black-Scholes formula related to the self-financing nature of the replicating portfolio.
where:
- : delta of the put option
- : put option price
- : stock price
- : cumulative normal distribution value at
- : cumulative normal distribution value at
Call deltas range from 0 to 1, while put deltas range from -1 to 0 in this non-dividend model. A spot-at-the-money call often has delta near 0.5 for short remaining maturity and modest carry, but its exact delta is . Delta gives a first-order estimate for a small stock move. A deep in-the-money call approaches delta 1, while a deep out-of-the-money call approaches delta 0.
Delta also has an interpretation as a hedge ratio: to hedge a short call position, you should hold shares of stock. If you sell a call with delta 0.5, you need to buy 0.5 shares to neutralize your exposure to small stock price movements. This hedge ratio must be continuously updated as the stock price moves and as time passes, which is why delta hedging is dynamic rather than static.
Gamma: Sensitivity of Delta to Stock Price
Gamma () measures the local rate of change of delta with respect to the stock price, holding the other inputs fixed. Multiplying gamma by a small stock-price change approximates the change in delta. This second-order sensitivity helps assess how stable the delta hedge will be. High gamma means that even small moves in the stock price can significantly change the delta, requiring frequent rebalancing of the hedge.
where:
- : gamma of the option
- : option price (call or put)
- : stock price
- : standard normal probability density at
- : volatility
- : time to expiration
The function is the standard normal probability density. Gamma measures the stock-price derivative of call delta , which is the call exercise probability under the share measure. It is not the derivative of the risk-neutral exercise probability .
Gamma is the same for calls and puts with the same strike and expiration. This equality follows from put-call parity: since , and the right-hand side is linear in , the second derivative with respect to must be identical for calls and puts.
High gamma means delta changes rapidly with the stock price, requiring frequent hedge rebalancing. As expiration approaches, gamma becomes concentrated near the money, but its exact maximum depends on the variable being changed. At fixed , gamma peaks across strikes at . At fixed , its peak across stock prices is . Long gamma gives positive local price curvature; total profit also depends on time decay, financing and the trading strategy.
Theta: Sensitivity to Time
Theta () measures the local rate of change of the option price as calendar time advances, holding the expiration date and the other inputs fixed. Since remaining maturity is , this is the negative of the derivative with respect to remaining maturity. Theta can have either sign: a negative value indicates time decay, while a positive value indicates a local increase in price as time passes. With time measured in years, the formula below gives theta per year.
where:
- : theta of the call option
- : stock price
- : standard normal PDF at
- : volatility
- : time to expiration
- : risk-free rate
- : strike price
- : cumulative normal CDF at
The formula consists of two components, each with a distinct economic interpretation:
- : Represents the erosion of value due to the resolution of uncertainty (time decay at fixed volatility). As time passes, there is less time for favorable price movements to occur. This term is always negative, which reflects the fact that options lose optionality value over time.
- : Represents the financing contribution from deferring the strike payment. For positive rates, the call's deferral benefit shrinks as expiration approaches. This contribution vanishes at zero rates and reverses sign at negative rates. In put theta, the financing term has the opposite sign because puts involve receiving rather than paying the strike.
Theta is often negative for long option positions, but time decay is not universal. A sufficiently deep in-the-money European put can have positive theta when interest rates are positive, because receiving the strike sooner can outweigh the loss of optionality. Near expiration, at-the-money options can have especially large negative theta, making time decay a practical concern for their holders.
The Black-Scholes PDE links theta and gamma through , where is the option value. The right-hand side accounts for financing the delta-hedged position. Positive gamma therefore does not, by itself, force theta to be negative; the option value, delta, stock price, and interest rate also enter the relationship.
Vega: Sensitivity to Volatility
Vega ( or ) is the local derivative of option value with respect to volatility expressed as a decimal. Despite being called "vega," this Greek is not named after an actual Greek letter, but the convention is so established that the name persists. Vega is useful when a position expresses a view on volatility. Future realized volatility must be estimated, while implied volatility can be inferred from an option's quoted market price when that price lies within the model's admissible range.
where:
- : vega of the option
- : option price
- : stock price
- : time to expiration
- : standard normal PDF at
A change in decimal volatility of , such as to , is one percentage point. Traders commonly quote vega as the raw derivative divided by . Multiplying that quotation by a one-percentage-point change gives a first-order price estimate, not an exact finite-change gain.
Vega is the same for calls and puts and is positive in the stated pre-expiry domain: , and . Thus a small volatility increase raises both vanilla option prices with the other inputs fixed.
Vega is often concentrated near the money, but the location of its maximum depends on which inputs are held fixed. At fixed stock price, remaining maturity, interest rate and volatility, it peaks across strikes at , or , not necessarily at . Increasing maturity raises the factor but also changes , so vega need not increase over every maturity interval.
Trading volatility can involve exposure to changes in implied volatility or to differences between realized and implied volatility. The examples here isolate vega exposure, with the other inputs held fixed. For the non-dividend-paying European call and put here, with , positive volatility and time remaining before expiry, a long option has positive vega; holding the other inputs fixed, a rise in implied volatility raises its model value. A short option has the opposite exposure. Total profit also depends on stock moves, time decay, financing and other changes.
Rho: Sensitivity to Interest Rate
Rho () is the local derivative of option price with respect to the interest rate expressed as a decimal. Its contribution to risk depends on the size of the rate change and the contract's maturity. Comparisons with other Greeks require specified input changes because the derivatives use different units.
where:
- : rho of the call option
- : strike price
- : time to expiration
- : risk-free rate
- : cumulative normal CDF at
Call rho is positive because higher interest rates reduce the present value of the strike payment while leaving the current stock price unchanged. A call holder benefits from this because they pay the strike in the future, and higher rates make that future payment cheaper in today's dollars.
where:
- : rho of the put option
- : put option price
- : strike price
- : time to expiration
- : risk-free rate
- : cumulative normal CDF at
Put rho is negative because the put holder receives the strike at exercise, and a higher rate reduces its present value. Rho contains a remaining-maturity factor, but discounting and also depend on maturity. Its magnitude need not grow proportionally or increase over every maturity interval.
Interest-rate sensitivity reflects the cost of carrying a hedged option position. Longer-dated equity options can be more sensitive to rate changes than near-term options, although the exact maturity dependence is not universal. Assess the exposure using a specified rate change and the position's rho.
Computing the Greeks
Let's implement and calculate the Greeks for our example option:
from numbers import Real
def black_scholes_greeks(S, K, T, r, sigma, option_type="call"):
"""
Calculate price and Greeks for a European option before expiration.
S, K, T (remaining maturity in years) and sigma must be positive real
finite scalars; r must be real and finite. All numeric inputs must be
representable as finite Python floats. option_type is the scalar string
'call' or 'put'.
Returns annual and daily calendar-time theta, raw vega and vega per
percentage point. Expired payoffs belong to the separate pricing functions.
This educational float implementation rejects unusable or nonfinite
intermediates/results with a numerical range ValueError; it is not an
arbitrary-range pricer. Benign underflow to zero is allowed.
"""
if not all(isinstance(value, Real) for value in (S, K, T, r, sigma)):
raise ValueError("S, K, T, r and sigma must be real finite scalars")
try:
S, K, T, r, sigma = map(float, (S, K, T, r, sigma))
except (OverflowError, TypeError, ValueError) as error:
raise ValueError("S, K, T, r and sigma must be real finite scalars") from error
if not all(np.isfinite(value) for value in (S, K, T, r, sigma)):
raise ValueError("S, K, T, r and sigma must be real finite scalars")
if S <= 0 or K <= 0 or T <= 0 or sigma <= 0:
raise ValueError(
"S, K, T and sigma must be strictly positive before expiration"
)
if not isinstance(option_type, str) or option_type not in ("call", "put"):
raise ValueError("option_type must be 'call' or 'put'")
try:
with np.errstate(over="raise", divide="raise", invalid="raise", under="ignore"):
sqrt_T = np.sqrt(T)
d1 = (np.log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * sqrt_T)
d2 = d1 - sigma * sqrt_T
# Standard normal PDF at d1
n_d1 = norm.pdf(d1)
# Common terms
discount = np.exp(-r * T)
if not all(np.isfinite(value) for value in (d1, d2, discount)):
raise ValueError(
"Inputs exceed the numerical range of this implementation"
)
if option_type == "call":
price = S * norm.cdf(d1) - K * discount * norm.cdf(d2)
delta = norm.cdf(d1)
theta = -S * n_d1 * sigma / (2 * sqrt_T) - r * K * discount * norm.cdf(
d2
)
rho = K * T * discount * norm.cdf(d2)
else:
price = K * discount * norm.cdf(-d2) - S * norm.cdf(-d1)
delta = norm.cdf(d1) - 1 # Equivalent to -N(-d1)
theta = -S * n_d1 * sigma / (2 * sqrt_T) + r * K * discount * norm.cdf(
-d2
)
rho = -K * T * discount * norm.cdf(-d2)
# Gamma and Vega are the same for calls and puts
gamma_denominator = S * sigma * sqrt_T
if not np.isfinite(gamma_denominator) or gamma_denominator <= 0:
raise ValueError(
"Inputs exceed the numerical range of this implementation"
)
gamma = n_d1 / gamma_denominator
vega = S * sqrt_T * n_d1
# Convert theta to daily and vega to per one percentage point of volatility
theta_daily = theta / 365
vega_percent = vega / 100
greeks = {
"price": price,
"delta": delta,
"gamma": gamma,
"theta": theta,
"theta_daily": theta_daily,
"vega": vega,
"vega_pct": vega_percent,
"rho": rho,
}
if not all(np.isfinite(value) for value in greeks.values()):
raise ValueError(
"Inputs exceed the numerical range of this implementation"
)
except (OverflowError, FloatingPointError, ZeroDivisionError) as error:
raise ValueError(
"Inputs exceed the numerical range of this implementation"
) from error
return greeks
call_greeks = black_scholes_greeks(S, K, T, r, sigma, "call")
put_greeks = black_scholes_greeks(S, K, T, r, sigma, "put")Greeks for European Options ======================================================= Greek Call Put ------------------------------------------------------- Price $4.5817 $6.9892 Delta 0.4612 -0.5388 Gamma 0.0281 0.0281 Theta (ann) -7.6919 -2.5715 Theta (day) -0.0211 -0.0070 Vega (/1pp) 0.2808 0.2808 Rho 20.7672 -30.4366
Let's interpret these values:
First-order estimates from the Greeks (other inputs held fixed): ------------------------------------------------------- • If the stock rises $1, the call gains approximately $0.46 and the put loses approximately $0.54 • Over one day, the call loses approximately $0.0211 • If volatility rises one percentage point (20% to 21%), the call gains approximately $0.2808 • Gamma of 0.0281 means delta changes ~0.03 for each $1 move in the stock
Visualizing Delta Across Strikes
# Calculate delta across strikes
strike_range = np.linspace(70, 130, 100)
call_deltas = []
put_deltas = []
for k in strike_range:
cg = black_scholes_greeks(S, k, T, r, sigma, "call")
pg = black_scholes_greeks(S, k, T, r, sigma, "put")
call_deltas.append(cg["delta"])
put_deltas.append(pg["delta"])
The plot illustrates how delta varies across different strike prices. For deep in-the-money calls (low strikes), delta approaches 1, indicating the option moves tick-for-tick with the stock. For deep out-of-the-money calls (high strikes), delta approaches 0. This plot varies strike while keeping the stock price fixed. Gamma instead measures how delta changes with the stock price, holding strike and the other inputs fixed.



The next chapter covers the Greeks in detail, including their use in hedging strategies, portfolio risk management, and the dynamics of delta-hedged positions.