public ActionResult Index([Bind(Include = "OptionType,StockPrice,StrikePrice,TimeToMaturity,StandardDeviationOfUnderlyingStock,Risk")] Models.OptionsPricing optionsPricingModel) { IOptionsPricingCalculator optionsPricingCalculator = new OptionsPricingCalculator(); optionsPricingModel.Result = optionsPricingCalculator.OptionsPricing(optionsPricingModel); return(View(optionsPricingModel)); }
/// <summary> /// /// </summary> /// <param name="optionType">Option Type</param> /// <param name="S">Stock Price</param> /// <param name="K">Strike Price</param> /// <param name="T">Time To Maturity in Years</param> /// <param name="v">Standard Deviation Of Underlying Stock</param> /// <param name="r">Risk</param> /// <returns>Result as Double</returns> public double OptionsPricing(Models.OptionsPricing optionsPricingModel) { var optionType = optionsPricingModel.OptionType; var S = optionsPricingModel.StockPrice; var K = optionsPricingModel.StrikePrice; var T = optionsPricingModel.TimeToMaturity; var v = optionsPricingModel.StandardDeviationOfUnderlyingStock; var r = optionsPricingModel.Risk; double d1 = 0.0; double d2 = 0.0; double dBlackScholes = 0.0; d1 = (Math.Log(S / K) + (r + v * v / 2.0) * T) / (v * Math.Sqrt(T)); d2 = d1 - v * Math.Sqrt(T); if (optionType == OptionsType.Call) { dBlackScholes = S * CND(d1) - K * Math.Exp(-r * T) * CND(d2); } else if (optionType == OptionsType.Put) { dBlackScholes = K * Math.Exp(-r * T) * CND(-d2) - S * CND(-d1); } return(Math.Round(dBlackScholes, 4)); }