QuantLib: a free/open-source library for quantitative finance
Fully annotated sources - version 1.32
Loading...
Searching...
No Matches
multiassetoption.cpp
1/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3/*
4 Copyright (C) 2004 Neil Firth
5 Copyright (C) 2000, 2001, 2002, 2003 RiskMap srl
6 Copyright (C) 2007 StatPro Italia srl
7
8 This file is part of QuantLib, a free-software/open-source library
9 for financial quantitative analysts and developers - http://quantlib.org/
10
11 QuantLib is free software: you can redistribute it and/or modify it
12 under the terms of the QuantLib license. You should have received a
13 copy of the license along with this program; if not, please email
14 <quantlib-dev@lists.sf.net>. The license is also available online at
15 <http://quantlib.org/license.shtml>.
16
17 This program is distributed in the hope that it will be useful, but WITHOUT
18 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19 FOR A PARTICULAR PURPOSE. See the license for more details.
20*/
21
22#include <ql/instruments/multiassetoption.hpp>
23#include <ql/stochasticprocess.hpp>
24#include <ql/exercise.hpp>
25#include <ql/event.hpp>
26
27namespace QuantLib {
28
30 const ext::shared_ptr<Payoff>& payoff,
31 const ext::shared_ptr<Exercise>& exercise)
32 : Option(payoff, exercise) {}
33
35 return detail::simple_event(exercise_->lastDate()).hasOccurred();
36 }
37
39 calculate();
40 QL_REQUIRE(delta_ != Null<Real>(), "delta not provided");
41 return delta_;
42 }
43
45 calculate();
46 QL_REQUIRE(gamma_ != Null<Real>(), "gamma not provided");
47 return gamma_;
48 }
49
51 calculate();
52 QL_REQUIRE(theta_ != Null<Real>(), "theta not provided");
53 return theta_;
54 }
55
57 calculate();
58 QL_REQUIRE(vega_ != Null<Real>(), "vega not provided");
59 return vega_;
60 }
61
63 calculate();
64 QL_REQUIRE(rho_ != Null<Real>(), "rho not provided");
65 return rho_;
66 }
67
69 calculate();
70 QL_REQUIRE(dividendRho_ != Null<Real>(), "dividend rho not provided");
71 return dividendRho_;
72 }
73
75 NPV_ = delta_ = gamma_ = theta_ =
76 vega_ = rho_ = dividendRho_ = 0.0;
77 }
78
80 PricingEngine::arguments* args) const {
81 auto* arguments = dynamic_cast<MultiAssetOption::arguments*>(args);
82 QL_REQUIRE(arguments != nullptr, "wrong argument type");
83
86 }
87
90 const auto* results = dynamic_cast<const Greeks*>(r);
91 QL_ENSURE(results != nullptr, "no greeks returned from pricing engine");
96 rho_ = results->rho;
98 }
99
100}
virtual bool hasOccurred(const Date &refDate=Date(), ext::optional< bool > includeRefDate=ext::nullopt) const
returns true if an event has already occurred before a date
Definition: event.cpp:28
additional option results
Definition: option.hpp:69
Real dividendRho
Definition: option.hpp:75
void calculate() const override
Definition: instrument.hpp:129
virtual void fetchResults(const PricingEngine::results *) const
Definition: instrument.hpp:155
Results from multi-asset option calculation
MultiAssetOption(const ext::shared_ptr< Payoff > &, const ext::shared_ptr< Exercise > &)
void setupArguments(PricingEngine::arguments *) const override
bool isExpired() const override
returns whether the instrument might have value greater than zero.
void setupExpired() const override
void fetchResults(const PricingEngine::results *) const override
template class providing a null value for a given type.
Definition: null.hpp:76
basic option arguments
Definition: option.hpp:57
ext::shared_ptr< Exercise > exercise
Definition: option.hpp:65
ext::shared_ptr< Payoff > payoff
Definition: option.hpp:64
base option class
Definition: option.hpp:36
ext::shared_ptr< Payoff > payoff_
Definition: option.hpp:49
ext::shared_ptr< Exercise > exercise_
Definition: option.hpp:50
QL_REAL Real
real number
Definition: types.hpp:50
Definition: any.hpp:35