package org.jquantlib.termstructures.yieldcurves;
import org.jquantlib.QL;
import org.jquantlib.daycounters.DayCounter;
import org.jquantlib.quotes.Handle;
import org.jquantlib.quotes.Quote;
import org.jquantlib.termstructures.Compounding;
import org.jquantlib.termstructures.InterestRate;
import org.jquantlib.termstructures.YieldTermStructure;
import org.jquantlib.time.Calendar;
import org.jquantlib.time.Date;
import org.jquantlib.time.Frequency;
public class ZeroSpreadedTermStructure extends ZeroYieldStructure {
//
// private fields
//
private final Handle originalCurve;
private final Handle spread;
private final Compounding comp;
private final Frequency freq;
//
// public constructors
//
public ZeroSpreadedTermStructure(
final Handle h,
final Handle spread, final Compounding comp , final Frequency freq,
final DayCounter dc){
QL.validateExperimentalMode();
this.originalCurve = h;
this.spread = spread;
this.comp = comp;
this.freq = freq;
this.originalCurve.addObserver(this);
this.spread.addObserver(this);
}
//
// public methods
//
public double forwardImpl(final double t){
return originalCurve.currentLink().
forwardRate(t, t, comp, freq, true).rate()
+ spread.currentLink().value();
}
//
// overrides ZeroYieldStructure
//
@Override
protected double zeroYieldImpl(final double t) {
//org.comment: to be fixed: user-defined daycounter should be used
final InterestRate zeroRate = originalCurve.currentLink().
zeroRate(t, comp, freq, true);
final InterestRate spreadedRate =
new InterestRate(zeroRate.rate() + spread.currentLink().value(),
zeroRate.dayCounter(),
zeroRate.compounding(),
zeroRate.frequency());
return spreadedRate.equivalentRate(t, Compounding.Continuous, Frequency.NoFrequency).rate();
}
//
// overrides TermStructure
//
@Override
public Calendar calendar() {
return originalCurve.currentLink().calendar();
}
@Override
public Date referenceDate() {
return originalCurve.currentLink().referenceDate();
}
@Override
public Date maxDate() {
return originalCurve.currentLink().maxDate();
}
@Override
public/* @Time */double maxTime() {
return originalCurve.currentLink().maxTime();
}
}
Ads help maintain this website.