QuantLib: a free/open-source library for quantitative finance
fully annotated source code - version 1.34
Loading...
Searching...
No Matches
oneassetoption.cpp
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) 2000, 2001, 2002, 2003 RiskMap srl
5 Copyright (C) 2003 Ferdinando Ametrano
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
23#include <ql/exercise.hpp>
24#include <ql/event.hpp>
25
26namespace QuantLib {
27
29 const ext::shared_ptr<Payoff>& payoff,
30 const ext::shared_ptr<Exercise>& exercise)
31 : Option(payoff, exercise) {}
32
34 return detail::simple_event(exercise_->lastDate()).hasOccurred();
35 }
36
38 calculate();
39 QL_REQUIRE(delta_ != Null<Real>(), "delta not provided");
40 return delta_;
41 }
42
44 calculate();
46 "forward delta not provided");
47 return deltaForward_;
48 }
49
51 calculate();
52 QL_REQUIRE(elasticity_ != Null<Real>(), "elasticity not provided");
53 return elasticity_;
54 }
55
57 calculate();
58 QL_REQUIRE(gamma_ != Null<Real>(), "gamma not provided");
59 return gamma_;
60 }
61
63 calculate();
64 QL_REQUIRE(theta_ != Null<Real>(), "theta not provided");
65 return theta_;
66 }
67
69 calculate();
70 QL_REQUIRE(thetaPerDay_ != Null<Real>(), "theta per-day not provided");
71 return thetaPerDay_;
72 }
73
75 calculate();
76 QL_REQUIRE(vega_ != Null<Real>(), "vega not provided");
77 return vega_;
78 }
79
81 calculate();
82 QL_REQUIRE(rho_ != Null<Real>(), "rho not provided");
83 return rho_;
84 }
85
87 calculate();
88 QL_REQUIRE(dividendRho_ != Null<Real>(), "dividend rho not provided");
89 return dividendRho_;
90 }
91
93 calculate();
95 "strike sensitivity not provided");
96 return strikeSensitivity_;
97 }
98
100 calculate();
102 "in-the-money cash probability not provided");
103 return itmCashProbability_;
104 }
105
111 }
112
115 const auto* results = dynamic_cast<const Greeks*>(r);
116 QL_ENSURE(results != nullptr, "no greeks returned from pricing engine");
117 /* no check on null values - just copy.
118 this allows:
119 a) to decide in derived options what to do when null
120 results are returned (throw? numerical calculation?)
121 b) to implement slim engines which only calculate the
122 value---of course care must be taken not to call
123 the greeks methods when using these.
124 */
128 vega_ = results->vega;
129 rho_ = results->rho;
131
132 const auto* moreResults = dynamic_cast<const MoreGreeks*>(r);
133 QL_ENSURE(moreResults != nullptr, "no more greeks returned from pricing engine");
134 /* no check on null values - just copy.
135 this allows:
136 a) to decide in derived options what to do when null
137 results are returned (throw? numerical calculation?)
138 b) to implement slim engines which only calculate the
139 value---of course care must be taken not to call
140 the greeks methods when using these.
141 */
142 deltaForward_ = moreResults->deltaForward;
143 elasticity_ = moreResults->elasticity;
144 thetaPerDay_ = moreResults->thetaPerDay;
145 strikeSensitivity_ = moreResults->strikeSensitivity;
146 itmCashProbability_ = moreResults->itmCashProbability;
147 }
148
149}
150
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
virtual void setupExpired() const
Definition: instrument.hpp:140
more additional option results
Definition: option.hpp:79
template class providing a null value for a given type.
Definition: null.hpp:76
Results from single-asset option calculation
bool isExpired() const override
returns whether the instrument might have value greater than zero.
OneAssetOption(const ext::shared_ptr< Payoff > &, const ext::shared_ptr< Exercise > &)
void setupExpired() const override
void fetchResults(const PricingEngine::results *) const override
base option class
Definition: option.hpp:36
ext::shared_ptr< Exercise > exercise_
Definition: option.hpp:50
#define QL_ENSURE(condition, message)
throw an error if the given post-condition is not verified
Definition: errors.hpp:130
#define QL_REQUIRE(condition, message)
throw an error if the given pre-condition is not verified
Definition: errors.hpp:117
Base class for events associated with a given date.
Option exercise classes and payoff function.
QL_REAL Real
real number
Definition: types.hpp:50
ext::shared_ptr< QuantLib::Payoff > payoff
Definition: any.hpp:35
Option on a single asset.
ext::shared_ptr< YieldTermStructure > r