1 /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 3 /* 4 Copyright (C) 2008 Master IMAFA - Polytech'Nice Sophia - Université de Nice Sophia Antipolis 5 6 This file is part of QuantLib, a free-software/open-source library 7 for financial quantitative analysts and developers - http://quantlib.org/ 8 9 QuantLib is free software: you can redistribute it and/or modify it 10 under the terms of the QuantLib license. You should have received a 11 copy of the license along with this program; if not, please email 12 <quantlib-dev@lists.sf.net>. The license is also available online at 13 <http://quantlib.org/license.shtml>. 14 15 This program is distributed in the hope that it will be useful, but WITHOUT 16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 17 FOR A PARTICULAR PURPOSE. See the license for more details. 18 */ 19 20 /*! \file himalayaoption.hpp 21 \brief Himalaya option on a number of assets 22 */ 23 24 #ifndef quantlib_himalaya_option_hpp 25 #define quantlib_himalaya_option_hpp 26 27 #include <ql/instruments/multiassetoption.hpp> 28 #include <ql/time/date.hpp> 29 #include <vector> 30 31 namespace QuantLib { 32 33 //! Himalaya option 34 /*! The payoff of a Himalaya option is computed in the following 35 way: Given a basket of N assets, and N time periods, at the 36 end of each period the option who performed the best is added 37 to the average and then discarded from the basket. At the end 38 of the N, periods the option pays the max between the strike 39 and the average of the best performers. 40 41 \warning This implementation still does not manage seasoned 42 options. 43 */ 44 class HimalayaOption : public MultiAssetOption { 45 public: 46 class engine; 47 class arguments; 48 class results; 49 HimalayaOption(const std::vector<Date>& fixingDates, 50 Real strike); 51 52 void setupArguments(PricingEngine::arguments*) const; 53 private: 54 std::vector<Date> fixingDates_; 55 }; 56 57 class HimalayaOption::arguments : public MultiAssetOption::arguments { 58 public: 59 arguments(); 60 void validate() const; 61 std::vector<Date> fixingDates; 62 }; 63 64 class HimalayaOption::results : public MultiAssetOption::results {}; 65 66 class HimalayaOption::engine 67 : public GenericEngine<HimalayaOption::arguments, 68 HimalayaOption::results> {}; 69 70 } 71 72 #endif 73