private void btnCalculateIV_Click(object sender, EventArgs e) { try { var blackNScholesCaculator = new BlackNScholesCaculator() { DayLefts = DayLefts, RiskFreeInterestRate = this.RiskFreeInterestRate, StockPrice = this.StockPrice, Strike = this.StrikePrice }; var iv = OptionType == EOptionType.Call ? blackNScholesCaculator.GetCallIVBisections(OptionPrice) : blackNScholesCaculator.GetPutIVBisections(OptionPrice); txtBNSBisections.Text = iv.ToString(CultureInfo.InvariantCulture); txtIterationCounter.Text = blackNScholesCaculator.IterationCounter.ToString(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Calculate the IV according the actual prices, UNL and option price. /// </summary> /// <param name="optionData"></param> /// <returns></returns> public double CalculateIVByOptionPrice(OptionData optionData) { var blackNScholesCaculator = new BlackNScholesCaculator() { DayLefts = optionData.DaysLeft, Multiplier = optionData.Multiplier, RiskFreeInterestRate = RiskFreeInterestRate, StockPrice = optionData.UnderlinePrice, Strike = optionData.OptionContract.Strike, }; double iv = 0; try { iv = optionData.OptionContract.OptionType == EOptionType.Call ? blackNScholesCaculator.GetCallIVBisections(optionData.PriceOfOneOption) : blackNScholesCaculator.GetPutIVBisections(optionData.PriceOfOneOption); } catch (Exception ex) { Logger.Error(ex.Message + ": wrong calculation, ImpliedVolatility = 0 !!!!", ex); } return(iv); }