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