コード例 #1
0
ファイル: Heston.cs プロジェクト: ytycmx/Heston-model
        /// <summary>
        /// Price a European option in the Heston model using the Monte-Carlo method. Accuracy will depend on number of time steps and samples
        /// </summary>
        /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
        /// <param name="europeanOption">Object implementing IEuropeanOption interface, containing the option parameters.</param>
        /// <param name="monteCarloSimulationSettings">An object implementing IMonteCarloSettings object and containing simulation settings.</param>
        /// <returns>Option price</returns>
        public static double HestonEuropeanOptionPriceMC(IHestonModelParameters parameters,
                                                         IEuropeanOption europeanOption,
                                                         IMonteCarloSettings monteCarloSimulationSettings)
        {
            HestonMC p1 = new HestonMC();

            if (europeanOption.Type == PayoffType.Call)
            {
                return(p1.CalculateEuropeanCallOptionPrice(parameters.InitialStockPrice,
                                                           europeanOption.StrikePrice,
                                                           parameters.RiskFreeRate,
                                                           europeanOption.Maturity,
                                                           parameters.VarianceParameters.V0,
                                                           parameters.VarianceParameters.Kappa,
                                                           parameters.VarianceParameters.Theta,
                                                           parameters.VarianceParameters.Rho,
                                                           parameters.VarianceParameters.Sigma,
                                                           monteCarloSimulationSettings.NumberOfTimeSteps,
                                                           monteCarloSimulationSettings.NumberOfTrials));
            }
            else
            {
                return(p1.CalculatePutOptionPrice(parameters.InitialStockPrice,
                                                  europeanOption.StrikePrice,
                                                  parameters.RiskFreeRate,
                                                  europeanOption.Maturity,
                                                  parameters.VarianceParameters.V0,
                                                  parameters.VarianceParameters.Kappa,
                                                  parameters.VarianceParameters.Theta,
                                                  parameters.VarianceParameters.Rho,
                                                  parameters.VarianceParameters.Sigma,
                                                  monteCarloSimulationSettings.NumberOfTimeSteps,
                                                  monteCarloSimulationSettings.NumberOfTrials));
            }
        }
コード例 #2
0
ファイル: Heston.cs プロジェクト: ytycmx/Heston-model
        /// <summary>
        /// Price a lookback option in the Heston model using the
        /// a Monte-Carlo method. Accuracy will depend on number of time steps and samples </summary>
        /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
        /// <param name="maturity">An object implementing IOption interface and containing option's maturity</param>
        /// <param name="monteCarloSimulationSettings">An object implementing IMonteCarloSettings object and containing simulation settings.</param>
        /// <returns>Option price</returns>
        public static double HestonLookbackOptionPriceMC(IHestonModelParameters parameters,
                                                         IOption maturity,
                                                         IMonteCarloSettings monteCarloSimulationSettings)
        {
            HestonLookbackoption w1 = new HestonLookbackoption();

            return(w1.CalculateLookbackCallOptionPrice(parameters.InitialStockPrice,
                                                       parameters.RiskFreeRate,
                                                       maturity.Maturity,
                                                       parameters.VarianceParameters.V0,
                                                       parameters.VarianceParameters.Kappa,
                                                       parameters.VarianceParameters.Theta,
                                                       parameters.VarianceParameters.Rho,
                                                       parameters.VarianceParameters.Sigma,
                                                       monteCarloSimulationSettings.NumberOfTimeSteps,
                                                       monteCarloSimulationSettings.NumberOfTrials));
        }
