1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 
3 /*
4  Copyright (C) 2002, 2003 Ferdinando Ametrano
5  Copyright (C) 2007 StatPro Italia srl
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 
21 #include <ql/instruments/forwardvanillaoption.hpp>
22 
23 namespace QuantLib {
24 
ForwardVanillaOption(Real moneyness,const Date & resetDate,const ext::shared_ptr<StrikedTypePayoff> & payoff,const ext::shared_ptr<Exercise> & exercise)25     ForwardVanillaOption::ForwardVanillaOption(
26                            Real moneyness,
27                            const Date& resetDate,
28                            const ext::shared_ptr<StrikedTypePayoff>& payoff,
29                            const ext::shared_ptr<Exercise>& exercise)
30     : OneAssetOption(payoff, exercise),
31       moneyness_(moneyness), resetDate_(resetDate) {}
32 
setupArguments(PricingEngine::arguments * args) const33     void ForwardVanillaOption::setupArguments(
34                                        PricingEngine::arguments* args) const {
35         OneAssetOption::setupArguments(args);
36         ForwardVanillaOption::arguments* arguments =
37             dynamic_cast<ForwardVanillaOption::arguments*>(args);
38         QL_REQUIRE(arguments != 0, "wrong argument type");
39 
40         arguments->moneyness = moneyness_;
41         arguments->resetDate = resetDate_;
42 
43     }
44 
fetchResults(const PricingEngine::results * r) const45     void ForwardVanillaOption::fetchResults(
46                                       const PricingEngine::results* r) const {
47         OneAssetOption::fetchResults(r);
48         const ForwardVanillaOption::results* results =
49             dynamic_cast<const ForwardVanillaOption::results*>(r);
50         QL_ENSURE(results != 0,
51                   "no results returned from pricing engine");
52         delta_       = results->delta;
53         gamma_       = results->gamma;
54         theta_       = results->theta;
55         vega_        = results->vega;
56         rho_         = results->rho;
57         dividendRho_ = results->dividendRho;
58     }
59 
60 }
61 
62