Question: # Homework: Change this python code to R code from math import exp, sqrt, log from scipy.stats import norm import datetime def find_vol(target_value, call_put, S,

# Homework: Change this python code to R code

from math import exp, sqrt, log

from scipy.stats import norm

import datetime

def find_vol(target_value, call_put, S, K, T, r):

MAX_ITERATIONS = 100

PRECISION = 1.0e-5

m = 1.0

sigma = 0.5

for i in range(0, MAX_ITERATIONS):

price = bs_price(call_put, S, K, T, r, sigma)

vega = bs_vega(call_put, S, K, T, r, sigma)

price = price

diff = target_value - price # our root

print (i, sigma, diff)

if (abs(diff) < PRECISION):

return sigma

sigma = sigma + m*diff/vega # f(x) / f'(x)

# value wasn't found, return best guess so far

return sigma

n = norm.pdf

N = norm.cdf

def bs_price(cp_flag,S,K,T,r,v,q=0.0):

F = S*exp((r-q)*T)

d1 = (log(F/K)+(v*v/2.)*T)/(v*sqrt(T))

d2 = d1-v*sqrt(T)

if cp_flag == 'c':

price = exp(-r*T)*(F*N(d1)-K*N(d2))

else:

price = exp(-r*T)*(K*N(-d2)-F*N(-d1))

return price

def bs_vega(cp_flag,S,K,T,r,v,q=0.0):

F = S*exp((r-q)*T)

d1 = (log(F/K)+(v*v/2.)*T)/(v*sqrt(T))

return exp(-r*T)* F * sqrt(T)*n(d1)

V_market = 17.5

K = 585

T = (datetime.date(2014,10,18) - datetime.date(2014,9,8)).days / 365.

S = 586.08

r = 0.0002

cp = 'c' # call option

implied_vol = find_vol(V_market, cp, S, K, T, r)

print ('Implied vol: %.2f%%' % (implied_vol * 100))

print ('Market price = %.2f' % V_market)

print ('Model price = %.2f' % bs_price(cp, S, K, T, r, implied_vol))

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!