public void TestCalibrateATMSABRModel() { // Override some variable set in the SetUp method. _assetPrice = 1352; _exerciseTime = 3.0m; // Initialise information required specifically for an ATM // calibration.. decimal atmVolatility = 0.2884m; decimal nu = 1.23498996m; decimal rho = -0.2724164m; _calibrationEngine = new SABRCalibrationEngine(_engineHandle, _calibrationSettings, nu, rho, atmVolatility, _assetPrice, _exerciseTime); _calibrationEngine.CalibrateATMSABRModel(); // Test: calibration status. Assert.IsTrue(_calibrationEngine.IsSABRModelCalibrated); // Test: SABR parameter alpha. _expected = 0.65869806m; _actual = _calibrationEngine.GetSABRParameters.Alpha; Assert.AreEqual(decimal.ToDouble(_expected), decimal.ToDouble(_actual), decimal.ToDouble(_tolerance)); // Test: SABR parameter beta. _expected = 0.85m; _actual = _calibrationEngine.GetSABRParameters.Beta; Assert.AreEqual(_expected, _actual); // Test: SABR parameter nu. _expected = 1.23498996m; _actual = _calibrationEngine.GetSABRParameters.Nu; Assert.AreEqual(_expected, _actual); // Test: SABR parameter rho. _expected = -0.2724164m; _actual = _calibrationEngine.GetSABRParameters.Rho; Assert.AreEqual(_expected, _actual); }
/// <summary> /// Create an ATM calibration engine. Such an engine is designed for a single value /// </summary> /// <param name="settings">The settings object to use</param> /// <param name="calibrationEngineId">The id of this engine</param> /// <param name="nu">Nu value</param> /// <param name="rho">Rho value</param> /// <param name="atmVolatility">The ATM volatility</param> /// <param name="assetPrice">Asset Price to use</param> /// <param name="optionExpiry">The ATM pointer</param> /// <param name="assetCode">The ATM identifiier (if used)</param> private static SortedDictionary <SABRKey, SABRCalibrationEngine> BuildEngineCollection(SABRCalibrationSettings settings, string calibrationEngineId, decimal nu, decimal rho, decimal atmVolatility, decimal assetPrice, string optionExpiry, string assetCode) { // basic setup var engineCollection = new SortedDictionary <SABRKey, SABRCalibrationEngine>(new SABRKey()); var exerciseTime = (decimal)SABRHelper.GenerateDayValue(optionExpiry, 365.0d); // Create a new instance of the engine var calibrationEngine = new SABRCalibrationEngine(calibrationEngineId, settings, nu, rho, atmVolatility, assetPrice, exerciseTime); // Calibrate the engine calibrationEngine.CalibrateATMSABRModel(); // Add the new engine to our collection SABRKey key = assetCode != null ? new SABRKey(optionExpiry, assetCode) : new SABRKey(optionExpiry); engineCollection.Add(key, calibrationEngine); return(engineCollection); }