14. Volatility and IR Options

Overview

  • The most liquid nonlinear OCT rates products are SOFR caps, floors and SOFR swaptions

  • This chapter is an overview of SOFR caps, floors and swaptions, and their pricing and heding

Sell Side Rates Options Business

  • In the rates options business, there are exotic products and vanilla products

    • Vanilla products: SOFR caps, floors and SOFR swaptions

    • Examples of exotics: Bermudan swaptions, CMS swaps, CMS caps and floors, CMS spread options, range accrual

  • Exotic desk traders hedge their books by trading vanilla products

  • Vanilla desk traders do so by trading underlying linear products (SOFR swaps, FRA or futures)

  • More complicated models are needed for exotics pricing and hedging

    • Since exotics are hedged by vanillas, the pricing model has to give consistent pricing of both exotics and vanillas

    • Thus, the models are calibrated to vanillas

Sell Side Rates Options Business (Cont.)

  • All risk hedged out, where is the revenue from?

    • Think of zero delta ladder, portfolio PnL will be zero no matter how the market moves

    • Traders can still intentionally over/under hedge, taking directional risk, but there is in house delta limit as regulator is watching

    • Part of the revenue is from fees and bid ask spreads

  • The more exotic the product is, the higher the fees and bid ask spreads, and hence the revenue

    • Justified by the significant investment in a quant team of PhDs to build and maintain the model, the hardware, and limited market players

    • Only 4-5 banks have a working model to quote/trade all rates exotics

    • Even with a working model, sometimes trade from a client can be too risky for small banks to take in

    • The larger the book is, the more risk a bank can safely take

Option Pricing Basics

  • PV of an option can be computed by no-arbitrage argument, like many previous examples

  • But unlike previous no-arbitrage arguments, option pricing requires assumptions (models)

  • The simpliest option pricing model is the Binomial Option Pricing Model (BOPM)

BOPM Assumptions

  • We want to price an option on a stock trading at \(S\) currently

  • There are only two discrete times (one time step)

    • Today at \(t=0\),

    • Maturity of the option at \(t=1\)

  • At \(t=1\), the stock price can either go up to \(S_u\) or go down to \(S_d\) (two states)

  • Option payoff at \(t=1\) is \(C_u\) if the stock goes up and \(C_d\) if it goes down

    • If it is a call option then \(C_u = (S_u - K)^+\) and \(C_d = (S_d - K)^+\)

[20]:
# Single-step binomial tree visualization
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

fig, ax = plt.subplots(figsize=(5, 3))

# Node positions
t0_x, t0_y = 0, 0.5
t1_u_x, t1_u_y = 1, 0.75
t1_d_x, t1_d_y = 1, 0.25

# Draw edges (branches)
ax.plot([t0_x, t1_u_x], [t0_y, t1_u_y], 'b-', lw=2, label='Up move')
ax.plot([t0_x, t1_d_x], [t0_y, t1_d_y], 'r-', lw=2, label='Down move')

# Draw nodes
node_size = 400
ax.scatter([t0_x], [t0_y], s=node_size, c='lightblue', edgecolors='black', zorder=5, linewidths=2)
ax.scatter([t1_u_x], [t1_u_y], s=node_size, c='lightgreen', edgecolors='black', zorder=5, linewidths=2)
ax.scatter([t1_d_x], [t1_d_y], s=node_size, c='lightcoral', edgecolors='black', zorder=5, linewidths=2)

# Add labels
ax.text(t0_x, t0_y+0.12, r'$S$', fontsize=20, ha='center', va='center', fontweight='bold')
ax.text(t1_u_x, t1_u_y+0.12, r'$S_u$', fontsize=20, ha='center', va='center', fontweight='bold')
ax.text(t1_d_x, t1_d_y+0.12, r'$S_d$', fontsize=20, ha='center', va='center', fontweight='bold')

# Add probability labels on branches
ax.text(0.5, 0.65, r'$p$', fontsize=16, ha='center', va='bottom', color='blue', style='italic')
ax.text(0.5, 0.35, r'$1-p$', fontsize=16, ha='center', va='top', color='red', style='italic')

