public void Task_2_2_3() { // Variance Process Values double Kappa = 1.5768; double Theta = 0.0398; double Sigma = 0.5751; double V0 = 0.0175; double Rho = -0.5711; // Heston Model Params double InitialStockPrice = 100; double RiskFreeRate = 0.025; // Option Params double StrikePrice = 100; PayoffType Type = PayoffType.Call; double Maturity = 3; VarianceProcessParameters varParams = new VarianceProcessParameters(Kappa, Theta, Sigma, V0, Rho); HestonModelParameters hestonModel = new HestonModelParameters(InitialStockPrice, RiskFreeRate, varParams); EuropeanOption euOption = new EuropeanOption(StrikePrice, Type, Maturity); EuropeanOptionFormula euFormula = new EuropeanOptionFormula(hestonModel, euOption); Assert.AreEqual(15.4793, euFormula.Price(), 1e-4); }
/// <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; } }
public static void Task6() { Console.WriteLine("********Task 6*********"); // Variance Process Values double Kappa = 1.5768; double Theta = 0.398; double Sigma = 0.5751; double V0 = 0.0175; double Rho = -0.5711; // Heston Model Params double InitialStockPrice = 100; double RiskFreeRate = 0.025; // Callibration Settings double accuracy = 1.0e-3; int maxIter = 1000; VarianceProcessParameters varParams = new VarianceProcessParameters(Kappa, Theta, Sigma, V0, Rho); HestonModelParameters hestonModel = new HestonModelParameters(InitialStockPrice, RiskFreeRate, varParams); HestonModelParameters guess = new HestonModelParameters(InitialStockPrice, RiskFreeRate, new VarianceProcessParameters(1.55, 0.88, 1.5999, 0.4, -0.55)); CalibrationSettings calibrationSettings = new CalibrationSettings(accuracy, maxIter); // Market Data LinkedList <IOptionMarketData <IEuropeanOption> > observedOptions = new LinkedList <IOptionMarketData <IEuropeanOption> >(); EuropeanOption eu1 = new EuropeanOption(80, PayoffType.Call, 1); EuropeanOptionFormula eu1Form = new EuropeanOptionFormula(hestonModel, eu1); OptionMarketData <IEuropeanOption> marketData1 = new OptionMarketData <IEuropeanOption>(eu1, eu1Form.Price()); observedOptions.AddLast(marketData1); EuropeanOption eu2 = new EuropeanOption(90, PayoffType.Call, 1); EuropeanOptionFormula eu2Form = new EuropeanOptionFormula(hestonModel, eu2); OptionMarketData <IEuropeanOption> marketData2 = new OptionMarketData <IEuropeanOption>(eu2, eu2Form.Price()); observedOptions.AddLast(marketData2); EuropeanOption eu3 = new EuropeanOption(80, PayoffType.Call, 2); EuropeanOptionFormula eu3Form = new EuropeanOptionFormula(hestonModel, eu3); OptionMarketData <IEuropeanOption> marketData3 = new OptionMarketData <IEuropeanOption>(eu3, eu3Form.Price()); observedOptions.AddLast(marketData3); EuropeanOption eu4 = new EuropeanOption(100, PayoffType.Call, 2); EuropeanOptionFormula eu4Form = new EuropeanOptionFormula(hestonModel, eu4); OptionMarketData <IEuropeanOption> marketData4 = new OptionMarketData <IEuropeanOption>(eu4, eu4Form.Price()); observedOptions.AddLast(marketData4); EuropeanOption eu5 = new EuropeanOption(100, PayoffType.Call, 1.5); EuropeanOptionFormula eu5Form = new EuropeanOptionFormula(hestonModel, eu5); OptionMarketData <IEuropeanOption> marketData5 = new OptionMarketData <IEuropeanOption>(eu5, eu5Form.Price()); observedOptions.AddLast(marketData5); HestonCalibrationResult result; result = (HestonCalibrationResult) Heston.CalibrateHestonParameters(guess, observedOptions, calibrationSettings); Console.WriteLine("Calibration outcome: {0} and error: {1}", result.MinimizerStatus, result.PricingError); }