# simple question on rate finding under B&S

Under a Black-Scholes model. I have to find the risk free rate interest to within $0.5\%$ p.a. for a european call option on a stock with : $T=1$ year $K=6$, $S_0=5.50$, $\sigma=20\%$. The book says the option is prices at $60p$ (does it means Option$=S_0*0.60$ ?).

The answer is $14.5\%$, but i don't understand how to get it since we do not have all the elements for interpolating $\mathcal N(d)$ ?

• By 60p probably 60 pence is meant, so 60% of one currency unit. – Bob Jansen Jan 18 '17 at 13:34
• Thank you, you are right because the currency is the pound – Al Bundy Jan 18 '17 at 13:36
• @BobJansen do you understand what does mean : "find the risk free rate interest to within $0.5\%$ p.a." ? what is $0.5\%$ ? I do not understand how to plug it into the model ... – Al Bundy Jan 18 '17 at 14:30
• You are required to find the annual interest rate approximately, to within an 0.5% error. So if the correct answer is 3.712% and you answer is 3.5% or 4.0% such an answer would be considered close enough. (p.a. = per annum). – noob2 Jan 18 '17 at 17:43

Here is the general solution to your problem of finding the implied rate in the Black-Scholes model. It is actually quite similar to finding the implied volatility. First notice that the European plain vanilla rho

\begin{equation} \frac{\partial C_0}{\partial r} = K T e^{-r T} \mathcal{N} \left( d_- \right), \end{equation}

is strictly positive (except for in edge cases). Next note that

\begin{equation} \lim_{r \downarrow -\infty} C_0 = 0, \qquad \lim_{r \uparrow \infty} C_0 = S_0. \end{equation}

Thus, when your initial call price is inbetween the above two bounds, then you can employ a root-search to find the unique solution for the implied interest-rate. Typical approaches are the bisection algorithm or the the Newton-Raphson algorithm.

Here is a simply Python script:

import numpy as np
import scipy.stats as st
import scipy.optimize as op

def blackScholesCall(maturity, strike, spot, rate, volatility):
discount = np.exp(-rate * maturity)
forward = spot / discount
totalVolatility = volatility * np.sqrt(maturity)
dPlus = np.log(forward / strike) / totalVolatility + 0.5 * totalVolatility * totalVolatility
dMinus = dPlus - totalVolatility
return discount * (forward * st.norm.cdf(dPlus) - strike * st.norm.cdf(dMinus))

solution = op.root(lambda rate: blackScholesCall(1.0, 6.0, 5.5, rate, 0.2) - 0.6, 0.0)
print "implied rate = %s" % solution.x


It outputs

implied rate = 0.145974327185


Which is rounded to 14.50% in your case.