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