Beispiel #1
0
 /**
  * Merges a Hull-White curve provider and an FX matrix.
  *
  * @param provider The provider, not null
  * @param matrix The FX matrix, not null
  * @return The merged provider
  */
 public static HullWhiteOneFactorProviderDiscount mergeHullWhiteProviders(
     final HullWhiteOneFactorProviderDiscount provider, final FXMatrix matrix) {
   ArgumentChecker.notNull(provider, "provider");
   ArgumentChecker.notNull(matrix, "matrix");
   final HullWhiteOneFactorProviderDiscount result = provider.copy();
   final Collection<Currency> currencies = matrix.getCurrencies().keySet();
   final Iterator<Currency> iterator = currencies.iterator();
   if (currencies.size() > 0) {
     final Currency initialCurrency = iterator.next();
     while (iterator.hasNext()) {
       final Currency otherCurrency = iterator.next();
       result
           .getMulticurveProvider()
           .getFxRates()
           .addCurrency(
               initialCurrency, otherCurrency, matrix.getFxRate(initialCurrency, otherCurrency));
     }
   }
   return result;
 }
Beispiel #2
0
 /**
  * Merges Hull-White one-factor providers.
  *
  * @param providers The providers to merge, not null or empty
  * @return The merged providers
  */
 public static HullWhiteOneFactorProviderDiscount mergeHullWhiteProviders(
     final Collection<HullWhiteOneFactorProviderDiscount> providers) {
   ArgumentChecker.notNull(providers, "providers");
   ArgumentChecker.notEmpty(providers, "providers");
   final Iterator<HullWhiteOneFactorProviderDiscount> iter = providers.iterator();
   final HullWhiteOneFactorProviderDiscount result = iter.next().copy();
   while (iter.hasNext()) {
     final HullWhiteOneFactorProviderDiscount provider = iter.next().copy();
     final MulticurveProviderDiscount underlying = provider.getMulticurveProvider().copy();
     for (final Map.Entry<Currency, YieldAndDiscountCurve> entry :
         underlying.getDiscountingCurves().entrySet()) {
       result.setCurve(entry.getKey(), entry.getValue());
     }
     for (final Map.Entry<IborIndex, YieldAndDiscountCurve> entry :
         underlying.getForwardIborCurves().entrySet()) {
       result.setCurve(entry.getKey(), entry.getValue());
     }
     for (final Map.Entry<IndexON, YieldAndDiscountCurve> entry :
         underlying.getForwardONCurves().entrySet()) {
       result.setCurve(entry.getKey(), entry.getValue());
     }
     final FXMatrix matrix = underlying.getFxRates();
     final Collection<Currency> currencies = matrix.getCurrencies().keySet();
     final Iterator<Currency> iterator = currencies.iterator();
     if (currencies.size() > 0) {
       final Currency initialCurrency = iterator.next();
       while (iterator.hasNext()) {
         final Currency otherCurrency = iterator.next();
         underlying
             .getFxRates()
             .addCurrency(
                 initialCurrency, otherCurrency, matrix.getFxRate(initialCurrency, otherCurrency));
       }
     }
     // TODO actually merge.
   }
   return result;
 }