Esempio n. 1
0
        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);
        }