Single-Period Binomial Option Pricing

Table of Contents

1. Overview

The theory and mechanics of option valuation in complete markets can be understood through the simple one period binomial option pricing model. Extending the valuation to more real-world settings is then just and exercise in mathematics, but the idea doesn't change. Additionally, if you understand valuation in this simple setting, you will understand how options interact with other financial markets—why we trade a VIX index for example.

2. Complete Markets

The idea of a complete market is that we can replicate any security in the market through trading in other securities.

  • For example, a market with a risk-free bond, a stock, and an option on that stock is complete if we can create an option through trading in the bond and the stock.
  • The actual option is a 'redundant' security.
  • Moreover, if the market is complete, then the value of the option is simply the cost of recreating it with the bond and the stock. So we don't value the option per se, we create something that is exactly the same as the option and note its cost to create.

3. Arbitrage

Could the option price be any different than the value of recreating it? No. If it were this would afford an arbitrage. If the option cost more than the cost to create it, we could sell the option, create it, and net the difference. A similar arbitrage obtains if the replication cost is above the option price.

4. Binomial Option Valuation

We start option valuation with the one-period binomial method. If you understand this, you will understand everything of importance with respect to option valuation. Beyond this, is simply applying mathematics to make the argument work in more realistic settings. The underlying economic argument is the same.

Say we have the following securities:

One-year zero-coupon risk-free bond with 5% yield.
Stock priced at $100 today. The stock will either be $110 or $90 in one year.
Call option on the stock struck at $105 with a 1 year tenor. The option will either be worth $5 or $0 in 1 year.
Put option on the stock struck at $105 with a 1 year tenor. The option will either be worth $0 or $15 in 1 year.

5. Bond and Stock Replicating an Option

First, we will use the bond and the stock to create a portfolio which pays the same as the option in both states of the world—that is we will replicate the option.

5.1. Call Option

Replicating portfolio:

Security Cash Flow Today
Sell $90 Face Value Zero-Coupon Bond (5% coupon) $90/(1 + 0.05) = $85.71
Buy one share of stock -$100
Total -$100 + $85.71 = -$14.29

This portfolio costs us $100 - $85.71 = $14.29 to create. In one year the portfolio will pay $20 in the up-state (the stock is $110), and $0 in the down state (the stock is $90). The option pays $5 in the up-state and $0 in the down-state.

Thus, the replicating portfolio we created is exactly 4 options, and therefore the cost to create the portfolio must be 4 times the cost of a single option. This gives us the option's value:

\[\frac{14.29}{4} = $3.57\]

If the market price is not $3.57, can you create an arbitrage?

5.2. Put Option

Replicating portfolio:

Security Cash Flow Today
Buy $110 Face Value Zero-Coupon Bond (5% coupon) -$110/(1 + 0.05) = $104.762
Sell short one share of stock +$100
Total +$100 - $104.762 = -$4.762

This portfolio costs us $4.762 to create. In one year the portfolio will pay $0 in the up-state (the stock is $110), and $20 in the down state (the stock is $90). The option pays $0 in the up-state and $15 in the down-state.

Thus, the replicating portfolio we created is exactly \(\frac{20}{15} = 1.3333\) options, and therefore the cost to create the portfolio must be 1.3333 times the cost of a single option. This gives us the option's value:

\[\frac{4.762}{1.3333} = $3.5716\]

Note the value of the call and put will not always be the same!!

If the market price is not $3.57, can you create an arbitrage?

6. Option and Stock Replicating a Bond

Now, we will create a portfolio of the option and stock which pays the same as the bond in both states of the world.

6.1. Call Option

First calculate the call option's \(\Delta\). \(\Delta\) is defined as the amount that the option will change if the stock increases by $1. In this case we have:

\[\Delta = \frac{C_{up} - C_{down}}{S_{up} - S_{down}} = \frac{5 - 0}{110 - 90} = \frac{5}{20} = \frac{1}{4}\]

Replicating portfolio:

Security Cash Flow
Sell 1 call option with $105 strike (exp. in 1 year) +\(C_0\)
Buy \(\Delta\) (which is 1/4 here) shares of stock -$25
Total \(C_0 - 25\)

So, at time 0 we have a cash flow of \(C_0 - 25\), where \(C_0\) is the price of the call option. At time 1, the replicating portfolio will pay:

  • up-state: \(\frac{110}{4} - 5 = 22.50\)
  • down-state: \(\frac{90}{4} - 0 = 22.50\)

