SwaptionFactory.java
/*
* (c) Copyright Christian P. Fries, Germany. Contact: email@christian-fries.de.
*
* Created on 07.06.2014
*/
package net.finmath.montecarlo.interestrate.products;
import net.finmath.time.TimeDiscretization;
/**
* A factory (helper class) to create swaptions extending {@link AbstractTermStructureMonteCarloProduct}
* according to some (simplified) specifications.
*
* The class is useful if you like to create, e.g., calibration products depending
* on some parameters.
*
* @author Christian Fries
* @version 1.0
*/
public class SwaptionFactory {
private SwaptionFactory() {
}
public static TermStructureMonteCarloProduct createSwaption(final String className, final double swaprate, final TimeDiscretization swapTenor, final String valueUnitAsString) {
if(className.equals("SwaptionAnalyticApproximation")) {
final SwaptionAnalyticApproximation.ValueUnit valueUnit = SwaptionAnalyticApproximation.ValueUnit.valueOf(valueUnitAsString);
return new SwaptionAnalyticApproximation(swaprate, swapTenor.getAsDoubleArray(), valueUnit);
}
else if(className.equals("SwaptionSimple")) {
final SwaptionSimple.ValueUnit valueUnit = SwaptionSimple.ValueUnit.valueOf(valueUnitAsString);
return new SwaptionSimple(swaprate, swapTenor.getAsDoubleArray(), valueUnit);
}
else if(className.equals("SwaptionAnalyticApproximationRebonato")) {
final SwaptionAnalyticApproximationRebonato.ValueUnit valueUnit = SwaptionAnalyticApproximationRebonato.ValueUnit.valueOf(valueUnitAsString);
return new SwaptionAnalyticApproximationRebonato(swaprate, swapTenor.getAsDoubleArray(), valueUnit);
} else {
throw new RuntimeException("Unknown class: " + className);
}
}
}