예제 #1
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)
        {
            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
        /// <summary>
        /// Price a European option in the Heston model using the Heston formula. This should be accurate to 5 decimal places
        /// </summary>
        /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
        /// <param name="europeanOption">Object implementing IEuropeanOption interface, containing the option parameters.</param>
        /// <returns>Option price</returns>
        public static double HestonEuropeanOptionPrice(IHestonModelParameters parameters,
                                                       IEuropeanOption europeanOption)
        {
            Hestonformula r1 = new Hestonformula(parameters.VarianceParameters.V0,
                                                 parameters.VarianceParameters.Kappa,
                                                 parameters.VarianceParameters.Theta,
                                                 parameters.VarianceParameters.Rho,
                                                 parameters.VarianceParameters.Sigma);

            if (europeanOption.Type == PayoffType.Call)
            {
                return(Math.Round(r1.CalculateCallOptionPrice(parameters.InitialStockPrice,
                                                              europeanOption.StrikePrice,
                                                              parameters.RiskFreeRate,
                                                              europeanOption.Maturity), 5));
            }
            else
            {
                return(Math.Round(r1.CalculatePutOptionPrice(parameters.InitialStockPrice,
                                                             europeanOption.StrikePrice,
                                                             parameters.RiskFreeRate,
                                                             europeanOption.Maturity), 5));
            }
        }
예제 #3
0
 public OptionMarketDataGrading(IEuropeanOption option, double price)
 {
     Option = option;
     Price  = price;
 }
예제 #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 European option in the Heston model using the Heston formula. This should be accurate to 5 decimal places
 /// </summary>
 /// <param name="parameters">Object implementing IHestonModelParameters interface, containing model parameters.</param>
 /// <param name="europeanOption">Object implementing IEuropeanOption interface, containing the option parameters.</param>
 /// <returns>Option price</returns>
 public static double HestonEuropeanOptionPrice(IHestonModelParameters parameters, IEuropeanOption europeanOption)
 {
     try
     {
         // Create European Option Formula object
         EuropeanOptionFormula euFormula = new EuropeanOptionFormula((HestonModelParameters)parameters, (EuropeanOption)europeanOption);
         return(euFormula.Price());
     }
     catch (Exception e)
     {
         throw e;
     }
 }