# Time labels
ax.text(t0_x, 0.15, r'$t=0$', fontsize=14, ha='center', va='top')
ax.text(t1_u_x, 0.15, r'$t=1$', fontsize=14, ha='center', va='top')

# Formatting
ax.set_xlim(-0.2, 1.3)
ax.set_ylim(0.2, 0.9)
ax.set_aspect('equal')
ax.axis('off')
ax.set_title('One-Step Binomial Tree', fontsize=16, fontweight='bold', pad=20)

plt.tight_layout()
plt.show()
_images/14_options_6_0.png

BOPM No-Arbitrage Argument

  • We set up a portfolio so that, at \(t=1\), the portfolio value replicates the option in both states

  • By no-arbitrage argument, the option price at \(t=0\) should equals the portfolio value at \(t=0\)

  • The portfolio setup at \(t=0\):

    • Buy \(h\) share of the stock at \(S\)

    • Deposit \(B\) dollars into the money market account (MMA)

  • Initial portfolio value is \(hS+B\)

  • At \(t=1\) there are two states

    • Stock position value goes up to \(hS_u\) and cash in MMA grows into \(BM\) dollars

    • Stock position value goes down to \(hS_d\) and cash in MMA grows into \(BM\) dollars

  • To replicate the option payoff, set \begin{align*} hS_u + BM &= C_u\\ hS_d + BM &= C_d \end{align*}

  • Solve for \(h\) and \(B\) and find the initial portfolio value, which should equal the option price

BOPM

  • We have the system of equations written in matrix form \begin{align*} \begin{pmatrix} S_u & M\\ S_d & M \end{pmatrix} \begin{pmatrix} h \\ B \end{pmatrix} = \begin{pmatrix} C_u \\ C_d \end{pmatrix} \end{align*}

  • The solution is \begin{align*} \begin{pmatrix} h \\ B \end{pmatrix} = \frac{1}{M(S_u - S_d)} \begin{pmatrix} M & -M\\ -S_d & S_u \end{pmatrix} \begin{pmatrix} C_u \\ C_d \end{pmatrix} \end{align*}

  • The option price is \(hS + B\), or \begin{align*} \begin{pmatrix} S & 1 \end{pmatrix} \begin{pmatrix} h \\ B \end{pmatrix} &= \frac{1}{M(S_u - S_d)} \begin{pmatrix} S & 1 \end{pmatrix} \begin{pmatrix} M & -M\\ -S_d & S_u \end{pmatrix} \begin{pmatrix} C_u \\ C_d \end{pmatrix}\\ &= \frac{1}{M} \begin{pmatrix} \frac{SM - S_d}{S_u - S_d} & \frac{S_u - SM}{S_u - S_d} \end{pmatrix} \begin{pmatrix} C_u \\ C_d \end{pmatrix}\\ &= \frac{1}{M} \left( \frac{SM - S_d}{S_u - S_d} C_u + \frac{S_u - SM}{S_u - S_d} C_d \right) \end{align*}

BOPM Discussion

  • PV of the option at \(t=0\):

    \[C = \frac{1}{M} \left( \frac{SM - S_d}{S_u - S_d} C_u + \frac{S_u - SM}{S_u - S_d} C_d \right),\]

    where \(1/M\) is the discount factor and

    \[\frac{SM - S_d}{S_u - S_d} + \frac{S_u - SM}{S_u - S_d} = 1,\]

    which allows us to see \(C\) as a discounted expectation of possible option payoff

  • Weighted average with weights sum to 1 is an expectation

  • We write

    \[\tilde p = \frac{SM - S_d}{S_u - S_d}, \qquad (1-\tilde p) = \frac{S_u - SM}{S_u - S_d},\]

    known as the risk neutral probability, different from the physical probability \((p, 1-p)\)

  • The precise statement is, \(C\) is a discounted expectation of possible option payoff under the risk neutral probability

