예제 #1
0
class TestBlackScholesAgainstBenchmarkValues(unittest.TestCase):
    
    def setUp(self):
        self.tdi = TestDataIterator()

    def test_prices(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S,K,t,r,sigma = row['S'],row['K'],row['t'],row['R'],row['v']
            self.assertTrue(
                almost_equal(
                    black_scholes('c', S, K, t, r, sigma), row['bs_call'], epsilon=.000001
                )
            )
            self.assertTrue(
                almost_equal(
                    black_scholes('p', S, K, t, r, sigma), row['bs_put'], epsilon=.000001
                )
            )
            
    
    def test_analytical_delta(self):
        
        while self.tdi.has_next():
            row = self.tdi.next_row()
            S,K,t,r,sigma = row['S'],row['K'],row['t'],row['R'],row['v']
            self.assertTrue(
                almost_equal(
                    analytical.delta('c', S, K, t, r, sigma), row['CD'], epsilon=.000001
                )
            )
            self.assertTrue(
                almost_equal(
                    analytical.delta('p', S, K, t, r, sigma), row['PD'], epsilon=.000001
                )
            )
        
    def _test_analytical_theta(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S,K,t,r,sigma = row['S'],row['K'],row['t'],row['R'],row['v']
            #self.assertTrue(
            #    almost_equal(
            print        analytical.theta('c', S, K, t, r, sigma), row['CT']#, epsilon=.001
            #    )
            #)
            #self.assertTrue(
            #    almost_equal(
            print         analytical.theta('p', S, K, t, r, sigma), row['PT'] #, epsilon=.000001
            #    )
            #)
            
            
    def test_analytical_gamma(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S,K,t,r,sigma = row['S'],row['K'],row['t'],row['R'],row['v']
            self.assertTrue(
                almost_equal(
                    analytical.gamma('c', S, K, t, r, sigma), row['CG'], epsilon=.000001
                )
            )
            self.assertTrue(
                almost_equal(
                     analytical.gamma('p', S, K, t, r, sigma), row['PG'], epsilon=.000001
                )
            )
            
    def test_analytical_vega(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S,K,t,r,sigma = row['S'],row['K'],row['t'],row['R'],row['v']
            self.assertTrue(
                almost_equal(
                    analytical.vega('c', S, K, t, r, sigma), row['CV']*.01, epsilon=.01
                )
            )
            self.assertTrue(
                almost_equal(
                    analytical.vega('p', S, K, t, r, sigma), row['PV']*.01, epsilon=.01
                )
            )
            
            
    def test_analytical_rho(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S,K,t,r,sigma = row['S'],row['K'],row['t'],row['R'],row['v']
            self.assertTrue(
                almost_equal(
                    analytical.rho('c', S, K, t, r, sigma), row['CR']*.01, epsilon=.000000001
                )
            )
            self.assertTrue(
                almost_equal(
                    analytical.rho('p', S, K, t, r, sigma), row['PR']*.01, epsilon=.000000001
                )
            )
    
    
    def test_implied_volatility(self):
        
        while self.tdi.has_next():
            
            row = self.tdi.next_row()
            S,K,t,r,sigma = row['S'],row['K'],row['t'],row['R'],row['v']
            C,P = black_scholes('c', S, K, t, r, sigma), black_scholes('p', S, K, t, r, sigma)
            try:
                iv = implied_volatility(C, S, K, t, r, 'c')
                self.assertTrue(almost_equal(sigma, iv, epsilon = .0001))
            except:
                print 'could not calculate iv for ', C, S, K, t, r, 'c' 

            iv = implied_volatility(P, S, K, t, r, 'p')
            self.assertTrue(almost_equal(sigma, iv, epsilon = .001) or (iv ==0.0))
예제 #2
0
class TestBlackScholesAgainstBenchmarkValues(unittest.TestCase):
    def setUp(self):
        self.tdi = TestDataIterator()

    def test_prices(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S, K, t, r, sigma = row['S'], row['K'], row['t'], row['R'], row[
                'v']
            self.assertTrue(
                almost_equal(black_scholes('c', S, K, t, r, sigma),
                             row['bs_call'],
                             epsilon=.000001))
            self.assertTrue(
                almost_equal(black_scholes('p', S, K, t, r, sigma),
                             row['bs_put'],
                             epsilon=.000001))

    def test_analytical_delta(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S, K, t, r, sigma = row['S'], row['K'], row['t'], row['R'], row[
                'v']
            self.assertTrue(
                almost_equal(analytical.delta('c', S, K, t, r, sigma),
                             row['CD'],
                             epsilon=.000001))
            self.assertTrue(
                almost_equal(analytical.delta('p', S, K, t, r, sigma),
                             row['PD'],
                             epsilon=.000001))

    def _test_analytical_theta(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S, K, t, r, sigma = row['S'], row['K'], row['t'], row['R'], row[
                'v']
            #self.assertTrue(
            #    almost_equal(
            print(analytical.theta('c', S, K, t, r, sigma),
                  row['CT'])  #, epsilon=.001
            #    )
            #)
            #self.assertTrue(
            #    almost_equal(
            print(analytical.theta('p', S, K, t, r, sigma),
                  row['PT'])  #, epsilon=.000001
            #    )
            #)

    def test_analytical_gamma(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S, K, t, r, sigma = row['S'], row['K'], row['t'], row['R'], row[
                'v']
            self.assertTrue(
                almost_equal(analytical.gamma('c', S, K, t, r, sigma),
                             row['CG'],
                             epsilon=.000001))
            self.assertTrue(
                almost_equal(analytical.gamma('p', S, K, t, r, sigma),
                             row['PG'],
                             epsilon=.000001))

    def test_analytical_vega(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S, K, t, r, sigma = row['S'], row['K'], row['t'], row['R'], row[
                'v']
            self.assertTrue(
                almost_equal(analytical.vega('c', S, K, t, r, sigma),
                             row['CV'] * .01,
                             epsilon=.01))
            self.assertTrue(
                almost_equal(analytical.vega('p', S, K, t, r, sigma),
                             row['PV'] * .01,
                             epsilon=.01))

    def test_analytical_rho(self):

        while self.tdi.has_next():
            row = self.tdi.next_row()
            S, K, t, r, sigma = row['S'], row['K'], row['t'], row['R'], row[
                'v']
            self.assertTrue(
                almost_equal(analytical.rho('c', S, K, t, r, sigma),
                             row['CR'] * .01,
                             epsilon=.000000001))
            self.assertTrue(
                almost_equal(analytical.rho('p', S, K, t, r, sigma),
                             row['PR'] * .01,
                             epsilon=.000000001))

    def test_implied_volatility(self):

        while self.tdi.has_next():

            row = self.tdi.next_row()
            S, K, t, r, sigma = row['S'], row['K'], row['t'], row['R'], row[
                'v']
            C, P = black_scholes('c', S, K, t, r,
                                 sigma), black_scholes('p', S, K, t, r, sigma)
            try:
                iv = implied_volatility(C, S, K, t, r, 'c')
                self.assertTrue(almost_equal(sigma, iv, epsilon=.0001))
            except:
                print('could not calculate iv for ', C, S, K, t, r, 'c')

            iv = implied_volatility(P, S, K, t, r, 'p')
            self.assertTrue(
                almost_equal(sigma, iv, epsilon=.001) or (iv == 0.0))
예제 #3
0
 def setUp(self):
     self.tdi = TestDataIterator()
예제 #4
0
 def setUp(self):
     self.tdi = TestDataIterator()