コード例 #3
0
ファイル: Heston.cs プロジェクト: ytycmx/Heston-model
        /// <summary>
        /// Price a Asian option in the Heston model using the
        /// Monte-Carlo method. Accuracy will depend on number of time steps and samples</summary>
        /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
        /// <param name="asianOption">Object implementing IAsian interface, containing the option parameters.</param>
        /// <param name="monteCarloSimulationSettings">An object implementing IMonteCarloSettings object and containing simulation settings.</param>
        /// <returns>Option price</returns>
        public static double HestonAsianOptionPriceMC(IHestonModelParameters parameters,
                                                      IAsianOption asianOption,
                                                      IMonteCarloSettings monteCarloSimulationSettings)
        {
            HestonAsianoption v1 = new HestonAsianoption();

            if (asianOption.Type == PayoffType.Call)
            {
                return(v1.CalculateAsianCallOptionPrice(parameters.InitialStockPrice,
                                                        asianOption.StrikePrice,
                                                        parameters.RiskFreeRate,
                                                        asianOption.MonitoringTimes,
                                                        asianOption.Maturity,
                                                        parameters.VarianceParameters.V0,
                                                        parameters.VarianceParameters.Kappa,
                                                        parameters.VarianceParameters.Theta,
                                                        parameters.VarianceParameters.Rho,
                                                        parameters.VarianceParameters.Sigma,
                                                        monteCarloSimulationSettings.NumberOfTimeSteps,
                                                        monteCarloSimulationSettings.NumberOfTrials));
            }
            else
            {
                return(v1.CalculateAsianPutOptionPrice(parameters.InitialStockPrice,
                                                       asianOption.StrikePrice,
                                                       parameters.RiskFreeRate,
                                                       asianOption.MonitoringTimes,
                                                       asianOption.Maturity,
                                                       parameters.VarianceParameters.V0,
                                                       parameters.VarianceParameters.Kappa,
                                                       parameters.VarianceParameters.Theta,
                                                       parameters.VarianceParameters.Rho,
                                                       parameters.VarianceParameters.Sigma,
                                                       monteCarloSimulationSettings.NumberOfTimeSteps,
                                                       monteCarloSimulationSettings.NumberOfTrials));
            }
        }
コード例 #4
0
        /// <summary>
        /// Price a European option in the Heston model using the Monte-Carlo method. Accuracy will depend on number of time steps and samples
        /// </summary>
        /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
        /// <param name="europeanOption">Object implementing IEuropeanOption interface, containing the option parameters.</param>
        /// <param name="monteCarloSimulationSettings">An object implementing IMonteCarloSettings object and containing simulation settings.</param>
        /// <returns>Option price</returns>
        public static double HestonEuropeanOptionPriceMC(IHestonModelParameters parameters, IEuropeanOption europeanOption, IMonteCarloSettings monteCarloSimulationSettings)
        {
            try
            {
                // Create Monte Carlo EU option object
                EuropeanOptionMC euOptionMC = new EuropeanOptionMC((HestonModelParameters)parameters,
                                                                   (MonteCarloSettings)monteCarloSimulationSettings, (EuropeanOption)europeanOption);

                return(euOptionMC.Price(Environment.ProcessorCount));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #5
0
        /// <summary>
        /// Price a lookback option in the Heston model using the
        /// a Monte-Carlo method. Accuracy will depend on number of time steps and samples </summary>
        /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
        /// <param name="maturity">An object implementing IOption interface and containing option's maturity</param>
        /// <param name="monteCarloSimulationSettings">An object implementing IMonteCarloSettings object and containing simulation settings.</param>
        /// <returns>Option price</returns>
        public static double HestonLookbackOptionPriceMC(IHestonModelParameters parameters, IOption maturity, IMonteCarloSettings monteCarloSimulationSettings)
        {
            try
            {
                // Typecast maturity
                Option tempOption = (Option)maturity;

                // Create Monte Carlo Lookback option object
                LookbackOptionMC lookbackOptionMC =
                    new LookbackOptionMC((HestonModelParameters)parameters,
                                         (MonteCarloSettings)monteCarloSimulationSettings, maturity.Maturity);

                return(lookbackOptionMC.Price(Environment.ProcessorCount));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #6
0
        /// <summary>
        /// Price a Asian option in the Heston model using the
        /// Monte-Carlo method. Accuracy will depend on number of time steps and samples</summary>
        /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
        /// <param name="asianOption">Object implementing IAsian interface, containing the option parameters.</param>
        /// <param name="monteCarloSimulationSettings">An object implementing IMonteCarloSettings object and containing simulation settings.</param>
        /// <returns>Option price</returns>
        public static double HestonAsianOptionPriceMC(IHestonModelParameters parameters, IAsianOption asianOption, IMonteCarloSettings monteCarloSimulationSettings)
        {
            try
            {
                // Create Monte Carlo Asian option object
                AsianOptionMC asianOptionMC = new AsianOptionMC((HestonModelParameters)parameters,
                                                                (MonteCarloSettings)monteCarloSimulationSettings, (AsianOption)asianOption);

                return(asianOptionMC.Price(Environment.ProcessorCount));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }