Source code for vollib.tests.test_black_scholes_greeks

import numpy
import unittest

from vollib.black_scholes import black_scholes
from vollib.black_scholes import python_black_scholes

from vollib.black_scholes.greeks.analytical import delta
from vollib.black_scholes.greeks.analytical import gamma
from vollib.black_scholes.greeks.analytical import theta
from vollib.black_scholes.greeks.analytical import vega
from vollib.black_scholes.greeks.analytical import rho

from vollib.black_scholes.greeks.numerical import delta as ndelta
from vollib.black_scholes.greeks.numerical import gamma as ngamma
from vollib.black_scholes.greeks.numerical import theta as ntheta
from vollib.black_scholes.greeks.numerical import vega as nvega
from vollib.black_scholes.greeks.numerical import rho as nrho


epsilon = .01
epsilon_for_theta = 0.1

[docs]class testGreeks(unittest.TestCase):
[docs] def test_prices(self): S = 100.0 for flag in ['c','p']: for K in numpy.linspace(20,200,10): for r in numpy.linspace(0,0.2,10): for sigma in numpy.linspace(0.1,0.5,10): for t in numpy.linspace(0.01,2,10): for i in range(5): val1 = black_scholes(flag, S, K, t, r, sigma) val2 = python_black_scholes(flag, S, K, t, r, sigma) results_match = abs(val1-val2)<epsilon if not results_match: print 'price mismatch:', flag, val1, val2 self.assertTrue(results_match)
[docs] def test_theta(self): S = 100.0 for flag in ['c','p']: for K in numpy.linspace(20,200,10): for r in numpy.linspace(0,0.2,10): for sigma in numpy.linspace(0.1,0.5,10): for t in numpy.linspace(0.01,2,10): for i in range(5): val1 = theta(flag, S, K, t, r, sigma) val2 = ntheta(flag, S, K, t, r, sigma) results_match = abs(val1-val2)<epsilon_for_theta if not results_match: print 'theta mismatch:', flag, val1, val2 self.assertTrue(results_match)
[docs] def test_delta(self): S = 100.0 for flag in ['c','p']: for K in numpy.linspace(20,200,10): for r in numpy.linspace(0,0.2,10): for sigma in numpy.linspace(0.1,0.5,10): for t in numpy.linspace(0.01,2,10): for i in range(5): val1 = delta(flag, S, K, t, r, sigma) val2 = ndelta(flag, S, K, t, r, sigma) results_match = abs(val1-val2)<epsilon if not results_match: print flag, val1, val2 self.assertTrue(results_match)
[docs] def test_gamma(self): S = 100.0 for flag in ['c','p']: for K in numpy.linspace(20,200,10): for r in numpy.linspace(0,0.2,10): for sigma in numpy.linspace(0.1,0.5,10): for t in numpy.linspace(0.01,2,10): for i in range(5): val1 = gamma(flag, S, K, t, r, sigma) val2 = ngamma(flag, S, K, t, r, sigma) results_match = abs(val1-val2)<epsilon if not results_match: print flag, val1, val2 self.assertTrue(results_match)
[docs] def test_vega(self): S = 100.0 for flag in ['c','p']: for K in numpy.linspace(20,200,10): for r in numpy.linspace(0,0.2,10): for sigma in numpy.linspace(0.1,0.5,10): for t in numpy.linspace(0.01,2,10): for i in range(5): val1 = vega(flag, S, K, t, r, sigma) val2 = nvega(flag, S, K, t, r, sigma) results_match = abs(val1-val2)<epsilon if not results_match: print flag, val1, val2 self.assertTrue(results_match)
[docs] def test_rho(self): S = 100.0 for flag in ['c','p']: for K in numpy.linspace(20,200,10): for r in numpy.linspace(0,0.2,10): for sigma in numpy.linspace(0.1,0.5,10): for t in numpy.linspace(0.01,2,10): for i in range(5): val1 = rho(flag, S, K, t, r, sigma) val2 = nrho(flag, S, K, t, r, sigma) results_match = abs(val1-val2)<epsilon if not results_match: print flag, val1, val2 self.assertTrue(results_match)
if __name__ == '__main__': unittest.main()