BOPM Discussion (Cont.)

  • The physical probability \((p, 1-p)\) doesn’t go into option pricing

    • No matter how large \(p\) is (how likely the stock price will go up), the call option price doesn’t go up a bit in BOPM

    • Remember the option price we obtained is by a no-arbitrage argument. Quoting a different price will lead to an arbitrage opportunity

BOPM: Example

  • Consider an ATM call option in BOPM with \(S = K = 100\), \(K\) the strike price, and \(S_u = 105\), \(S_d = 95\), \(M=1.01\). Option payoff at \(t=1\) is \begin{align*} C_u &= (S_u - K)^+ = 5\\ C_d &= (S_d - K)^+ = 0 \end{align*}

  • PV of the option at \(t=0\) is \begin{align*} C &= \frac{1}{M} \left( \frac{SM - S_d}{S_u - S_d} C_u + \frac{S_u - SM}{S_u - S_d} C_d \right)\\ &= \frac{1}{1.01}\left( \frac{101 - 95}{105 - 95} \times 5 + \frac{105 - 101}{105 - 95} \times 0 \right) = \$ 2.970297 \end{align*}

BOPM: Example (Cont.)

  • One can compute the replicating portfolio as follows \begin{align*} \begin{pmatrix} h \\ B \end{pmatrix} &= \frac{1}{M(S_u - S_d)} \begin{pmatrix} M & -M\\ -S_d & S_u \end{pmatrix} \begin{pmatrix} C_u \\ C_d \end{pmatrix}\\ &= \frac{1}{1.01\times (105 - 95)} \begin{pmatrix} 1.01 & -1.01\\ -95 & 105 \end{pmatrix} \begin{pmatrix} 5 \\ 0 \end{pmatrix} = \begin{pmatrix} 0.5 \\ -47.0297 \end{pmatrix} \end{align*}

  • Buy \(0.5\) shares of the underlying and borrow \(\$47.0297\) in MMA at \(t=0\). The portfolio value at \(t=1\), in the cases the stock goes up and down, are \begin{align*} 0.5\times 105 - 47.0297\times 1.01 &= \$5,\\ 0.5\times 95 - 47.0297\times 1.01 &= \$0, \end{align*} respctively, which equal \(C_u\) and \(C_d\)

BOPM: Example (Cont..)

  • So far in the example, there is no physical probability \(p\) (because there is no need)

  • If an agent is confident the stock will go up (meaning the belief is the option price at \(t=1\) will be \(\$5\) with high probability \(p\)), and quotes \(C=\$4\) at today (\(t=0\)), how can you arbitrage?

  • Short sell the option to the agent to get \(\$4\) and spend \(\$2.970297\) to set up the replicating portfolio today. Your net cash inflow is \(4-2.970297 = \$1.029703\) at \(t=0\)

  • At \(t=1\), your obligation as an option writer (seller) is to pay the agent \(\$5\) if the stock goes up, and \(\$0\) if the stock goes down

  • But at \(t=1\), the replicating portfolio value is \(\$5\) if stock goes up and \(\$0\) if it goes down

  • In either case, you can liquidate the portfolio to fullfill your obligation

  • You are left with free cash inflow of \(\$1.029703\) at \(t=0\)

BOPM: Example (Cont…)

  • If the stock price did go up at \(t=1\) as expected by the agent, you pay the agent \(\$1\), as you sold the option at time \(t=0\) at the price \(\$4\) and buy it back at time \(t=1\) at the price \(C_u = \$5\)

  • But you still get to keep your risk free cash flow of \(\$1.029703\) at \(t=0\)

  • If you think this is a win-win situation as no one gets hurt, you are wrong

  • The agent could have made \(\$2\) by quoting the option at \(\$3\)

  • There is still room (\(3-2.970297 = \$0.029703\)) for arbitrage, and the market players will be happy to make the risk free profit

