package com.opengamma.financial.analytics.test.unittest.dealstest; import java.util.HashMap; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.io.Resource; import org.testng.annotations.Test; import org.threeten.bp.ZonedDateTime; import com.google.common.collect.Lists; import com.opengamma.analytics.financial.forex.method.FXMatrix; import com.opengamma.analytics.financial.instrument.cash.DepositZeroDefinition; import com.opengamma.analytics.financial.instrument.fra.ForwardRateAgreementDefinition; import com.opengamma.analytics.financial.instrument.swap.SwapDefinition; import com.opengamma.analytics.financial.interestrate.PresentValueCalculator; import com.opengamma.analytics.financial.interestrate.YieldCurveBundle; import com.opengamma.analytics.financial.model.interestrate.curve.DiscountCurve; import com.opengamma.analytics.math.curve.InterpolatedDoublesCurve; import com.opengamma.financial.analytics.conversion.FRASecurityConverterDeprecated; import com.opengamma.financial.analytics.conversion.SwapSecurityConverterDeprecated; import com.opengamma.financial.analytics.conversion.ZeroDepositConverter; import com.opengamma.financial.analytics.test.IRCurveParser; import com.opengamma.financial.analytics.test.IRSwapSecurity; import com.opengamma.financial.analytics.test.IRSwapTradeParser; import com.opengamma.financial.mock.AbstractMockSourcesTest; import com.opengamma.util.ResourceUtils; import com.opengamma.util.money.Currency; import com.opengamma.util.test.TestGroup; import com.opengamma.util.time.DateUtils; /** * Unit tests for USD deals */ @Test(groups = TestGroup.UNIT) public class USDTest extends AbstractMockSourcesTest { private static final Logger s_logger = LoggerFactory.getLogger(USDTest.class); private static final String CURRENCY = "USD"; private static final ZonedDateTime TODAY = DateUtils.getUTCDate(2013, 10, 14); private static final String ON_NAME = "USD_FEDFUNDS_1D_ERS"; private static final String ONE_MONTH_NAME = "USD_LIBOR_1M_ERS"; private static final String THREE_MONTH_NAME = "USD_LIBOR_3M_ERS"; private static final String SIX_MONTH_NAME = "USD_LIBOR_6M_ERS"; final static String discountingCurvename = "Discounting"; final static String forward1MCurveName = "Forward 1M"; final static String forward3MCurveName = "Forward 3M"; final static String forward6MCurveName = "Forward 6M"; final static Currency ccy = Currency.USD; private static final String PAY_CURRENCY = "LEG1_CCY"; private static final PresentValueCalculator PVC = PresentValueCalculator.getInstance(); public void test() throws Exception { IRSwapTradeParser tradeParser = new IRSwapTradeParser(); Resource resource = ResourceUtils.createResource("classpath:com/opengamma/financial/analytics/test/Trades14Oct.csv"); List<IRSwapSecurity> trades = tradeParser.parseCSVFile(resource.getURL()); List<IRSwapSecurity> tradesClean = Lists.newArrayList(); for (IRSwapSecurity irSwapSecurity : trades) { String currency = irSwapSecurity.getRawInput().getString(PAY_CURRENCY); if (currency.equals(CURRENCY)) { tradesClean.add(irSwapSecurity); } } // Build the curve bundle final HashMap<String, Currency> ccyMap = new HashMap<>(); ccyMap.put(discountingCurvename, ccy); ccyMap.put(forward3MCurveName, ccy); ccyMap.put(forward6MCurveName, ccy); final FXMatrix fx = new FXMatrix(ccy); final YieldCurveBundle curvesClean = new YieldCurveBundle(fx, ccyMap); IRCurveParser curveParser = new IRCurveParser(); Resource resourceCurve = ResourceUtils.createResource("classpath:com/opengamma/financial/analytics/test/Base_Curves_20131014_Clean.csv"); List<InterpolatedDoublesCurve> curves = curveParser.parseCSVFile(resourceCurve.getURL()); for (InterpolatedDoublesCurve interpolatedDoublesCurve : curves) { String name = interpolatedDoublesCurve.getName(); if (name.equals(ON_NAME)) { curvesClean.setCurve(discountingCurvename, DiscountCurve.from(interpolatedDoublesCurve)); } if (name.equals(ONE_MONTH_NAME)) { curvesClean.setCurve(forward1MCurveName, DiscountCurve.from(interpolatedDoublesCurve)); } if (name.equals(THREE_MONTH_NAME)) { curvesClean.setCurve(forward3MCurveName, DiscountCurve.from(interpolatedDoublesCurve)); } if (name.equals(SIX_MONTH_NAME)) { curvesClean.setCurve(forward6MCurveName, DiscountCurve.from(interpolatedDoublesCurve)); } } // Convert the swap security into a swap definition final SwapSecurityConverterDeprecated swapConverter = new SwapSecurityConverterDeprecated(_holidaySource, _conventionBundleSource, _regionSource, false); final FRASecurityConverterDeprecated fraConverter = new FRASecurityConverterDeprecated(_holidaySource, _regionSource, _conventionBundleSource); final ZeroDepositConverter ZeroCouponConverter = new ZeroDepositConverter(_conventionBundleSource, _holidaySource); List<SwapDefinition> swapsDefinition = Lists.newArrayList(); List<ForwardRateAgreementDefinition> frasDefinition = Lists.newArrayList(); List<DepositZeroDefinition> zcsDefinition = Lists.newArrayList(); /*for (IRSwapSecurity irSwapSecurity : tradesClean) { switch (irSwapSecurity.getRawInput().getString("PRODUCT_TYPE")) { case "SWAP": swapsDefinition.add((SwapDefinition) swapConverter.visitSwapSecurity(irSwapSecurity.getSwapSecurity())); // we don't treat the fra case at the moment case "FRA": frasDefinition.add((ForwardRateAgreementDefinition) fraConverter.visitSwapSecurity(irSwapSecurity.getSwapSecurity())); case "OIS": swapsDefinition.add((SwapDefinition) swapConverter.visitSwapSecurity(irSwapSecurity.getSwapSecurity())); // we don't treat the fra case at the moment case "ZCS": zcsDefinition.add((DepositZeroDefinition) ZeroCouponConverter.visitSwapSecurity(irSwapSecurity.getSwapSecurity())); } } */ // Load the historical time series from a csv file /* NonVersionedRedisHistoricalTimeSeriesSource source = new NonVersionedRedisHistoricalTimeSeriesSource(getJedisPool(), getRedisPrefix()); CMECurveFixingTSLoader loader = new CMECurveFixingTSLoader(source);*/ /* loader.loadCurveFixingCSVFile("/vols/ogdev/CME/curve-fixing/sample-cme-curve-fixing.csv"); HistoricalTimeSeries historicalTimeSeries = source.getHistoricalTimeSeries(UniqueId.of(ExternalSchemes.ISDA.getName(), "CHF-LIBOR-BBA-6M")); assertNotNull(historicalTimeSeries); LocalDateDoubleTimeSeries timeSeries = historicalTimeSeries.getTimeSeries(); assertNotNull(timeSeries); assertEquals(5996, timeSeries.size());*/ // convert the definition into a derivative /* List<Swap> swapDerivatives = Lists.newArrayList(); for (SwapDefinition swapDefinition : swapsDefinition) { swapDerivatives.add(swapDefinition.toDerivative(TODAY, data, curvesClean)); } List<Swap> frasDerivatives = Lists.newArrayList(); for (ForwardRateAgreementDefinition fraDefinition : frasDefinition) { frasDerivatives.add(fraDefinition.toDerivative(TODAY, data, curvesClean)); } List<Swap> zcsDerivatives = Lists.newArrayList(); for (DepositZeroDefinition zcDefinition : zcsDefinition) { zcsDerivatives.add(zcDefinition.toDerivative(TODAY, data, curvesClean)); }*/ // Check the npv s_logger.warn("Got {} trades", trades.size()); } }