/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* Copyright (C) 2006 François du Vignaud This file is part of QuantLib, a free-software/open-source library for financial quantitative analysts and developers - http://quantlib.org/ QuantLib is free software: you can redistribute it and/or modify it under the terms of the QuantLib license. You should have received a copy of the license along with this program; if not, please email . The license is also available online at . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license for more details. */ #include #include namespace QuantLib { SabrInterpolatedSmileSection::SabrInterpolatedSmileSection( const Date& optionDate, const std::vector& strikes, const std::vector >& stdDevHandles, const Handle& forward, Real alpha, Real beta, Real nu, Real rho, bool isAlphaFixed, bool isBetaFixed, bool isNuFixed, bool isRhoFixed, bool vegaWeighted, const boost::shared_ptr& endCriteria, const boost::shared_ptr& method, const DayCounter& dc) : SmileSection(optionDate, dc), exerciseTimeSquareRoot_(std::sqrt(exerciseTime())), strikes_(strikes), stdDevHandles_(stdDevHandles), forward_(forward), vols_(stdDevHandles.size()), sabrInterpolation_(strikes_.begin(), strikes_.end(), vols_.begin(), exerciseTime(), forwardValue_, alpha, beta, nu, rho, isAlphaFixed, isBetaFixed, isNuFixed, isRhoFixed, vegaWeighted, endCriteria, method) { registerWith(forward_); for (Size i=0; ivalue()/100; for (Size i=0; ivalue()/exerciseTimeSquareRoot_; sabrInterpolation_.update(); } Real SabrInterpolatedSmileSection::variance(Real strike) const { calculate(); Real v = sabrInterpolation_(strike, true); return v*v*exerciseTime(); } }