DiscountCurveFromProductOfCurves.java
/*
* (c) Copyright Christian P. Fries, Germany. Contact: email@christian-fries.de.
*
* Created on 20.05.2005
*/
package net.finmath.marketdata.model.curves;
import java.io.Serializable;
import java.time.LocalDate;
import net.finmath.marketdata.model.AnalyticModel;
/**
* A discount curve derived from other discount curves by multiplying the discount factors.
*
* @author Christian Fries
* @version 1.1
*/
public class DiscountCurveFromProductOfCurves extends AbstractCurve implements Serializable, DiscountCurve {
private static final long serialVersionUID = 6643801855646089707L;
private final String[] curveNames;
private final DiscountCurve[] curves;
/**
* Create a discount curve using one or more curves.
*
* The product curve is generated dynamically by looking up the given curveNames in the model passed
* to the method {@link #getDiscountFactor(AnalyticModel, double)}.
*
* @param name The name of this curve.
* @param referenceDate The reference date of this curve.
* @param curveNames Argument list or array of curve names.
*/
public DiscountCurveFromProductOfCurves(final String name, final LocalDate referenceDate, final String... curveNames) {
super(name, referenceDate);
this.curveNames = curveNames;
this.curves = null;
}
/**
* Create a discount curve using one or more given curves.
*
* @param name The name of this curve.
* @param referenceDate The reference date of this curve.
* @param curves Argument list or array of curves.
*/
public DiscountCurveFromProductOfCurves(final String name, final LocalDate referenceDate, final DiscountCurve... curves) {
super(name, referenceDate);
this.curveNames = null;
this.curves = curves;
}
@Override
public double getDiscountFactor(final double maturity) {
return getDiscountFactor(null, maturity);
}
@Override
public double getDiscountFactor(final AnalyticModel model, final double maturity) {
double discountFactor = 1.0;
if(curveNames != null) {
if(model == null) {
throw new IllegalArgumentException("This object requires that a reference to an AnalyticModel is passed to a call this method.");
}
for(final String curveName : curveNames) {
discountFactor *= model.getDiscountCurve(curveName).getDiscountFactor(model, maturity);
}
}
else {
for(final DiscountCurve curve : curves) {
discountFactor *= curve.getDiscountFactor(model, maturity);
}
}
return discountFactor;
}
@Override
public double getValue(final AnalyticModel model, final double time) {
return getDiscountFactor(model, time);
}
@Override
public double[] getParameter() {
return null;
}
@Override
public void setParameter(final double[] parameter) {
}
@Override
public CurveBuilder getCloneBuilder() {
// TODO Auto-generated method stub
return null;
}
}