Пример #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)
        {
            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;
            }
        }
Пример #2
0
        public void Task_2_7_1()
        {
            // Variance Process Values
            double Kappa = 2;
            double Theta = 0.06;
            double Sigma = 0.4;
            double V0    = 0.04;
            double Rho   = 0.5;

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

            // Option Params
            double        StrikePrice     = 100;
            PayoffType    Type            = PayoffType.Call;
            double        Maturity        = 1;
            List <double> MonitoringTimes = new List <double>
            {
                0.75,
                1.00
            };

            // MC Simulation Params
            int NumberOfTrials    = (int)1e5;
            int NumberOfTimeSteps = (int)Math.Ceiling(365 * Maturity);

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

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

            AsianOption asianOption =
                new AsianOption(StrikePrice, Type, Maturity, MonitoringTimes);

            MonteCarloSettings monteCarloSettings =
                new MonteCarloSettings(NumberOfTrials, NumberOfTimeSteps);

            AsianOptionMC asianOptionMC =
                new AsianOptionMC(hestonModel, monteCarloSettings, asianOption);

            Assert.AreEqual(13.6299, asianOptionMC.Price(1), 1e-1);
        }