Skip to content
All library documents

Risk-Neutral Probabilities in a Binomial Option Model

Article Quant Q&A · Author: user11823918

Summary

The discussion examines a four-step binomial valuation of a European put on a stock that moves by a fixed amount each month, with a continuously compounded risk-free rate. The proposed method recursively discounts the risk-neutral expected option payoff at each step. Its computed result differs from a textbook answer, prompting a review of the probability formula.

The correction is that the risk-neutral probability uses the stock price grown at the risk-free rate over the time step, less the down-state price, divided by the gap between up- and down-state prices. The original calculation instead discounted the current stock price in the numerator, reversing the risk-free growth relationship. This illustrates a basic consistency condition in a binomial model. The exchange also notes a Python division detail, but the central issue is the probability formula; the example assumes the specified fixed price moves and does not discuss model calibration.

Key ideas

  • A binomial option value can be calculated by discounting risk-neutral expected payoffs recursively.
  • The risk-neutral probability numerator uses the current stock value grown at the risk-free rate.
  • Using a discounted current stock value instead can produce an incorrect probability and option price.
  • The model assumes fixed up and down price moves over each time step.

Tags

Full text
# Pricing of European put option with binomial model


# Pricing of European put option with binomial model












This is an exercise from Mark Joshi's book (exercise 3.6):

A stock is worth 100. Each month its value increases or decreases by precisely 10. The riskless bond is worth $e^{rt}$ at time t years with r equal to 5% Price a four-month European put option struck at 110.

At the end of the book, Joshi provides the solution 13.06. Unfortunately that's not what I find: I get 15.22. Since Joshi does not show his computation, I am wondering where the difference comes from. I use the following Python script for the computation:

```
import math

def get_risk_neutral_prob(S, S1, S2, r, delta_t):
    Sp = max(S1, S2)
    Sm = min(S1,S2)
    if Sm == Sp:
        return 1/2
    return (math.exp(-r*delta_t) * S - Sm)/(Sp-Sm)

def payoff(S):
    return max(110-S, 0)
r = 0.05
delta_t = 1/12

def get_price(S, N):
    if N == 0:
        return payoff(S)
    S1 = S+10
    S2 = S-10
    p = get_risk_neutral_prob(S, S1, S2, r, delta_t)
    return math.exp(-r*delta_t) * (p * get_price(S1, N-1) + (1-p) * get_price(S2,N-1))

print(get_price(100,4))
```

As you can see, my computation is straightforward. I first compute the risk-neutral probability, and then the discounted expected value of the payoff, recursively.

For one month, I did it by hand and my result, 10.372, agrees with what the script tells me.

## Answer by user11823918 (score 1)

https://quant.stackexchange.com/a/47463

Answer was provided by Chris Taylor: the formula for the risk-neutral probability was off by a minus sign, it should be $$ p = \frac{e^{r \Delta t} S - S_m}{S_p - S_m} $$

## Answer by DOMiguel (score 0)

https://quant.stackexchange.com/a/49272

I cannot comment (low reputation) so I add an answer. In Python, you should write:

`delta_t = 1.0/12`

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.