1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2003 Ferdinando Ametrano 5 Copyright (C) 2007 StatPro Italia srl 6 7 This file is part of QuantLib, a free-software/open-source library 8 for financial quantitative analysts and developers - http://quantlib.org/ 9 10 QuantLib is free software: you can redistribute it and/or modify it 11 under the terms of the QuantLib license. You should have received a 12 copy of the license along with this program; if not, please email 13 <quantlib-dev@lists.sf.net>. The license is also available online at 14 <http://quantlib.org/license.shtml>. 15 16 This program is distributed in the hope that it will be useful, but WITHOUT 17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 18 FOR A PARTICULAR PURPOSE. See the license for more details. 19 */ 20 21 /*! \file vanillaoption.hpp 22 \brief Vanilla option on a single asset 23 */ 24 25 #ifndef quantlib_vanilla_option_hpp 26 #define quantlib_vanilla_option_hpp 27 28 #include <ql/instruments/oneassetoption.hpp> 29 #include <ql/instruments/payoffs.hpp> 30 31 namespace QuantLib { 32 33 class GeneralizedBlackScholesProcess; 34 35 //! Vanilla option (no discrete dividends, no barriers) on a single asset 36 /*! \ingroup instruments */ 37 class VanillaOption : public OneAssetOption { 38 public: 39 VanillaOption(const ext::shared_ptr<StrikedTypePayoff>&, 40 const ext::shared_ptr<Exercise>&); 41 42 /*! \warning currently, this method returns the Black-Scholes 43 implied volatility using analytic formulas for 44 European options and a finite-difference method 45 for American and Bermudan options. It will give 46 unconsistent results if the pricing was performed 47 with any other methods (such as jump-diffusion 48 models.) 49 50 \warning options with a gamma that changes sign (e.g., 51 binary options) have values that are <b>not</b> 52 monotonic in the volatility. In these cases, the 53 calculation can fail and the result (if any) is 54 almost meaningless. Another possible source of 55 failure is to have a target value that is not 56 attainable with any volatility, e.g., a target 57 value lower than the intrinsic value in the case 58 of American options. 59 */ 60 Volatility impliedVolatility( 61 Real price, 62 const ext::shared_ptr<GeneralizedBlackScholesProcess>& process, 63 Real accuracy = 1.0e-4, 64 Size maxEvaluations = 100, 65 Volatility minVol = 1.0e-7, 66 Volatility maxVol = 4.0) const; 67 }; 68 69 } 70 71 72 #endif 73 74