package org.jquantlib.indexes;
import org.jquantlib.currencies.Currency;
import org.jquantlib.daycounters.DayCounter;
import org.jquantlib.instruments.MakeVanillaSwap;
import org.jquantlib.instruments.VanillaSwap;
import org.jquantlib.quotes.Handle;
import org.jquantlib.termstructures.YieldTermStructure;
import org.jquantlib.time.BusinessDayConvention;
import org.jquantlib.time.Calendar;
import org.jquantlib.time.Date;
import org.jquantlib.time.Period;
/**
* Base class for swap-rate indexes
*
* @author Richard Gomes
*/
// TODO: code review :: license, class comments, comments for access modifiers, comments for @Override
public class SwapIndex extends InterestRateIndex {
//
// protected fields
//
protected Period tenor;
protected IborIndex iborIndex;
protected Period fixedLegTenor;
protected BusinessDayConvention fixedLegConvention;
//
// public constructors
//
public SwapIndex(
final String familyName,
final Period tenor,
final /*@Natural*/ int settlementDays,
final Currency currency,
final Calendar calendar,
final Period fixedLegTenor,
final BusinessDayConvention fixedLegConvention,
final DayCounter fixedLegDayCounter,
final IborIndex iborIndex) {
super(familyName, tenor, settlementDays, currency, calendar, fixedLegDayCounter);
this.tenor = tenor;
this.iborIndex = iborIndex;
this.fixedLegTenor = fixedLegTenor;
this.fixedLegConvention = fixedLegConvention;
this.iborIndex.addObserver(this);
//XXX:registerWith
//registerWith(this.iborIndex);
}
//
// protected methods
//
@Override
protected /*@Rate*/ double forecastFixing(final Date fixingDate) /* @ReadOnly */ {
return underlyingSwap(fixingDate).fairRate();
}
//
// public methods
//
public IborIndex iborIndex() /* @ReadOnly */ {
return iborIndex;
}
public Period fixedLegTenor() /* @ReadOnly */{
return fixedLegTenor;
}
public BusinessDayConvention fixedLegConvention() /* @ReadOnly */ {
return fixedLegConvention;
}
public VanillaSwap underlyingSwap(final Date fixingDate) /* @ReadOnly */ {
/*@Rate*/ final double fixedRate = 0.0;
return new MakeVanillaSwap(tenor, iborIndex, fixedRate)
.withEffectiveDate(valueDate(fixingDate))
.withFixedLegCalendar(fixingCalendar())
.withFixedLegDayCount(dayCounter)
.withFixedLegTenor(fixedLegTenor)
.withFixedLegConvention(fixedLegConvention)
.withFixedLegTerminationDateConvention(fixedLegConvention).value();
}
@Override
public Date maturityDate(final Date valueDate) /* @ReadOnly */ {
final Date fixDate = fixingDate(valueDate);
return underlyingSwap(fixDate).maturityDate();
}
@Override
public Handle termStructure() /* @ReadOnly */ {
return iborIndex.termStructure();
}
}
Ads help maintain this website.