QuantLib: a free/open-source library for quantitative finance
Fully annotated sources - version 1.32
Loading...
Searching...
No Matches
fdmquantohelper.cpp
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2008, 2009 Ralph Schreyer
5 Copyright (C) 2008, 2009 Klaus Spanderen
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
25#include <ql/methods/finitedifferences/utilities/fdmquantohelper.hpp>
26#include <ql/termstructures/volatility/equityfx/blackvoltermstructure.hpp>
27#include <ql/termstructures/yieldtermstructure.hpp>
28#include <utility>
29
30namespace QuantLib {
31
32 FdmQuantoHelper::FdmQuantoHelper(ext::shared_ptr<YieldTermStructure> rTS,
33 ext::shared_ptr<YieldTermStructure> fTS,
34 ext::shared_ptr<BlackVolTermStructure> fxVolTS,
35 Real equityFxCorrelation,
36 Real exchRateATMlevel)
37 : rTS_(std::move(rTS)), fTS_(std::move(fTS)), fxVolTS_(std::move(fxVolTS)),
38 equityFxCorrelation_(equityFxCorrelation), exchRateATMlevel_(exchRateATMlevel) {}
39
41 Time t1, Time t2) const {
42 const Rate rDomestic = rTS_->forwardRate(t1, t2, Continuous).rate();
43 const Rate rForeign = fTS_->forwardRate(t1, t2, Continuous).rate();
44 const Volatility fxVol
45 = fxVolTS_->blackForwardVol(t1, t2, exchRateATMlevel_);
46
47 return rDomestic - rForeign + equityVol*fxVol*equityFxCorrelation_;
48 }
49
51 const Array& equityVol, Time t1, Time t2) const {
52
53 const Rate rDomestic = rTS_->forwardRate(t1, t2, Continuous).rate();
54 const Rate rForeign = fTS_->forwardRate(t1, t2, Continuous).rate();
55 const Volatility fxVol
56 = fxVolTS_->blackForwardVol(t1, t2, exchRateATMlevel_);
57
58 Array retVal(equityVol.size());
59 for (Size i=0; i < retVal.size(); ++i) {
60 retVal[i]
61 = rDomestic - rForeign + equityVol[i]*fxVol*equityFxCorrelation_;
62 }
63 return retVal;
64 }
65}
1-D array used in linear algebra.
Definition: array.hpp:52
Size size() const
dimension of the array
Definition: array.hpp:495
const ext::shared_ptr< YieldTermStructure > fTS_
const ext::shared_ptr< BlackVolTermStructure > fxVolTS_
const ext::shared_ptr< YieldTermStructure > rTS_
FdmQuantoHelper(ext::shared_ptr< YieldTermStructure > rTS, ext::shared_ptr< YieldTermStructure > fTS, ext::shared_ptr< BlackVolTermStructure > fxVolTS, Real equityFxCorrelation, Real exchRateATMlevel)
Rate quantoAdjustment(Volatility equityVol, Time t1, Time t2) const
Real Time
continuous quantity with 1-year units
Definition: types.hpp:62
QL_REAL Real
real number
Definition: types.hpp:50
Real Volatility
volatility
Definition: types.hpp:78
Real Rate
interest rates
Definition: types.hpp:70
std::size_t Size
size of a container
Definition: types.hpp:58
Definition: any.hpp:35
STL namespace.