1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 /*
4  Copyright (C) 2014 Master IMAFA - Polytech'Nice Sophia - Université de Nice Sophia Antipolis
5 
6  This file is part of QuantLib, a free-software/open-source library
7  for financial quantitative analysts and developers - http://quantlib.org/
8 
9  QuantLib is free software: you can redistribute it and/or modify it
10  under the terms of the QuantLib license.  You should have received a
11  copy of the license along with this program; if not, please email
12  <quantlib-dev@lists.sf.net>. The license is also available online at
13  <http://quantlib.org/license.shtml>.
14 
15  This program is distributed in the hope that it will be useful, but WITHOUT
16  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
17  FOR A PARTICULAR PURPOSE.  See the license for more details.
18 */
19 
20 /*! \file analyticholderextensibleoptionengine.hpp
21     \brief Analytic engine for holder-extensible options
22 */
23 
24 #ifndef quantlib_analytic_holder_extensible_option_engine_hpp
25 #define quantlib_analytic_holder_extensible_option_engine_hpp
26 
27 #include <ql/experimental/exoticoptions/holderextensibleoption.hpp>
28 #include <ql/processes/blackscholesprocess.hpp>
29 #include <ql/pricingengines/blackscholescalculator.hpp>
30 
31 namespace QuantLib {
32 
33     class AnalyticHolderExtensibleOptionEngine
34         : public HolderExtensibleOption::engine {
35       public:
36         explicit AnalyticHolderExtensibleOptionEngine(
37             const ext::shared_ptr<GeneralizedBlackScholesProcess>& process);
38         void calculate() const;
39 
40       private:
41         ext::shared_ptr<GeneralizedBlackScholesProcess> process_;
42         Real strike() const;
43         Time firstExpiryTime() const;
44         Time secondExpiryTime() const;
45         Volatility volatility() const;
46         Rate riskFreeRate() const;
47         Rate dividendYield() const;
48         DiscountFactor dividendDiscount(Time t) const;
49         DiscountFactor riskFreeDiscount(Time t) const;
50         Real I1Call() const;
51         Real I2Call() const;
52         Real I1Put() const;
53         Real I2Put() const;
54         BlackScholesCalculator bsCalculator(Real spot, Option::Type optionType) const;
55         Real M2(Real a, Real b, Real c, Real d, Real rho) const;
56         Real N2(Real a, Real b) const;
57         Real y1(Option::Type) const;
58         Real y2(Option::Type) const;
59         Real z1() const;
60         Real z2() const;
61     };
62 
63 }
64 
65 
66 #endif
67