Example #1
0
        public double impliedVolatility(double targetValue, GeneralizedBlackScholesProcess process, double accuracy, int maxEvaluations, double minVol, double maxVol)
        {
            if (!(!isExpired()))
            {
                throw new ApplicationException("option expired");
            }

            SimpleQuote volQuote = new SimpleQuote();

            GeneralizedBlackScholesProcess newProcess = ImpliedVolatilityHelper.clone(process, volQuote);

            // engines are built-in for the time being
            IPricingEngine engine = null;

            switch (exercise_.type())
            {
            case Exercise.Type.European:
                engine = new AnalyticBarrierEngine(newProcess);
                break;

            case Exercise.Type.American:
            case Exercise.Type.Bermudan:
                throw new ApplicationException("Engine not available for non-European barrier option");

            default:
                throw new ApplicationException("unknown exercise type");
            }

            return(ImpliedVolatilityHelper.calculate(this, engine, volQuote, targetValue, accuracy, maxEvaluations, minVol, maxVol));
        }
Example #2
0
        /*! \warning see VanillaOption for notes on implied-volatility
         *           calculation.
         */
        public double impliedVolatility(double targetValue, GeneralizedBlackScholesProcess process,
                                        double accuracy = 1.0e-4, int maxEvaluations = 100, double minVol = 1.0e-7, double maxVol = 4.0)
        {
            if (isExpired())
            {
                throw new ApplicationException("option expired");
            }

            SimpleQuote volQuote = new SimpleQuote();

            GeneralizedBlackScholesProcess newProcess = ImpliedVolatilityHelper.clone(process, volQuote);

            // engines are built-in for the time being
            IPricingEngine engine;

            switch (exercise_.type())
            {
            case Exercise.Type.European:
                engine = new AnalyticDividendEuropeanEngine(newProcess);
                break;

            case Exercise.Type.American:
                engine = new FDDividendAmericanEngine(newProcess);
                break;

            case Exercise.Type.Bermudan:
                throw new ApplicationException("engine not available for Bermudan option with dividends");

            default:
                throw new ArgumentException("unknown exercise type");
            }

            return(ImpliedVolatilityHelper.calculate(this, engine, volQuote, targetValue, accuracy,
                                                     maxEvaluations, minVol, maxVol));
        }
Example #3
0
        //! Black volatility implied by the model
        public double impliedVolatility(double targetValue, double accuracy, int maxEvaluations, double minVol, double maxVol) {

            ImpliedVolatilityHelper f = new ImpliedVolatilityHelper(this, targetValue);
            Brent solver = new Brent();
            solver.setMaxEvaluations(maxEvaluations);
            return solver.solve(f,accuracy,volatility_.link.value(), minVol, maxVol);
        }
Example #4
0
        //! Black volatility implied by the model
        public double impliedVolatility(double targetValue, double accuracy, int maxEvaluations, double minVol, double maxVol)
        {
            ImpliedVolatilityHelper f = new ImpliedVolatilityHelper(this, targetValue);
            Brent solver = new Brent();

            solver.setMaxEvaluations(maxEvaluations);
            return(solver.solve(f, accuracy, volatility_.link.value(), minVol, maxVol));
        }