Suppose a stock priced at $100 will either go up by 10% or down by 10%.
The value of delta shares less the value of the debt is:
The risk-neutral probability of "up" is
$$ p = \frac{r_f - r_d}{r_u - r_d} = \frac{0.03 - (-0.0476)}{0.05 - (-0.0476)} = 0.795$$The call evolves as
Discounting the expected call value (using prob of up = 0.795) at the risk-free rate yields
Price a call with a strike of 95.
Price a six-month call option using a two-period model.
import numpy as np
from scipy.stats import norm
def BS_call(S, K, T, sigma, r, q=0):
d1 = np.log(S/K) + (r-q+0.5*sigma**2)*T
d1 /= sigma*np.sqrt(T)
d2 = d1 - sigma*np.sqrt(T)
N1 = norm.cdf(d1)
N2 = norm.cdf(d2)
return np.exp(-q*T)*S*N1 - np.exp(-r*T)*K*N2
def BS_put(S, K, T, sigma, r, q=0):
d1 = np.log(S/K) + (r-q+0.5*sigma**2)*T
d1 /= sigma*np.sqrt(T)
d2 = d1 - sigma*np.sqrt(T)
N1 = norm.cdf(-d1)
N2 = norm.cdf(-d2)
return np.exp(-r*T)*K*N2 - np.exp(-q*T)*S*N1
S, K, T, sigma, r = 100, 95, 0.5, 0.4, 0.05
print(f"Value of call option is ${BS_call(S, K, T, sigma, r):.2f}")
print(f"Value of put option is ${BS_put(S, K, T, sigma, r):.2f}")
Value of call option is $14.89 Value of put option is $7.55