def __call__(self, strike, t, r, q, S0, chf_ln_st): sim_strikes, call_prices = carr_madan_fft_call_pricer( self.N, self.d_u, self.alpha, r, t, S0, q, chf_ln_st.set_type('chf')) ffn_prices = spline_fitting(sim_strikes, call_prices, self.spline_order)(strike) return ffn_prices
def test_carr_madan_fft_call_pricer_black_shole(self): N = 2 ** 15 d_u = 0.01 alpha = 1 S0 = 100 t = 1 r = 0.05 q = 0 sigma = 0.3 strike, call_prices = carr_madan_fft_call_pricer(N, d_u, alpha, r, t, S0, q, BlackScholes(sigma).set_type('chf')) ffn_pricer = spline_fitting(strike, call_prices, 2) exp_res = 19.6974 res = ffn_pricer(90) self.assertAlmostEqual(exp_res, res, 4)
def test_carr_madan_fft_vg(self): N = 2 ** 15 d_u = 0.01 alpha = 1 S0 = 100 t = 1 / 12 r = 0.1 q = 0 sigma = 0.12 theta = -0.14 v = 0.2 strike, call_prices = carr_madan_fft_call_pricer(N, d_u, alpha, r, t, S0, q, VarianceGamma(theta, v, sigma).set_type('chf')) ffn_pricer = spline_fitting(strike, call_prices, 2) exp_res = 10.8289 res = ffn_pricer(90) self.assertAlmostEqual(exp_res, res, 4)
def test_carr_madan_fft_heston(self): N = 2 ** 15 d_u = 0.01 alpha = 1 S0 = 100 t = 0.5 k = 2 r = 0.03 q = 0 sigma = 0.5 theta = 0.04 V0 = 0.04 rho = -0.7 strike, call_prices = carr_madan_fft_call_pricer(N, d_u, alpha, r, t, S0, q, Heston(V0, theta, k, sigma, rho).set_type('chf')) ffn_pricer = spline_fitting(strike, call_prices, 2) exp_res = 13.2023 res = ffn_pricer(90) self.assertAlmostEqual(exp_res, res, 4)