示例#1
0
    def test_black_shole_3(self):
        N = 16
        L = 10
        S0 = 100
        t = 0.1
        r = 0.1
        q = 0
        sigma = 0.25

        strike = 120
        c1, c2, c4 = cumulants_from_mgf(general_log_moneyness_mgf,
                                        strike,
                                        BlackScholes(sigma).set_type('mgf'),
                                        t=t,
                                        r=r,
                                        q=q,
                                        S0=S0)
        intv_a, intv_b = interval_a_and_b(c1, c2, c4, L)
        print(intv_a, intv_b)
        exp_res = 0.044
        res = cosin_vanilla_call(N, strike, intv_a, intv_b, t, r, q, S0,
                                 BlackScholes(sigma).set_type('chf'))
        self.assertAlmostEqual(exp_res, res, 3)
        N = 64
        res = cosin_vanilla_call(N, strike, intv_a, intv_b, t, r, q, S0,
                                 BlackScholes(sigma).set_type('chf'))
        exp_res = 0.045
        self.assertAlmostEqual(exp_res, res, 3)
示例#2
0
 def test_heston(self):
     N = 100
     L = 10
     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 = 90
     c1, c2, c4 = cumulants_from_mgf(general_log_moneyness_mgf,
                                     strike,
                                     Heston(V0, theta, k, sigma,
                                            rho).set_type('mgf'),
                                     t=t,
                                     r=r,
                                     q=q,
                                     S0=S0)
     intv_a, intv_b = interval_a_and_b(c1, c2, c4, L)
     print(intv_a, intv_b)
     exp_res = 13.2023
     res = cosin_vanilla_call(
         N, strike, intv_a, intv_b, t, r, q, S0,
         Heston(V0, theta, k, sigma, rho).set_type('chf'))
     self.assertAlmostEqual(exp_res, res, 3)
示例#3
0
 def test_vg(self):
     N = 150
     L = 10
     S0 = 100
     t = 1 / 12
     r = 0.1
     q = 0
     sigma = 0.12
     theta = -0.14
     v = 0.2
     strike = 90
     c1, c2, c4 = cumulants_from_mgf(general_log_moneyness_mgf,
                                     strike,
                                     VarianceGamma(theta, v,
                                                   sigma).set_type('mgf'),
                                     t=t,
                                     r=r,
                                     q=q,
                                     S0=S0)
     intv_a, intv_b = interval_a_and_b(c1, c2, c4, L)
     print(intv_a, intv_b)
     res = cosin_vanilla_call(
         N, strike, intv_a, intv_b, t, r, q, S0,
         VarianceGamma(theta, v, sigma).set_type('chf'))
     exp_res = 10.8289
     self.assertAlmostEqual(exp_res, res, 4)
示例#4
0
 def _single_cal_price(self, strike, t, r, q, S0, chf_ln_st):
     a, b = self.calc_integral_interval(strike, self.L, t, r, q, S0,
                                        chf_ln_st)
     call_price = cosin_vanilla_call(self.N,
                                     strike=strike,
                                     intv_a=a,
                                     intv_b=b,
                                     t=t,
                                     r=r,
                                     q=q,
                                     S0=S0,
                                     chf_ln_st=chf_ln_st.set_type('chf'))
     return call_price