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