package net.objectlab.kit.datecalc.gist;
import java.util.HashSet;
import java.util.Set;
import net.objectlab.kit.datecalc.common.CurrencyDateCalculator;
import net.objectlab.kit.datecalc.common.CurrencyDateCalculatorBuilder;
import net.objectlab.kit.datecalc.common.DefaultHolidayCalendar;
import net.objectlab.kit.datecalc.common.HolidayCalendar;
import net.objectlab.kit.datecalc.common.SpotLag;
import net.objectlab.kit.datecalc.common.StandardTenor;
import net.objectlab.kit.datecalc.common.ccy.DefaultCurrencyCalculatorConfig;
import net.objectlab.kit.datecalc.joda.LocalDateCurrencyDateCalculator;
import net.objectlab.kit.datecalc.joda.LocalDateForwardHandler;
import net.objectlab.kit.datecalc.joda.LocalDateKitCalculatorsFactory;
import org.joda.time.LocalDate;
public class GistCurrencyCalculatorExample {
public static void main(final String[] args) {
simpleEurUsd();
simpleEurUsd1M();
crossEurGbp();
crossGbpJpyWithHolidays();
crossEurMxn();
simpleUsdAed();
simpleUsdJod();
simpleAudUsd();
}
private static void simpleUsdJod() {
final LocalDateCurrencyDateCalculator calc = LocalDateKitCalculatorsFactory.forwardCurrencyDateCalculator(CurrencyDateCalculator.USD_CODE,
"JOD", SpotLag.T_2);
final LocalDate startDate = new LocalDate(2006, 7, 6); // Thursday
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects Tuesday 11 Jul");
}
private static void simpleUsdAed() {
final LocalDateCurrencyDateCalculator calc = LocalDateKitCalculatorsFactory.forwardCurrencyDateCalculator(CurrencyDateCalculator.USD_CODE,
"AED", SpotLag.T_2);
final LocalDate startDate = new LocalDate(2006, 7, 6); // Thursday
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects Monday 10 Jul");
}
private static void crossGbpJpyWithHolidays() {
final Set<LocalDate> gbpHholidays = new HashSet<LocalDate>();
gbpHholidays.add(new LocalDate("2014-08-04"));
final HolidayCalendar<LocalDate> gbpCalendar = new DefaultHolidayCalendar<LocalDate>(gbpHholidays, new LocalDate("2014-01-01"),
new LocalDate("2014-12-31"));
LocalDateKitCalculatorsFactory.getDefaultInstance().registerHolidays("GBP", gbpCalendar);
final Set<LocalDate> jpyHolidays = new HashSet<LocalDate>();
jpyHolidays.add(new LocalDate("2014-08-05"));
final HolidayCalendar<LocalDate> jpyCalendar = new DefaultHolidayCalendar<LocalDate>(jpyHolidays, new LocalDate("2014-01-01"), new LocalDate(
"2014-12-31"));
LocalDateKitCalculatorsFactory.getDefaultInstance().registerHolidays("JPY", jpyCalendar);
final LocalDateCurrencyDateCalculator calc = LocalDateKitCalculatorsFactory.forwardCurrencyDateCalculator("GBP", "JPY", SpotLag.T_2);
// set startDate, this will also set the current business date.
final LocalDate startDate = new LocalDate(2014, 8, 1); // Friday
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 6 Aug");
}
private static void crossEurMxn() {
final Set<LocalDate> holidays = new HashSet<LocalDate>();
holidays.add(new LocalDate("2006-07-04"));
// create the HolidayCalendar ASSUMING that the set covers 2006!
final HolidayCalendar<LocalDate> usdCalendar = new DefaultHolidayCalendar<LocalDate>(holidays, new LocalDate("2006-01-01"), new LocalDate(
"2006-12-31"));
final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() //
.currencyPair("EUR", "MXN", SpotLag.T_2) //
.currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig())//
.crossCcyCalendar(usdCalendar) //
.tenorHolidayHandler(new LocalDateForwardHandler());
final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder);
LocalDate startDate = new LocalDate(2006, 6, 30);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 5 Jul");
startDate = new LocalDate(2006, 7, 2);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 6 Jul");
startDate = new LocalDate(2006, 7, 3);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 6 Jul");
}
private static void simpleEurUsd() {
final Set<LocalDate> holidays = new HashSet<LocalDate>();
holidays.add(new LocalDate("2006-07-04"));
// create the HolidayCalendar ASSUMING that the set covers 2006!
final HolidayCalendar<LocalDate> usdCalendar = new DefaultHolidayCalendar<LocalDate>(holidays, new LocalDate("2006-01-01"), new LocalDate(
"2006-12-31"));
final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() //
.currencyPair("EUR", CurrencyDateCalculator.USD_CODE, SpotLag.T_2) //
.currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig())//
.crossCcyCalendar(usdCalendar) //
.ccy2Calendar(usdCalendar)//
.tenorHolidayHandler(new LocalDateForwardHandler());
final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder);
LocalDate startDate = new LocalDate(2006, 6, 30);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 5 Jul");
startDate = new LocalDate(2006, 7, 2);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 5 Jul");
startDate = new LocalDate(2006, 7, 3);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 5 Jul");
}
private static void simpleAudUsd() {
final Set<LocalDate> holidays = new HashSet<LocalDate>();
holidays.add(new LocalDate("2015-01-19"));
final HolidayCalendar<LocalDate> usdCalendar = new DefaultHolidayCalendar<LocalDate>(holidays, new LocalDate("2006-01-01"), new LocalDate(
"2015-12-31"));
final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() //
.currencyPair("AUD", CurrencyDateCalculator.USD_CODE, SpotLag.T_2) //
.currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig())//
.ccy2Calendar(usdCalendar)//
.tenorHolidayHandler(new LocalDateForwardHandler());
final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder);
LocalDate startDate = new LocalDate(2015, 1, 16);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 20 Jan");
}
private static void simpleEurUsd1M() {
final LocalDateCurrencyDateCalculator calc = LocalDateKitCalculatorsFactory.forwardCurrencyDateCalculator("EUR", "USD", SpotLag.T_2);
LocalDate startDate = new LocalDate(2006, 6, 26);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 30 Jun");
System.out.println(calc.getName() + " TD: " + startDate + " 1-M " + calc.calculateTenorDate(startDate, StandardTenor.T_1M)
+ " expects 30 Jul");
}
private static void crossEurGbp() {
final Set<LocalDate> holidays = new HashSet<LocalDate>();
holidays.add(new LocalDate("2006-07-04"));
// create the HolidayCalendar ASSUMING that the set covers 2006!
final HolidayCalendar<LocalDate> usdCalendar = new DefaultHolidayCalendar<LocalDate>(holidays, new LocalDate("2006-01-01"), new LocalDate(
"2006-12-31"));
final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() //
.currencyPair("EUR", "GBP", SpotLag.T_2) //
.currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig())//
.crossCcyCalendar(usdCalendar) //
.tenorHolidayHandler(new LocalDateForwardHandler());
final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder);
LocalDate startDate = new LocalDate(2006, 7, 2);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 5 Jul");
startDate = new LocalDate(2006, 6, 30);
System.out.println(calc.getName() + " TD: " + startDate + " Spot " + calc.calculateSpotDate(startDate) + " expects 5 Jul");
}
}