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); }
private void btnCalculate_Click(object sender, EventArgs e) { try { BlackNScholesCaculator blackNScholesCaculator = new BlackNScholesCaculator() { DayLefts = DayLefts, ImpliedVolatilities = this.ImpliedVolatilities, //OptionType = EOptionTypes.Put, RiskFreeInterestRate = this.RiskFreeInterestRate, StockPrice = this.StockPrice, Strike = this.StrikePrice }; blackNScholesCaculator.CalculateAll(); double resValue = blackNScholesCaculator.CallValue; lblCallB_SValue.Text = resValue.ToString("#0.00"); resValue = blackNScholesCaculator.PutValue; lblPutB_SValue.Text = resValue.ToString("#0.00"); lblPutDelta.Text = blackNScholesCaculator.DeltaPut.ToString("#0.00"); lblCallDelta.Text = blackNScholesCaculator.DeltaCall.ToString("#0.00"); lblCallGama.Text = blackNScholesCaculator.GamaCall.ToString("#0.0000"); lblPutGama.Text = blackNScholesCaculator.GamaPut.ToString("#0.0000"); lblCallTheta.Text = blackNScholesCaculator.ThetaCall.ToString("#0.00"); lblPutTheta.Text = blackNScholesCaculator.ThetaPut.ToString("#0.00"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Use BnS equation to calculate the values (Greek parameters). /// </summary> /// <param name="bnSCalculationData"></param> private void CalculateBnSValues(BnSCalculationData bnSCalculationData) { var blackNScholesCaculator = new BlackNScholesCaculator { DayLefts = bnSCalculationData.DayLeftsForCalc, ImpliedVolatilities = bnSCalculationData.ImpliedVolatilitiesForCalc, RiskFreeInterestRate = RiskFreeInterestRate, StockPrice = bnSCalculationData.StockPrice, Strike = bnSCalculationData.Strike, Multiplier = bnSCalculationData.Multiplier }; int multiplier = bnSCalculationData.Multiplier; blackNScholesCaculator.CalculateAll(); if (bnSCalculationData.OptionType == EOptionType.Call) { bnSCalculationData.ResultDataValues.OptionPrice = double.IsNaN(blackNScholesCaculator.CallValue) ? 0 : blackNScholesCaculator.CallValue; bnSCalculationData.ResultDataValues.Delta = blackNScholesCaculator.DeltaCall / multiplier; bnSCalculationData.ResultDataValues.Gamma = blackNScholesCaculator.GamaCall / multiplier; bnSCalculationData.ResultDataValues.Theta = blackNScholesCaculator.ThetaCall / multiplier; bnSCalculationData.ResultDataValues.Vega = blackNScholesCaculator.VegaCall / multiplier; } else { bnSCalculationData.ResultDataValues.OptionPrice = double.IsNaN(blackNScholesCaculator.PutValue) ? 0 : blackNScholesCaculator.PutValue; bnSCalculationData.ResultDataValues.Delta = blackNScholesCaculator.DeltaPut / multiplier; bnSCalculationData.ResultDataValues.Gamma = blackNScholesCaculator.GamaPut / multiplier; bnSCalculationData.ResultDataValues.Theta = blackNScholesCaculator.ThetaPut / multiplier; bnSCalculationData.ResultDataValues.Vega = blackNScholesCaculator.VegaPut / multiplier; } }