コード例 #1
0
        public void Task_2_2_3()
        {
            // Variance Process Values
            double Kappa = 1.5768;
            double Theta = 0.0398;
            double Sigma = 0.5751;
            double V0    = 0.0175;
            double Rho   = -0.5711;

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

            // Option Params
            double     StrikePrice = 100;
            PayoffType Type        = PayoffType.Call;
            double     Maturity    = 3;

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

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

            EuropeanOption euOption =
                new EuropeanOption(StrikePrice, Type, Maturity);

            EuropeanOptionFormula euFormula =
                new EuropeanOptionFormula(hestonModel, euOption);

            Assert.AreEqual(15.4793, euFormula.Price(), 1e-4);
        }
コード例 #2
0
 /// <summary>
 /// Price a European option in the Heston model using the Heston formula. This should be accurate to 5 decimal places
 /// </summary>
 /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
 /// <param name="europeanOption">Object implementing IEuropeanOption interface, containing the option parameters.</param>
 /// <returns>Option price</returns>
 public static double HestonEuropeanOptionPrice(IHestonModelParameters parameters, IEuropeanOption europeanOption)
 {
     try
     {
         // Create European Option Formula object
         EuropeanOptionFormula euFormula = new EuropeanOptionFormula((HestonModelParameters)parameters, (EuropeanOption)europeanOption);
         return(euFormula.Price());
     }
     catch (Exception e)
     {
         throw e;
     }
 }
コード例 #3
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);
        }