package net.objectlab.kit.datecalc.gist; import java.util.HashSet; import java.util.Set; 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.LocalDateModifiedFollowingHandler; import org.joda.time.LocalDate; public class GistScottExample { public static void main(final String[] args) { example1NoHolidays(); example2EURHolidays(); example3USDEURHolidays(); exampleBX1MNoHolidays(); exampleBX1MOctober(); exampleBX1MJanuary(); } private static void exampleBX1MJanuary() { final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() // .currencyPair("EUR", "USD", SpotLag.T_2) // .tenorHolidayHandler(new LocalDateForwardHandler()) // Forward // Will be used for finding Working Weeks if not provided and Latin American ccy USD handling. .currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig()); final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder); LocalDate startDate = new LocalDate(2014, 1, 29); System.out.println(calc.getName() + " BX JAN No holiday TD: " + startDate + " Calculated Spot " + calc.calculateSpotDate(startDate) + " expects 31 Jan!"); System.out.println(calc.getName() + " BX JAN No holiday TD: " + startDate + " Calculated 1M " + calc.calculateTenorDate(startDate, StandardTenor.T_1M) + " expects 28-Feb "); } private static void exampleBX1MOctober() { final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() // .currencyPair("EUR", "USD", SpotLag.T_2) // .tenorHolidayHandler(new LocalDateForwardHandler()) // Forward // Will be used for finding Working Weeks if not provided and Latin American ccy USD handling. .currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig()); final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder); LocalDate startDate = new LocalDate(2014, 10, 28); System.out.println(calc.getName() + " BX Oct No holiday TD: " + startDate + " Calculated Spot " + calc.calculateSpotDate(startDate) + " expects 30 Oct!"); System.out.println(calc.getName() + " BX Oct No holiday TD: " + startDate + " Calculated 1M " + calc.calculateTenorDate(startDate, StandardTenor.T_1M) + " expects 1-Dec as the given handler handled is a LocalDateForwardHandler "); final CurrencyDateCalculatorBuilder<LocalDate> standardBuilder = new CurrencyDateCalculatorBuilder<LocalDate>() // .currencyPair("EUR", "USD", SpotLag.T_2) // .tenorHolidayHandler(new LocalDateModifiedFollowingHandler()) // MODIFIED Forward // Will be used for finding Working Weeks if not provided and Latin American ccy USD handling. .currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig()); final LocalDateCurrencyDateCalculator standardCalc = new LocalDateCurrencyDateCalculator(standardBuilder); System.out.println(calc.getName() + " BX Oct No holiday TD: " + startDate + " Calculated 1M " + standardCalc.calculateTenorDate(startDate, StandardTenor.T_1M) + " expects 28-Nov as the given handler handled is a LocalDateModifiedFollowingHandler "); } private static void exampleBX1MNoHolidays() { final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() // .currencyPair("EUR", "USD", SpotLag.T_2) // .tenorHolidayHandler(new LocalDateForwardHandler()) // Forward // Will be used for finding Working Weeks if not provided and Latin American ccy USD handling. .currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig()); final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder); LocalDate startDate = new LocalDate(2014, 6, 26); System.out.println(calc.getName() + " BX Ex1 No holiday TD: " + startDate + " Calculated Spot " + calc.calculateSpotDate(startDate) + " expects 30 Jun!"); System.out.println(calc.getName() + " BX Ex1 No holiday TD: " + startDate + " Calculated 1M " + calc.calculateTenorDate(startDate, StandardTenor.T_1M) + " expects 30 Jul"); startDate = new LocalDate(2014, 10, 28); System.out.println(calc.getName() + " BX Ex1 No holiday TD: " + startDate + " Calculated Spot " + calc.calculateSpotDate(startDate) + " expects 30 Oct!"); System.out.println(calc.getName() + " BX Ex1 No holiday TD: " + startDate + " Calculated 1M " + calc.calculateTenorDate(startDate, StandardTenor.T_1M) + " expects 01-Dec"); } private static void example1NoHolidays() { final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() // .currencyPair("EUR", "USD", SpotLag.T_2) // .tenorHolidayHandler(new LocalDateForwardHandler()) // Forward // Will be used for finding Working Weeks if not provided and Latin American ccy USD handling. .currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig()); final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder); final LocalDate startDate = new LocalDate(2014, 7, 1); System.out.println(calc.getName() + " Ex1 No holiday TD: " + startDate + " Calculated Spot " + calc.calculateSpotDate(startDate) + " expects 3 Jul"); } private static void example2EURHolidays() { final Set<LocalDate> holidays = new HashSet<LocalDate>(); holidays.add(new LocalDate("2014-07-03")); // create the HolidayCalendar ASSUMING that the set covers 2006! final HolidayCalendar<LocalDate> eurCalendar = new DefaultHolidayCalendar<LocalDate>(holidays, new LocalDate("2014-01-01"), new LocalDate( "2014-12-31")); final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() // .currencyPair("EUR", "USD", SpotLag.T_2) // .ccy1Calendar(eurCalendar) // .tenorHolidayHandler(new LocalDateForwardHandler()) // Forward // Will be used for finding Working Weeks if not provided and Latin American ccy USD handling. .currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig()); final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder); final LocalDate startDate = new LocalDate(2014, 7, 1); System.out.println(calc.getName() + " Ex2 EUR holiday TD: " + startDate + " Calculated Spot " + calc.calculateSpotDate(startDate) + " expects 4 Jul"); } private static void example3USDEURHolidays() { final Set<LocalDate> holidays = new HashSet<LocalDate>(); holidays.add(new LocalDate("2014-07-03")); // create the HolidayCalendar ASSUMING that the set covers 2006! final HolidayCalendar<LocalDate> eurCalendar = new DefaultHolidayCalendar<LocalDate>(holidays, new LocalDate("2014-01-01"), new LocalDate( "2014-12-31")); final Set<LocalDate> holidays2 = new HashSet<LocalDate>(); holidays2.add(new LocalDate("2014-07-04")); // create the HolidayCalendar ASSUMING that the set covers 2006! final HolidayCalendar<LocalDate> usdCalendar = new DefaultHolidayCalendar<LocalDate>(holidays2, new LocalDate("2014-01-01"), new LocalDate( "2014-12-31")); final CurrencyDateCalculatorBuilder<LocalDate> builder = new CurrencyDateCalculatorBuilder<LocalDate>() // .currencyPair("EUR", "USD", SpotLag.T_2) // .ccy1Calendar(eurCalendar) // .ccy2Calendar(usdCalendar) // .tenorHolidayHandler(new LocalDateForwardHandler()) // Forward // Will be used for finding Working Weeks if not provided and Latin American ccy USD handling. .currencyCalculatorConfig(new DefaultCurrencyCalculatorConfig()); final LocalDateCurrencyDateCalculator calc = new LocalDateCurrencyDateCalculator(builder); final LocalDate startDate = new LocalDate(2014, 7, 1); System.out.println(calc.getName() + " Ex3 USD+EUR holiday TD: " + startDate + " Calculated Spot " + calc.calculateSpotDate(startDate) + " expects 7 Jul"); } }