/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.interestrate; import org.apache.commons.lang.Validate; import org.threeten.bp.ZonedDateTime; import com.opengamma.analytics.financial.model.interestrate.definition.StandardDiscountBondModelDataBundle; import com.opengamma.analytics.math.function.Function1D; import com.opengamma.util.time.DateUtils; /** * */ public class HoLeeInterestRateModel implements DiscountBondModel<StandardDiscountBondModelDataBundle> { @Override public Function1D<StandardDiscountBondModelDataBundle, Double> getDiscountBondFunction(final ZonedDateTime time, final ZonedDateTime maturity) { Validate.notNull(time); Validate.notNull(maturity); return new Function1D<StandardDiscountBondModelDataBundle, Double>() { @Override public Double evaluate(final StandardDiscountBondModelDataBundle data) { Validate.notNull(data); final double t = DateUtils.getDifferenceInYears(data.getDate(), time); final double s = DateUtils.getDifferenceInYears(data.getDate(), maturity); final double b = s - t; final double sigma = data.getShortRateVolatility(t); final double rT = data.getShortRate(t); final double rS = data.getShortRate(s); final double pT = Math.exp(-rT * t); final double pS = Math.exp(-rS * s); final double dlnPdt = -rT; final double lnA = Math.log(pS / pT) - b * dlnPdt - 0.5 * sigma * sigma * b * b; return Math.exp(lnA - b * rT); } }; } }