Arbitrage


Kevin Crotty
BUSI 448: Investments

Where are we?

Last time:

  • Treasury market basics
  • Term structure
  • Spot rates

Today:

  • Arbitrage

Arbitrage and pricing

No-arbitrage Pricing

  • Arbitrage is a trade that generates positive profits in some state of the world and generates losses in no state of the world.
  • Bootstrapping is based on the principle of no-arbitrage pricing.
    • First, assume a pricing relationship between two or more assets
    • Second, try to construct an arbitrage from that relation
    • If you can, then the assumed relationship cannot be true (or you should trade!)

Law of One Price

  • Two assets that generate the same cash flows should have the same price.
  • We can try to form a replicating portfolio with the same cash flows as the security we are trying to value.

Example #1

Example

Suppose we have a 1-year bond with cash flows of $15 in 6 months and $115 in one year that costs $125.

  • What is the spot-rate implied price of this bond?

  • Can we replicate the cash flows of this bond with a portfolio of A, B, C, D?

From last time: Bonds A, B, C, D

Bond Price Coupon Rate Maturity Face Value
A 97.5 0% 0.5 100
B 95 0% 1.0 100
C 955 2.5% 1.5 1,000
D 1,000 5.75% 2 1,000

Replicating portfolio

  • We only need to use bonds A and B since the target bond is a one-year bond.
  • Let \(x_A\) denote the amount invested in bond \(A\) and \(x_B\) be the amount invested in bond B.
  • We want to solve the following system of equations (one for each time period with payments for the 1-year target bond):

\[ x_A \cdot A_1 + x_B \cdot B_1 = 15 \]

\[ x_A \cdot A_2 + x_B \cdot B_2 = 115 \]

Replicating portfolio

\[ x_A \cdot 100 + x_B \cdot 0 = 15 \]

\[ x_A \cdot 0 + x_B \cdot 100 = 115 \]

Solving for \(x_A\) and \(x_B\):

\[ x_A = \frac{15}{100} = 0.15\]

\[ x_B = \frac{115}{100} = 1.15\]

Market price versus replicating portfolio value

  • The replicating portfolio has a value of $123.875
  • The actual 1-year bond price is $125.
  • Can we construct an arbitrage trade?

The arbitrage trade

  • Sell the (15,115) 1-year bond
  • Buy the replicating portfolio
  • For each unit of the 1-year bond:
    • buy 0.15 of A
    • buy 1.15 of B
  • Profit of $1.125 per $100 face in 1-year bond

Example #2

Replication with coupon bonds

What did we do above?

  • We solved a system of equations to create a portfolio of bonds that each mature at different periods in order to replicate the cash flows of our ‘target’ bond.
  • Can we form replicating portfolios using coupon bonds as well?

YES!

Example (2-yr annual bond)

  • Suppose the price of the 2-year bond from last time was actually $1,050. Let’s call this bond V.
    • 2-year annual bond with face of 1,000 and coupon rate of 10%.
  • Can we construct an arbitrage trade?
  • Again, the key is to construct a portfolio of bonds A, B, C, and D that replicates the CFs of the 2-year annual bond.

Replicating the two-year bond CFs

\[ \begin{align*} x_A \cdot A_1 + x_B \cdot B_1 + x_C \cdot C_1 + x_D \cdot D_1 &= V_1 \\ x_A \cdot A_2 + x_B \cdot B_2 + x_C \cdot C_2 + x_D \cdot D_2 &= V_2 \\ x_A \cdot A_3 + x_B \cdot B_3 + x_C \cdot C_3 + x_D \cdot D_3 &= V_3 \\ x_A \cdot A_4 + x_B \cdot B_4 + x_C \cdot C_4 + x_D \cdot D_4 &= V_4 \end{align*} \]

Plugging in the cash flows for each bond

\[ \begin{matrix} x_A \cdot 100 &+& x_B \cdot 0 &+& x_C \cdot 12.5 &+& x_D \cdot 28.75 &=& 0 \\ x_A \cdot 0 &+& x_B \cdot 100 &+& x_C \cdot 12.5 &+& x_D \cdot 28.75 &=& 100 \\ x_A \cdot 0 &+& x_B \cdot 0 &+& x_C \cdot 1012.5 &+& x_D \cdot 28.75 &=& 0 \\ x_A \cdot 0 &+& x_B \cdot 0 &+& x_C \cdot 0 &+& x_D \cdot 1028.75 &=& 1100 \\ \end{matrix} \]

Solving for the position sizes \(x\)

  • The intuition is the same as the two-period bond, but the math is more annoying.
  • Option #1: grind through the algebra
    • what if there are more than 4 periods?!?
  • Option #2: let python solve it for us with matrices

Replicating portfolio w/ matrices

The system of equations above can be written in matrix notation as:

\[ \mathbf{x} \cdot \mathbf{CF} = \mathbf{cf} \]

  • \(\mathbf{x} = \begin{bmatrix} x_A & x_B & x_C & x_D \end{bmatrix}\)

  • \(\mathbf{CF} = \begin{bmatrix} A_1 & A_2 & A_3 & A_4 \\ B_1 & B_2 & B_3 & B_4 \\ C_1 & C_2 & C_3 & C_4 \\ D_1 & D_2 & D_3 & D_4 \\ \end{bmatrix}\)

  • \(\mathbf{cf}= \begin{bmatrix} V_1 & V_2 & V_3 & V_4 \\ \end{bmatrix}\)

Solving for the position sizes \(x\) in python

We can solve for \(\mathbf{x}\) in the system of equations

\[ \mathbf{x} \cdot \mathbf{CF} = \mathbf{cf} \]

in python using cf @ np.linalg.inv(CF)!

Market price versus replicating portfolio value

  • The replicating portfolio has a value of $1,076.82
    • look familiar?
  • The actual 2-year bond price is $1,050.
  • Can we construct an arbitrage trade?

The arbitrage trade

  • Buy the 2-year bond
  • Sell the replicating portfolio
  • For every unit of the 2-year bond:
    • buy 0.304 of A
    • sell 0.696 of B
    • buy 0.030 of C
    • sell 1.069 of D
  • Profit of $26.82 for each unit of 2-year bond bought

For next time: Markets, Trading, & Adverse Selection