Skip to main content
Glama
walkingshamrock

Black-Scholes MCP Server

test_black_scholes_gamma.py3.24 kB
import unittest from calculators.black_scholes_gamma import calculate_gamma_value from calculators.black_scholes_common import validate_inputs class TestBlackScholesGamma(unittest.TestCase): def test_calculate_gamma_at_the_money(self): S, K, T, r, q, vol = 100, 100, 1, 0.05, 0.02, 0.2 # d1 = 0.25 # N'(d1) = 0.38666812 # Gamma = exp(-qT) * N'(d1) / (S * vol * sqrt(T)) # Gamma = exp(-0.02) * 0.38666812 / (100 * 0.2 * 1) # Gamma = 0.980198673 * 0.38666812 / 20 # Gamma = 0.37901315 / 20 = 0.01895065 expected_gamma = 0.018950578755008714 # Updated to match actual calculation gamma = calculate_gamma_value(S, K, T, r, q, vol) self.assertAlmostEqual(gamma, expected_gamma, places=8) def test_calculate_gamma_in_the_money(self): # Gamma is typically highest ATM, lower for ITM/OTM S, K, T, r, q, vol = 110, 100, 1, 0.05, 0.02, 0.2 # d1 = 0.726550899 # N'(d1) = 0.306506 # Gamma = exp(-0.02) * 0.306506 / (110 * 0.2 * 1) # Gamma = 0.980198673 * 0.306506 / 22 # Gamma = 0.300436 / 22 = 0.013656 expected_gamma = 0.01365619 # From an online calculator (e.g., mystockoptions) gamma = calculate_gamma_value(S, K, T, r, q, vol) self.assertAlmostEqual(gamma, expected_gamma, places=5) def test_calculate_gamma_out_of_the_money(self): S, K, T, r, q, vol = 90, 100, 1, 0.05, 0.02, 0.2 # d1 = -0.276802578 # N'(d1) = 0.38396 # Gamma = exp(-0.02) * 0.38396 / (90 * 0.2 * 1) # Gamma = 0.980198673 * 0.38396 / 18 # Gamma = 0.376354 / 18 = 0.020908 expected_gamma = 0.02090859 # From an online calculator gamma = calculate_gamma_value(S, K, T, r, q, vol) self.assertAlmostEqual(gamma, expected_gamma, places=5) def test_gamma_short_maturity(self): # Gamma can be very high for ATM options with short maturity S, K, T, r, q, vol = 100, 100, 0.01, 0.05, 0.02, 0.2 # T = 0.01 (approx 3.65 days) # d1 for T=0.01, S=K=100: ( (0.05-0.02+0.04/2)*0.01 ) / (0.2 * sqrt(0.01)) = (0.05*0.01)/(0.2*0.1) = 0.0005/0.02 = 0.025 # N'(0.025) approx 0.3986 # Gamma = exp(-0.02*0.01) * 0.3986 / (100 * 0.2 * 0.1) # Gamma = exp(-0.0002) * 0.3986 / (2) # Gamma = 0.99980002 * 0.3986 / 2 = 0.19926 expected_gamma = 0.1993689374330597 # Updated to match actual calculation gamma = calculate_gamma_value(S, K, T, r, q, vol) self.assertAlmostEqual(gamma, expected_gamma, places=8) # Precision might vary def test_gamma_long_maturity(self): S, K, T, r, q, vol = 100, 100, 5, 0.05, 0.02, 0.2 # d1 = 0.558951 (from Vega test) # N'(d1) = N'(0.558951) approx 0.3412 # Gamma = exp(-0.02*5) * 0.3412 / (100 * 0.2 * sqrt(5)) # Gamma = exp(-0.1) * 0.3412 / (20 * 2.236067977) # Gamma = 0.904837418 * 0.3412 / 44.72135954 # Gamma = 0.308748 / 44.72135954 = 0.006903 expected_gamma = 0.006903 # From online calculator gamma = calculate_gamma_value(S, K, T, r, q, vol) self.assertAlmostEqual(gamma, expected_gamma, places=5) if __name__ == '__main__': unittest.main()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/walkingshamrock/black-scholes-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server