driftcalculators.hpp
Go to the documentation of this file.
1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 /*
4  Copyright (C) 2006, 2007 Ferdinando Ametrano
5  Copyright (C) 2007 Chiara Fornarola
6  Copyright (C) 2006, 2007 Marco Bianchetti
7  Copyright (C) 2006, 2007 Cristina Duminuco
8  Copyright (C) 2006, 2007 Giorgio Facchinetti
9 
10  This file is part of QuantLib, a free-software/open-source library
11  for financial quantitative analysts and developers - http://quantlib.org/
12 
13  QuantLib is free software: you can redistribute it and/or modify it
14  under the terms of the QuantLib license. You should have received a
15  copy of the license along with this program; if not, please email
16  <quantlib-dev@lists.sf.net>. The license is also available online at
17  <http://quantlib.org/license.shtml>.
18 
19  This program is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
21  FOR A PARTICULAR PURPOSE. See the license for more details.
22 */
23 
24 #ifndef qla_driftcalculators_hpp
25 #define qla_driftcalculators_hpp
26 
27 #include <oh/libraryobject.hpp>
28 
29 #include <ql/types.hpp>
30 
31 namespace QuantLib {
32  class LMMDriftCalculator;
33  class LMMNormalDriftCalculator;
34  class CMSMMDriftCalculator;
35  class SMMDriftCalculator;
36  class Matrix;
37  class LMMCurveState;
38  class CMSwapCurveState;
39  class CoterminalSwapCurveState;
40 }
41 
42 namespace QuantLibAddin {
43 
44  class LMMDriftCalculator : public ObjectHandler::LibraryObject<QuantLib::LMMDriftCalculator> {
45  public:
46  LMMDriftCalculator(const boost::shared_ptr<ObjectHandler::ValueObject>& properties,
47  const QuantLib::Matrix& pseudo,
48  const std::vector<QuantLib::Rate>& displacements,
49  const std::vector<QuantLib::Time>& taus,
50  QuantLib::Size numeraire,
51  QuantLib::Size alive,
52  bool permanent);
53  std::vector<QuantLib::Real> compute(
54  const QuantLib::LMMCurveState& cs) const;
55  std::vector<QuantLib::Real> computePlain(
56  const QuantLib::LMMCurveState& cs) const;
57  std::vector<QuantLib::Real> computeReduced(
58  const QuantLib::LMMCurveState& cs) const;
59  private:
60  mutable std::vector<QuantLib::Real> drifts_;
61  };
62 
63  class LMMNormalDriftCalculator : public ObjectHandler::LibraryObject<QuantLib::LMMNormalDriftCalculator> {
64  public:
66  const boost::shared_ptr<ObjectHandler::ValueObject>& properties,
67  const QuantLib::Matrix& pseudo,
68  const std::vector<QuantLib::Time>& taus,
69  QuantLib::Size numeraire,
70  QuantLib::Size alive,
71  bool permanent);
72  std::vector<QuantLib::Real> compute(
73  const QuantLib::LMMCurveState& cs) const;
74  std::vector<QuantLib::Real> computePlain(
75  const QuantLib::LMMCurveState& cs) const;
76  std::vector<QuantLib::Real> computeReduced(
77  const QuantLib::LMMCurveState& cs) const;
78  private:
79  mutable std::vector<QuantLib::Real> drifts_;
80  };
81 
82  class CMSMMDriftCalculator : public ObjectHandler::LibraryObject<QuantLib::CMSMMDriftCalculator> {
83  public:
84  CMSMMDriftCalculator(const boost::shared_ptr<ObjectHandler::ValueObject>& properties,
85  const QuantLib::Matrix& pseudo,
86  const std::vector<QuantLib::Rate>& displacements,
87  const std::vector<QuantLib::Time>& taus,
88  QuantLib::Size numeraire,
89  QuantLib::Size alive,
90  QuantLib::Size spanningFwds,
91  bool permanent);
92  std::vector<QuantLib::Real> compute(
93  const QuantLib::CMSwapCurveState& cs) const;
94  private:
95  mutable std::vector<QuantLib::Real> drifts_;
96  };
97 
98  class SMMDriftCalculator : public ObjectHandler::LibraryObject<QuantLib::SMMDriftCalculator> {
99  public:
100  SMMDriftCalculator(const boost::shared_ptr<ObjectHandler::ValueObject>& properties,
101  const QuantLib::Matrix& pseudo,
102  const std::vector<QuantLib::Rate>& displacements,
103  const std::vector<QuantLib::Time>& taus,
104  QuantLib::Size numeraire,
105  QuantLib::Size alive,
106  bool permanent);
107  std::vector<QuantLib::Real> compute(
108  const QuantLib::CoterminalSwapCurveState& cs) const;
109  private:
110  mutable std::vector<QuantLib::Real> drifts_;
111  };
112 
113 }
114 
115 #endif
116 
std::vector< QuantLib::Real > computePlain(const QuantLib::LMMCurveState &cs) const
std::vector< QuantLib::Real > computeReduced(const QuantLib::LMMCurveState &cs) const
CMSMMDriftCalculator(const boost::shared_ptr< ObjectHandler::ValueObject > &properties, const QuantLib::Matrix &pseudo, const std::vector< QuantLib::Rate > &displacements, const std::vector< QuantLib::Time > &taus, QuantLib::Size numeraire, QuantLib::Size alive, QuantLib::Size spanningFwds, bool permanent)
std::vector< QuantLib::Real > compute(const QuantLib::CoterminalSwapCurveState &cs) const
LMMDriftCalculator(const boost::shared_ptr< ObjectHandler::ValueObject > &properties, const QuantLib::Matrix &pseudo, const std::vector< QuantLib::Rate > &displacements, const std::vector< QuantLib::Time > &taus, QuantLib::Size numeraire, QuantLib::Size alive, bool permanent)
LMMNormalDriftCalculator(const boost::shared_ptr< ObjectHandler::ValueObject > &properties, const QuantLib::Matrix &pseudo, const std::vector< QuantLib::Time > &taus, QuantLib::Size numeraire, QuantLib::Size alive, bool permanent)
Definition: driftcalculators.hpp:63
std::vector< QuantLib::Real > compute(const QuantLib::CMSwapCurveState &cs) const
SMMDriftCalculator(const boost::shared_ptr< ObjectHandler::ValueObject > &properties, const QuantLib::Matrix &pseudo, const std::vector< QuantLib::Rate > &displacements, const std::vector< QuantLib::Time > &taus, QuantLib::Size numeraire, QuantLib::Size alive, bool permanent)
std::vector< QuantLib::Real > computeReduced(const QuantLib::LMMCurveState &cs) const
Definition: driftcalculators.hpp:82
Definition: abcd.hpp:38
Definition: driftcalculators.hpp:98
Definition: abcd.hpp:30
Definition: driftcalculators.hpp:44
std::vector< QuantLib::Real > computePlain(const QuantLib::LMMCurveState &cs) const
std::vector< QuantLib::Real > compute(const QuantLib::LMMCurveState &cs) const
std::vector< QuantLib::Real > compute(const QuantLib::LMMCurveState &cs) const