Esempio n. 1
0
        /// <summary>
        /// Method for calibrating the heston model.
        /// </summary>
        /// <param name="guessModelParameters">Object implementing IHestonModelParameters interface containing the risk-free rate, initial stock price
        /// and initial guess parameters to be used in the calibration.</param>
        /// <param name="referenceData">A collection of objects implementing IOptionMarketData<IEuropeanOption> interface. These should contain the reference data used for calibration.</param>
        /// <param name="calibrationSettings">An object implementing ICalibrationSettings interface.</param>
        /// <returns>Object implementing IHestonCalibrationResult interface which contains calibrated model parameters and additional diagnostic information</returns>
        public static IHestonCalibrationResult CalibrateHestonParameters(IHestonModelParameters guessModelParameters, IEnumerable <IOptionMarketData <IEuropeanOption> > referenceData, ICalibrationSettings calibrationSettings)
        {
            try
            {
                // Copy Linked List
                LinkedList <OptionMarketData <EuropeanOption> > data =
                    new LinkedList <OptionMarketData <EuropeanOption> >();
                foreach (OptionMarketData <IEuropeanOption> marketData in referenceData)
                {
                    OptionMarketData <EuropeanOption> newMarketData =
                        new OptionMarketData <EuropeanOption>((EuropeanOption)marketData.Option, marketData.Price);
                    data.AddLast(newMarketData);
                }
                // Heston Calibrator
                HestonCalibrator calibrator =
                    new HestonCalibrator((HestonModelParameters)guessModelParameters,
                                         data,
                                         (CalibrationSettings)calibrationSettings);
                // Calibration procedure
                calibrator.Calibrate();
                // Retrieve outcome
                double             error   = 0;
                CalibrationOutcome outcome = CalibrationOutcome.NotStarted;
                calibrator.GetCalibrationStatus(ref outcome, ref error);
                HestonModelParameters parameters = calibrator.GetCalibratedModel();
                // Form calibration result object
                HestonCalibrationResult result = new HestonCalibrationResult(error, outcome, parameters);

                return(result);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Esempio n. 2
0
        public void PriceOption()
        {
            // le mock de la volatilé,
            Mock <Volatility> volMock = new Mock <Volatility>();

            volMock.Setup(x => x.Vol()).Returns(0.25); // utilsation des linq lambda expression.
            var maturity   = DateTime.Parse("01/5/2019");
            var paramDate  = DateTime.Now;
            var option     = new OptionInstrument(100, maturity);
            var optionData = new OptionMarketData(120, paramDate, 0.05, volMock.Object.Vol());
            var pricer     = new OptionPricer(option, optionData);
            var prix       = 0.0;

            Assert.AreEqual(prix, 0);
        }
Esempio n. 3
0
        public void Task_2_5()
        {
            // Variance Process Values
            double Kappa = 1.5768;
            double Theta = 0.398;
            double Sigma = 0.5751;
            double V0    = 0.0175;
            double Rho   = -0.5711;

            // Heston Model Params
            double InitialStockPrice = 100;
            double RiskFreeRate      = 0.025;

            // Callibration Settings
            double accuracy = 0.001;
            int    maxIter  = 1000;

            VarianceProcessParameters varParams =
                new VarianceProcessParameters(Kappa, Theta, Sigma, V0, Rho);

            HestonModelParameters hestonModel =
                new HestonModelParameters(InitialStockPrice, RiskFreeRate, varParams);

            CalibrationSettings calibrationSettings = new CalibrationSettings(accuracy, maxIter);

            // Market Data
            LinkedList <OptionMarketData <EuropeanOption> > observedOptions =
                new LinkedList <OptionMarketData <EuropeanOption> >();

            EuropeanOption eu1 = new EuropeanOption(80, PayoffType.Call, 1);
            OptionMarketData <EuropeanOption> marketData1 =
                new OptionMarketData <EuropeanOption>(eu1, 25.72);

            observedOptions.AddLast(marketData1);

            EuropeanOption eu2 = new EuropeanOption(90, PayoffType.Call, 1);
            OptionMarketData <EuropeanOption> marketData2 =
                new OptionMarketData <EuropeanOption>(eu2, 18.93);

            observedOptions.AddLast(marketData2);

            EuropeanOption eu3 = new EuropeanOption(80, PayoffType.Call, 2);
            OptionMarketData <EuropeanOption> marketData3 =
                new OptionMarketData <EuropeanOption>(eu3, 30.49);

            observedOptions.AddLast(marketData3);

            EuropeanOption eu4 = new EuropeanOption(100, PayoffType.Call, 2);
            OptionMarketData <EuropeanOption> marketData4 =
                new OptionMarketData <EuropeanOption>(eu4, 19.36);

            observedOptions.AddLast(marketData4);

            EuropeanOption eu5 = new EuropeanOption(100, PayoffType.Call, 1.5);
            OptionMarketData <EuropeanOption> marketData5 =
                new OptionMarketData <EuropeanOption>(eu5, 16.58);

            observedOptions.AddLast(marketData5);

            // Heston Calibrator
            HestonCalibrator calibrator = new HestonCalibrator(hestonModel, observedOptions, calibrationSettings);

            calibrator.Calibrate();

            double             error   = 0;
            CalibrationOutcome outcome = CalibrationOutcome.NotStarted;

            calibrator.GetCalibrationStatus(ref outcome, ref error);
            Console.WriteLine("Calibration outcome: {0} and error: {1}", outcome, error);
        }
Esempio n. 4
0
        private List<OptionMarketData> GetOptionsMarketData(string filePath)
        {
            List<OptionMarketData> resultList = new List<OptionMarketData>();
            string line;

            System.IO.StreamReader file = new System.IO.StreamReader(filePath);
            while ((line = file.ReadLine()) != null)
            {
                string[] tokens = line.Split(';');

                string symbol = tokens[0];
                OptionType optionType = (tokens[1].Equals("C")) ? OptionType.Call : OptionType.Put;
                double strike = Double.Parse(tokens[2], CultureInfo.InvariantCulture);
                DateTime maturity = DateTime.ParseExact(tokens[3], "yyyyMMdd", null);
                OptionInfo optionInfo = new OptionInfo(symbol, string.Empty, optionType, strike, maturity);

                double? bid = null;
                double? bidSize = null;
                double? ask = null;
                double? askSize = null;

                if (tokens[4] != string.Empty) bid = Double.Parse(tokens[4], CultureInfo.InvariantCulture);
                if (tokens[5] != string.Empty) bidSize = Double.Parse(tokens[5], CultureInfo.InvariantCulture);
                if (tokens[6] != string.Empty) ask = Double.Parse(tokens[6], CultureInfo.InvariantCulture);
                if (tokens[7] != string.Empty) askSize = Double.Parse(tokens[7], CultureInfo.InvariantCulture);

                OrderBook orderBook = new OrderBook(symbol, bid, ask, bidSize, askSize);

                OptionMarketData marketData = new OptionMarketData(optionInfo, orderBook);

                resultList.Add(marketData);
            }

            file.Close();

            return resultList;
        }
Esempio n. 5
0
        public static void Task6()
        {
            Console.WriteLine("********Task 6*********");
            // Variance Process Values
            double Kappa = 1.5768;
            double Theta = 0.398;
            double Sigma = 0.5751;
            double V0    = 0.0175;
            double Rho   = -0.5711;

            // Heston Model Params
            double InitialStockPrice = 100;
            double RiskFreeRate      = 0.025;

            // Callibration Settings
            double accuracy = 1.0e-3;
            int    maxIter  = 1000;

            VarianceProcessParameters varParams =
                new VarianceProcessParameters(Kappa, Theta, Sigma, V0, Rho);

            HestonModelParameters hestonModel =
                new HestonModelParameters(InitialStockPrice, RiskFreeRate, varParams);

            HestonModelParameters guess =
                new HestonModelParameters(InitialStockPrice, RiskFreeRate,
                                          new VarianceProcessParameters(1.55, 0.88, 1.5999, 0.4, -0.55));

            CalibrationSettings calibrationSettings = new CalibrationSettings(accuracy, maxIter);

            // Market Data
            LinkedList <IOptionMarketData <IEuropeanOption> > observedOptions =
                new LinkedList <IOptionMarketData <IEuropeanOption> >();

            EuropeanOption        eu1     = new EuropeanOption(80, PayoffType.Call, 1);
            EuropeanOptionFormula eu1Form = new EuropeanOptionFormula(hestonModel, eu1);
            OptionMarketData <IEuropeanOption> marketData1 =
                new OptionMarketData <IEuropeanOption>(eu1, eu1Form.Price());

            observedOptions.AddLast(marketData1);

            EuropeanOption        eu2     = new EuropeanOption(90, PayoffType.Call, 1);
            EuropeanOptionFormula eu2Form = new EuropeanOptionFormula(hestonModel, eu2);
            OptionMarketData <IEuropeanOption> marketData2 =
                new OptionMarketData <IEuropeanOption>(eu2, eu2Form.Price());

            observedOptions.AddLast(marketData2);

            EuropeanOption        eu3     = new EuropeanOption(80, PayoffType.Call, 2);
            EuropeanOptionFormula eu3Form = new EuropeanOptionFormula(hestonModel, eu3);
            OptionMarketData <IEuropeanOption> marketData3 =
                new OptionMarketData <IEuropeanOption>(eu3, eu3Form.Price());

            observedOptions.AddLast(marketData3);

            EuropeanOption        eu4     = new EuropeanOption(100, PayoffType.Call, 2);
            EuropeanOptionFormula eu4Form = new EuropeanOptionFormula(hestonModel, eu4);
            OptionMarketData <IEuropeanOption> marketData4 =
                new OptionMarketData <IEuropeanOption>(eu4, eu4Form.Price());

            observedOptions.AddLast(marketData4);

            EuropeanOption        eu5     = new EuropeanOption(100, PayoffType.Call, 1.5);
            EuropeanOptionFormula eu5Form = new EuropeanOptionFormula(hestonModel, eu5);
            OptionMarketData <IEuropeanOption> marketData5 =
                new OptionMarketData <IEuropeanOption>(eu5, eu5Form.Price());

            observedOptions.AddLast(marketData5);

            HestonCalibrationResult result;

            result = (HestonCalibrationResult)
                     Heston.CalibrateHestonParameters(guess, observedOptions, calibrationSettings);

            Console.WriteLine("Calibration outcome: {0} and error: {1}", result.MinimizerStatus, result.PricingError);
        }
Esempio n. 6
0
        public static void Task5()
        {
            // Variance Process Values
            double Kappa = 1.5768;
            double Theta = 0.398;
            double Sigma = 0.5751;
            double V0    = 1.0175;
            double Rho   = -0.5711;

            // Heston Model Params
            double InitialStockPrice = 100;
            double RiskFreeRate      = 0.025;

            // Callibration Settings
            double accuracy = 0.001;
            int    maxIter  = 1000;

            VarianceProcessParameters varParams =
                new VarianceProcessParameters(Kappa, Theta, Sigma, V0, Rho);

            HestonModelParameters hestonModel =
                new HestonModelParameters(InitialStockPrice, RiskFreeRate, varParams);

            CalibrationSettings calibrationSettings = new CalibrationSettings(accuracy, maxIter);

            // Market Data
            LinkedList <IOptionMarketData <IEuropeanOption> > observedOptions =
                new LinkedList <IOptionMarketData <IEuropeanOption> >();

            EuropeanOption eu1 = new EuropeanOption(80, PayoffType.Call, 1);
            OptionMarketData <IEuropeanOption> marketData1 =
                new OptionMarketData <IEuropeanOption>(eu1, 25.72);

            observedOptions.AddLast(marketData1);

            EuropeanOption eu2 = new EuropeanOption(90, PayoffType.Call, 1);
            OptionMarketData <IEuropeanOption> marketData2 =
                new OptionMarketData <IEuropeanOption>(eu2, 18.93);

            observedOptions.AddLast(marketData2);

            EuropeanOption eu3 = new EuropeanOption(80, PayoffType.Call, 2);
            OptionMarketData <IEuropeanOption> marketData3 =
                new OptionMarketData <IEuropeanOption>(eu3, 30.49);

            observedOptions.AddLast(marketData3);

            EuropeanOption eu4 = new EuropeanOption(100, PayoffType.Call, 2);
            OptionMarketData <IEuropeanOption> marketData4 =
                new OptionMarketData <IEuropeanOption>(eu4, 19.36);

            observedOptions.AddLast(marketData4);

            EuropeanOption eu5 = new EuropeanOption(100, PayoffType.Call, 1.5);
            OptionMarketData <IEuropeanOption> marketData5 =
                new OptionMarketData <IEuropeanOption>(eu5, 16.58);

            observedOptions.AddLast(marketData5);

            HestonCalibrationResult result;

            result = (HestonCalibrationResult)
                     Heston.CalibrateHestonParameters(hestonModel, observedOptions, calibrationSettings);

            Console.WriteLine("Calibration outcome: {0} and error: {1}", result.MinimizerStatus, result.PricingError);
        }
Esempio n. 7
0
        /// <summary>
        /// Add new market data.
        /// </summary>
        /// <param name="euOption">European option.</param>
        /// <param name="price">European option Price</param>
        public void AddObservedOption(EuropeanOption euOption, double price)
        {
            OptionMarketData <EuropeanOption> newMarketOption = new OptionMarketData <EuropeanOption>(euOption, price);

            marketOptionsList.AddLast(newMarketOption);
        }