So no matter what happens, the replicating portfolio will pay $22.50 in one year. This is a risk-free zero-coupon bond, and therefore the price today is \(\frac{22.50}{(1+0.05)} = 21.43\). So we have:

\[C_0 - 25 = -21.43 \Rightarrow C_0 = 3.57\]

This is exactly the same call option value we got using the first method.

Again, if the market price is not $3.57, can you create an arbitrage?

6.2. Put Option

\[\Delta = \frac{P_{up} - P_{down}}{S_{up} - S_{down}} = \frac{0 - 15}{110 - 90} = \frac{-15}{20} = -\frac{3}{4}\]

Security Cash Flow
Buy 1 put option with $105 strike (exp. in 1 year) -\(P_0\)
Sell \(\Delta\) (here 3/4) shares of stock +75
Total \(-P_0 + 75\)

So, at time 0 we have a cash flow of \(75 - P_0\), where \(P_0\) is the price of the put option. At time 1, the replicating portfolio will pay:

  • up-state: -\(110(\frac{3}{4}) + 0 = -82.50\)
  • down-state: -\(90(\frac{3}{4}) + 15 = -82.50\)

So no matter what happens, the replicating portfolio will pay $82.50 in one year. This is a risk-free zero-coupon bond, and therefore the price today is \(\frac{82.50}{(1+0.05)} = 78.5714\). So we have:

\[75 - P_0 = 78.5714 \Rightarrow P_0 = 3.57\]

Which is the same put value as we calculated above. Again, if the put traded for a different value you could create an arbitrage with the portfolios we used in this section.

7. We Didn't Need Probabilities!!

Notice we didn't need the probabilities of an increase or decrease in the stock price. If we had these we could calculate the expected return in the stock, and option pricing would be much easier.

8. Interactive App (in R)

Need to push to s server or translate this into javascript.

```{r message=FALSE, echo=FALSE, warning=FALSE, eval = FALSE}
# library(fOptions)
sidebarLayout(
sidebarPanel(
  sliderInput(inputId = "stockToday", label = "Stock Price Today", min = 91, max = 109, step = 1, value = 100),
  sliderInput(inputId = "strike", label = "Strike Price", min = 91, max = 109, step = 1, value = 105),
  sliderInput(inputId = "stockUp", label = "Stock Price in Up-State", min = 110, max = 120, step = 1, value = 110),
  sliderInput(inputId = "stockDn", label = "Stock Price in Down-State", min = 80, max = 90, step = 1, value = 90),
 sliderInput(inputId = "rf", label = "Risk-Free Rate", min = .01, max = .05, step = .01, value = .01)
),

mainPanel(
    renderVisNetwork({
      ## calculate value of option using first approach ----
      ## we'll first try using the fOptions package 
      ## scratch that -- use the fOptions for the binomial tree -- calculate by hand below ----

  if((input$rf + 1) * input$stockToday > input$stockUp) {
      visNetwork(nodes = data.frame(id = 1, label = "Why bother with the option when you can have free money!", shape = "diamond", color = "darkred"))
  } else {
      ### calculating by replicating a bond

      optionUp <- input$stockUp - input$strike
      optionDn <- max(input$stockDn - input$strike, 0)

      delta <- (optionUp - optionDn) / (input$stockUp - input$stockDn)

      ## replicating port: sell call and buy delta shares of stock.  At time 1 it is worth:
      portVal1 <- input$stockUp * delta - optionUp
      portVal0 <- portVal1 / (1 + input$rf)

      callValue <- input$stockToday * delta - portVal0


  nodes <- data.frame(id = 1:3,
    label = c(paste0("Call Today = $", round(callValue, 2)), paste0("Call Up State = $", round(optionUp, 2)),  paste0("Call Down State = $", round(optionDn, 2))),
  shape = c("circle", "diamond", "diamond"),
  group = c("C", "D", "D"),
  color = c("orange", "grey", "grey")
)
edges <- data.frame(from = c(1,1), to = c(2,3),
                    arrows = c("to", "to"))
visNetwork(nodes, edges, height = "1000px", width = "100%")
  }

    })
)
  # }
)
```

9. The Importance of Zeros

Note above we used zero-coupon bonds. Zeros are important for derivative valuation because we know exactly what our return will be when we hold them (unlike with coupon bonds).

10. Optional YouTube Videos

10.1. Binomial Option Pricing

10.2. Arbitrage Mispriced Options in the Binomial Model

11. Chalkboard

Author: Matt Brigida, Ph.D.

Created: 2023-10-17 Tue 14:53

Validate