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)$ ?

  • $\begingroup$ By 60p probably 60 pence is meant, so 60% of one currency unit. $\endgroup$ – Bob Jansen Jan 18 '17 at 13:34
  • $\begingroup$ Thank you, you are right because the currency is the pound $\endgroup$ – Al Bundy Jan 18 '17 at 13:36
  • $\begingroup$ @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 ... $\endgroup$ – Al Bundy Jan 18 '17 at 14:30
  • $\begingroup$ 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). $\endgroup$ – 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[0]

It outputs

implied rate = 0.145974327185

Which is rounded to 14.50% in your case.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.