BOPM: Exercise

  • What’s the time zero PV of an ATM call option in BOPM with \(S = K = 100\), \(K\) the strike price, and \(S_u = 103\), \(S_d = 97\), \(M=1.01\)?

  • At \(t=0\), how many shares should you hold and how much money should you put in your MMA in order to set up a replicating portfolio?

Universal Option Pricing Formula

  • We’ve seen in BOPM that option price is a discounted expectation in the risk-neutral probability

  • This is true in general, regardless of the model (assumptions) used for the option pricing

  • Let \(X\) be any European payoff, a function of the underlying. Then the option price \(C\) is \begin{align*} C = M_0 \widetilde E[M_T^{-1} X] \end{align*}

  • An option pricing model specifies a distribution of the underlying (among other things) in the risk-neutral probability \(\widetilde P\)

  • Given the distribution, \(C\) is simply an integral

Change of Numeraire

  • The universal pricing formula \begin{align*} C = M_0 \widetilde E[M_T^{-1} X] \end{align*} is a special case of an even more general result

  • When we say \(S=\$100\) that means \(100\) USD, or \(100\) units of MMA

  • Any tradable asset can be used to denominate the underlying of the option

    • Examples are annuity and ZCB

    • “The underlying is trading at how many units of the annuity?”

    • The tradable asset used to denominate the underlying is known as the numeraire

    • Each numeraire is associated with a so-called equivalent martingle measure

    • The risk-neutral probability a special case of the equivalent martingle measure when using MMA as the numeraire

  • Let \(N_t\) be the numeraire used in option pricing, and the corresponding equivalent martingle measure is \(P^N\), then the time zero option price is \begin{align*} C &= N_0 E^N[N_T^{-1} X] \end{align*}

Change of Numeraire (Cont.)

  • The universal pricing formula \begin{align*} C = M_0 E^M[M_T^{-1} X] = N_0 E^N[N_T^{-1} X] \end{align*}

  • If you change a numeraire, you change the probability measure, and the distribution of the underlying

    • In fact, sometimes that’s the reaosn we change the numeraire: In the risk-neutral measure the distribution under some model is not known in closed form, but the distribution is known in closed form in a different measure so we can write the expectation as an integral

    • We will see example in SOFR caps and floors and swaptions pricing

  • An option pricing model can also specify a distribution of the underlying (among other things) in any equivalent martingle measure

SOFR Swaption

  • A swaption gives the holder the right, but not the obligation, to enter into a swap with a predetermined fixed rate (the strike) in the future

  • A 1y10y payer swaption with strike \(4\%\) is the right to enter into a 10y payer swap, with fixed rate \(4\%\), 1 year from now

    • 1y is the expiry, or maturity, of the swaption

    • 10y is the tenor

  • The end date of a 1y10y swaption will be 11y from now

  • Both parties are looking at the forward starting 10y swap with fixed rate \(4\%\), which starts 1y from now

  • If, at expiry, the spot starting 10y swap rate is higher than \(4\%\), say it’s \(5\%\), then the holder will exercise the option and enter into the payer swap

    • The holder will recieve floating coupons and pay \(4\%\) fixed coupons, at the end of every year, for the following 10 years

    • The holder then can enter into a spot starting receiver swap at \(5\%\), receiving \(5\%\) fixed coupons while paying floating

    • The net cash inflow is a \(1\%\) fixed coupon at the end of every year for 10y

  • If, at expiry, the spot starting 10y swap rate is lower than \(4\%\), then the option expires worthless

