Caps and Floors: Interest Rate Options
An interest-rate cap is a portfolio of caplets that limits a floating borrowing rate, while a floor is a portfolio of floorlets that protects an investor’s floating return from falling rates. Their value is the discounted sum of options on individual forward fixings, so accurate schedules, curves, and quote conventions matter as much as the option formula.
Cash-flow decomposition
For accrual period [Ti, Ti+1], a caplet paid at Ti+1 has payoff
caplet_i = N * delta_i * max(L_i(Ti) - K, 0)
floorlet_i = N * delta_i * max(K - L_i(Ti), 0)
The cap begins with the first future fixing and ends with the final accrual date. A payment lag, in-arrears fixing, compounding convention, or stub means the simple formula must be adapted. Do not model the cap as an option on a par swap rate: that is a swaption, with different exposure to the curve.
| Instrument | Underlying | Typical use | Main market quote |
|---|---|---|---|
| caplet | one forward period | isolate a fixing | implied vol |
| cap | strip of caplets | borrower rate ceiling | cap vol / premium |
| floor | strip of floorlets | investor minimum return | floor vol / premium |
| collar | long cap plus short floor | lower premium hedge | cap/floor strikes |
Pricing under a forward measure
Using the payment-date bond as numeraire, a Black caplet price is
V_caplet = N * delta * P(0, Ti+1) *
[F*N(d1) - K*N(d2)]
d1 = [ln(F/K) + 0.5*sigma^2*Ti] / (sigma*sqrt(Ti))
Here F is the forward rate implied by the projection curve. A floorlet replaces the bracket with KN(-d2) - FN(-d1). Near zero or for negative forwards, use Bachelier normal volatility or a shifted lognormal model. The important invariant is price: volatility must be inverted from a price using the same F, discount factor, and expiry.
import numpy as np
from scipy.stats import norm
def black_caplet(F, K, vol, expiry, df, accrual, notional):
st = vol * np.sqrt(expiry)
d1 = (np.log(F / K) + .5 * vol**2 * expiry) / st
d2 = d1 - st
return notional * accrual * df * (F*norm.cdf(d1) - K*norm.cdf(d2))
def cap_price(caplets):
return sum(caplets) # each element is a properly discounted caplet PV
Cap-floor parity and curve checks
At matching strike and schedule:
cap - floor = N * sum_i delta_i * P(0,Ti+1) * (F_i - K)
The right side is the PV of a payer swap with fixed rate K on the matching schedule. This is one of the best production controls: independently price cap, floor, and swap; their residual should be near numerical tolerance. The forward and discount factors should originate from the curve process described in yield-curve construction.
In a multi-curve setting, F_i comes from the appropriate forwarding curve while P comes from the collateral discount curve. Substituting a single curve may preserve an internal identity but misstates a market price and its hedge.
Volatility surface construction
Cap markets often provide cap volatilities by expiry and strike, but a cap quote is a portfolio price. A cap implied volatility applied uniformly to its caplets is a quote convention, not evidence that every caplet has that volatility. Strip caplet volatilities sequentially: price the shortest cap with its first caplet, subtract previously inferred caplets from the next cap premium, then invert the remaining caplet price.
This procedure is sensitive to noisy quotes and can produce negative or jagged forward variances. Use constrained smoothing on total variance and retain bid-ask consistency. If applying SABR to each expiry, use its price fit and static-arbitrage diagnostics rather than blindly interpolating parameters; see SABR volatility.
Hedging a cap book
Cap delta is a ladder of forward-rate deltas, not one duration number. Hedge it with short-rate futures, FRAs, or swaps chosen for their bucket alignment. Volatility exposure is concentrated in the caplets near the money, although deep in- or out-of-the-money caplets can dominate under a stress. Reprice after a market-quote bump and curve recalibration to obtain tradable risk.
Borrowers often buy a cap and sell a lower-strike floor to form a collar. The floor premium finances the cap, but it introduces exposure to falling rates exactly when financing costs are otherwise low. Risk management should show the entire payoff and cash-flow profile, including premium funding, rather than treating a zero-cost collar as riskless.
Key takeaways
- A cap or floor is a schedule-specific strip of caplets or floorlets.
- Price each period using its forward, accrual, discount factor, and option convention.
- Cap-floor parity must reconcile to the corresponding swap.
- Cap quotes require careful stripping before they become a caplet volatility surface.
- Hedge rate buckets and volatility nodes with full revaluation, not a single duration statistic.
