/// <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; } }
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); }