Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        /// <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;
            }
        }