inline Real BlackVolTermStructure::blackVariance(Time t, Real strike, bool extrapolate) const { checkRange(t, extrapolate); checkStrike(strike, extrapolate); return blackVarianceImpl(t, strike); }
Volatility BlackVolTermStructure::blackForwardVol(Time time1, Time time2, Real strike, bool extrapolate) const { QL_REQUIRE(time1 <= time2, time1 << " later than " << time2); checkRange(time2, extrapolate); checkStrike(strike, extrapolate); if (time2==time1) { if (time1==0.0) { Time epsilon = 1.0e-5; Real var = blackVarianceImpl(epsilon, strike); return std::sqrt(var/epsilon); } else { Time epsilon = std::min<Time>(1.0e-5, time1); Real var1 = blackVarianceImpl(time1-epsilon, strike); Real var2 = blackVarianceImpl(time1+epsilon, strike); QL_ENSURE(var2>=var1, "variances must be non-decreasing"); return std::sqrt((var2-var1)/(2*epsilon)); } } else { Real var1 = blackVarianceImpl(time1, strike); Real var2 = blackVarianceImpl(time2, strike); QL_ENSURE(var2 >= var1, "variances must be non-decreasing"); return std::sqrt((var2-var1)/(time2-time1)); } }
inline Volatility BlackVolTermStructure::blackVol(Time t, Real strike, bool extrapolate) const { checkRange(t, extrapolate); checkStrike(strike, extrapolate); return blackVolImpl(t, strike); }
Volatility LocalVolTermStructure::localVol(Time t, Real underlyingLevel, bool extrapolate) const { checkRange(t, extrapolate); checkStrike(underlyingLevel, extrapolate); return localVolImpl(t, underlyingLevel); }
inline Volatility CapFloorTermVolatilityStructure::volatility(Time t, Rate strike, bool extrap) const { checkRange(t, extrap); checkStrike(strike, extrap); return volatilityImpl(t, strike); }
inline Real BlackVolTermStructure::blackVariance(const Date& d, Real strike, bool extrapolate) const { checkRange(d, extrapolate); checkStrike(strike, extrapolate); Time t = timeFromReference(d); return blackVarianceImpl(t, strike); }
inline Volatility OptionletVolatilityStructure::volatility(Time optionTime, Rate strike, bool extrapolate) const { checkRange(optionTime, extrapolate); checkStrike(strike, extrapolate); return volatilityImpl(optionTime, strike); }
Volatility LocalVolTermStructure::localVol(const Date& d, Real underlyingLevel, bool extrapolate) const { checkRange(d, extrapolate); checkStrike(underlyingLevel, extrapolate); Time t = timeFromReference(d); return localVolImpl(t, underlyingLevel); }
inline Volatility SwaptionVolatilityStructure::volatility(Time optionTime, Time swapLength, Rate strike, bool extrapolate) const { checkSwapTenor(swapLength, extrapolate); checkRange(optionTime, extrapolate); checkStrike(strike, extrapolate); return volatilityImpl(optionTime, swapLength, strike); }
// 3. relying on xxxImpl methods inline Volatility SwaptionVolatilityStructure::volatility(const Date& optionDate, const Period& swapTenor, Rate strike, bool extrapolate) const { checkSwapTenor(swapTenor, extrapolate); checkRange(optionDate, extrapolate); checkStrike(strike, extrapolate); return volatilityImpl(optionDate, swapTenor, strike); }
inline Volatility SwaptionVolatilityStructure::volatility(Time optionTime, const Period& swapTenor, Rate strike, bool extrapolate) const { checkSwapTenor(swapTenor, extrapolate); checkRange(optionTime, extrapolate); checkStrike(strike, extrapolate); Time length = swapLength(swapTenor); return volatilityImpl(optionTime, length, strike); }
Real BlackVolTermStructure::blackForwardVariance(Time time1, Time time2, Real strike, bool extrapolate) const { QL_REQUIRE(time1 <= time2, time1 << " later than " << time2); checkRange(time2, extrapolate); checkStrike(strike, extrapolate); Real v1 = blackVarianceImpl(time1, strike); Real v2 = blackVarianceImpl(time2, strike); QL_ENSURE(v2 >= v1, "variances must be non-decreasing"); return v2-v1; }