Forward Starting Swap PV Clean Form (Review)

  • Consider a tenor structure

    \[T_0 < T_1 < T_2 < \cdots < T_N, \qquad \tau_n = T_{n+1} - T_n\quad \forall n=0, 1, 2, \ldots, N-1,\]

    where \(\tau_n\) is fixed to be 1Y

  • The time-\(t\) PV of an \(N\)-year-long forward starting payer swap with fixed rate \(K\) is \begin{align*} &\sum_{n=0}^{N-1}\left(\tau_n P(t, T_{n+1})L(t, T_n, T_{n+1}) - \tau_n P(t, T_{n+1})K\right)\\ =& \left(\sum_{n=0}^{N-1}\tau_n P(t, T_{n+1})\right)\left(\frac{\sum_{n=0}^{N-1}\tau_n P(t, T_{n+1})L(t, T_n, T_{n+1})}{\sum_{n=0}^{N-1}\tau_n P(t, T_{n+1})} - K\right) \\\\ =& A(t)(S(t) - K) \end{align*}

  • Here \(K\) is the strike \(4\%\) in the previous example

  • The forward starting swap rate \(S(t)\) fixes at \(S(T_0)\) to become the spot starting swap rate (\(5\%\) in the previous example)

Swaption Payoff

  • As explained earlier, if \(S(T_0) > K\) then the holder will exercise the payer swaption and if not, the option expires worthless

  • If \(S(T_0) > K\), the holder will enter into the swap with a nonzero initial NPV

    \[A(T_0)(S(T_0)-K)\]
  • Thus the payer swaption payoff is

    \[X = A(T_0)(S(T_0)-K)^+\]

    which is a function of the underlying \(S(T_0)\)

  • This payoff makes annuity \(A(t)\) the natural choice of the numeraire for swaption pricing

Swaption Pricing

  • Payer swaption payoff

    \[X = A(T_0)(S(T_0)-K)^+\]
  • Payer swaption PV at time \(t\) \begin{align*} C &= A(0)E^A[A(T_0)^{-1} X]\\ &= A(0)E^A[(S(T_0)-K)^+] \end{align*}

  • From here we will need to specify a model, including a distribution of \(S(T_0)\)

  • The simpliest choice is the normal distribution \(N(0, \sigma^2T_0)\), which is the Black Normal model

SOFR Caps and Floors

  • Consider a tenor structure

    \[T_0 < T_1 < T_2 < \cdots < T_N, \qquad \tau_n = T_{n+1} - T_n\quad \forall n=0, 1, 2, \ldots, N-1,\]

    where \(\tau_n\) is now fixed to be 3M

  • A 3M SOFR cap with strike \(K\) pays the buyer a series of cash flows

    \[\tau_n(L(T_{n+1}, T_{n}, T_{n+1}) - K)^+ \quad\text{ at }\quad T_{n+1}, \quad \forall n=0, 1, 2, \ldots, N-1,\]

    where \(L(T_{n+1}, T_{n}, T_{n+1})\) is the SOFR term rate

  • Similarly, a 3M SOFR floor with strike \(K\) pays the buyer a series of cash flows

    \[\tau_n(K - L(T_{n+1}, T_{n}, T_{n+1}))^+ \quad\text{ at }\quad T_{n+1} \quad \forall n=0, 1, 2, \ldots, N-1\]

Why the Name

  • Imagine you have liabilities to pay floating coupon \(\tau_n L(T_{n+1}, T_n, T_{n+1})\) every quarter (3M)

  • The payment to be made is unknown until the end of every coupon period, \(T_{n+1}\)

  • If you buy a cap with \(K = 6\%\), when the term rate fixes to be lower than \(6\%\), from the cap you recieve nothing:

    \[\tau_n(L(T_{n+1}, T_n, T_{n+1}) - K)^+ = 0\]
  • Given the liability, you will pay a lower than \(6\%\) coupon rate: \(\tau_n L(T_{n+1}, T_n, T_{n+1})\)

  • But if the forward rate fixed to be larger than \(6\%\), from the cap you recieve

    \[\tau_n(L(T_{n+1}, T_n, T_{n+1}) - K)^+ = \tau_n(L(T_{n+1}, T_n, T_{n+1}) - K)\]
  • Given the liability, you still pay a the coupon \(\tau_n L(T_{n+1}, T_n, T_{n+1})\)

  • Overall you pay \(\tau_n K\) which is at \(6\%\) annual coupon rate

  • If you buy a \(6\%\) cap, your payment is capped at \(6\%\) annual rate

Why the Name – Floor