Package com.opengamma.analytics.math.curve

Examples of com.opengamma.analytics.math.curve.NodalTenorDoubleCurve


  }

  @SuppressWarnings("unchecked")
  @Test
  public void testNodalDoubleCurve() {
    NodalTenorDoubleCurve c1 = NodalTenorDoubleCurve.from(new Tenor[] { Tenor.ONE_DAY, Tenor.ONE_YEAR }, new Double[] { 1.2345, 67.89 });
    NodalTenorDoubleCurve c2 = cycleObject(NodalTenorDoubleCurve.class, c1);
    assertTrue(c1.equals(c2));
  }
View Full Code Here


        _regionSource,
        recoveryRate);
    LegacyVanillaCreditDefaultSwapDefinition cds = converter.visitLegacyVanillaCDSSecurity(security);
    final StandardCDSQuotingConvention quoteConvention = StandardCDSQuotingConvention.parse(requirement.getConstraint(
        ISDAFunctionConstants.CDS_QUOTE_CONVENTION));
    final NodalTenorDoubleCurve spreadCurve = (NodalTenorDoubleCurve) inputs.getValue(ValueRequirementNames.BUCKETED_SPREADS);
    if (spreadCurve == null) {
      throw new OpenGammaRuntimeException("Bucketed spreads not available for " + getSpreadCurveIdentifier(security));
    }

    // get the isda curve
    final ISDACompliantYieldCurve yieldCurve = (ISDACompliantYieldCurve) inputs.getValue(ValueRequirementNames.YIELD_CURVE);
    if (yieldCurve == null) {
      throw new OpenGammaRuntimeException("Couldn't get isda curve");
    }

    final Double cdsQuoteDouble = (Double) inputs.getValue(MarketDataRequirementNames.MARKET_VALUE);
    if (cdsQuoteDouble == null) {
      throw new OpenGammaRuntimeException("Couldn't get spread for " + security);
    }
    final CDSAnalyticVisitor pricingVisitor = new CDSAnalyticVisitor(now.toLocalDate(),
                                                                     _holidaySource,
                                                                     _regionSource,
                                                                     recoveryRate);
    final CDSAnalytic pricingCDS = security.accept(pricingVisitor);
    final CDSQuoteConvention quote = SpreadCurveFunctions.getQuotes(security.getMaturityDate(),
                                                                    new double[]{cdsQuoteDouble},
                                                                    security.getParSpread(),
                                                                    quoteConvention,
                                                                    true)[0];
    final QuotedSpread quotedSpread = getQuotedSpread(quote,
                                                      security.isBuy() ? BuySellProtection.BUY : BuySellProtection.SELL,
                                                      yieldCurve,
                                                      pricingCDS,
                                                      security.getParSpread());

    ISDACompliantCreditCurve creditCurve;
    NodalTenorDoubleCurve modifiedSpreadCurve;
    NodalTenorDoubleCurve modifiedPillarCurve;

    if (IMMDateGenerator.isIMMDate(security.getMaturityDate())) {
      final String pillarString = requirement.getConstraint(ISDAFunctionConstants.ISDA_BUCKET_TENORS);
      final ZonedDateTime[] bucketDates = SpreadCurveFunctions.getPillarDates(now, pillarString);
      final ZonedDateTime[] pillarDates = bucketDates;
      double[] spreads = SpreadCurveFunctions.getSpreadCurveNew(spreadCurve,
                                                                bucketDates,
                                                                security.getStartDate(),
                                                                quoteConvention);
      Tenor[] tenors = SpreadCurveFunctions.getBuckets(pillarString);
      modifiedSpreadCurve = new NodalTenorDoubleCurve(tenors, ArrayUtils.toObject(spreads), true);
      modifiedPillarCurve = modifiedSpreadCurve; // for IMM buckets and spreads are the same
      //final CDSQuoteConvention[] quotes = SpreadCurveFunctions.getQuotes(security.getMaturityDate(), spreads, security.getParSpread(), quoteConvention, false);

      // CDS analytics for credit curve
      final CDSAnalytic[] creditAnalytics = new CDSAnalytic[pillarDates.length];
      for (int i = 0; i < creditAnalytics.length; i++) {
        final CDSAnalyticVisitor curveVisitor = new CDSAnalyticVisitor(now.toLocalDate(),
                                                                       _holidaySource,
                                                                       _regionSource,
                                                                       security.getStartDate().toLocalDate(),
                                                                       pillarDates[i].toLocalDate(),
                                                                       recoveryRate);
        creditAnalytics[i] = security.accept(curveVisitor);
      }
      creditCurve = CREDIT_CURVE_BUILDER.calibrateCreditCurve(pricingCDS, quotedSpread, yieldCurve);

    } else {
      // non IMM date - pillars set to fixed set
      final String pillarString = NON_IMM_PILLAR_TENORS;
      final String bucketString = requirement.getConstraint(ISDAFunctionConstants.ISDA_BUCKET_TENORS);
      final ZonedDateTime[] bucketDates = SpreadCurveFunctions.getPillarDates(now, bucketString);
      final ZonedDateTime[] pillarDates = SpreadCurveFunctions.getPillarDates(now, pillarString);
      double[] bucketSpreads = SpreadCurveFunctions.getSpreadCurveNew(spreadCurve,
                                                                      bucketDates,
                                                                      security.getStartDate(),
                                                                      quoteConvention);
      double[] pillarSpreads = SpreadCurveFunctions.getSpreadCurveNew(spreadCurve,
                                                                      pillarDates,
                                                                      security.getStartDate(),
                                                                      quoteConvention);
      Tenor[] bucketTenors = SpreadCurveFunctions.getBuckets(bucketString);
      Tenor[] pillarTenors = SpreadCurveFunctions.getBuckets(pillarString);
      modifiedSpreadCurve = new NodalTenorDoubleCurve(bucketTenors, ArrayUtils.toObject(bucketSpreads), true);
      modifiedPillarCurve = new NodalTenorDoubleCurve(pillarTenors, ArrayUtils.toObject(pillarSpreads), true);
      final CDSQuoteConvention[] quotes = SpreadCurveFunctions.getQuotes(security.getMaturityDate(),
                                                                         pillarSpreads,
                                                                         security.getParSpread(),
                                                                         quoteConvention,
                                                                         false);
View Full Code Here

      throw new OpenGammaRuntimeException("Couldn't get isda curve");
    }
    final ISDACompliantYieldCurve yieldCurve = (ISDACompliantYieldCurve) isdaObject;

    // spreads
    NodalTenorDoubleCurve spreadObject = (NodalTenorDoubleCurve) inputs.getValue(ValueRequirementNames.BUCKETED_SPREADS);
    if (spreadObject == null) {
      throw new OpenGammaRuntimeException("Unable to get spreads");
    }
    final double[] spreads = ArrayUtils.toPrimitive(spreadObject.getYData());
    //final String pillarString = IMMDateGenerator.isIMMDate(security.getMaturityDate()) ? requirement.getConstraint(ISDAFunctionConstants.ISDA_BUCKET_TENORS) : ISDACompliantCreditCurveFunction.NON_IMM_PILLAR_TENORS;
    final ZonedDateTime[] bucketDates = SpreadCurveFunctions.getPillarDates(now, spreadObject.getXData());
    final CDSQuoteConvention[] quotes = SpreadCurveFunctions.getQuotes(security.getMaturityDate(), spreads, security.getParSpread(), quoteConvention, false);

    // spreads
    NodalTenorDoubleCurve pillarObject = (NodalTenorDoubleCurve) inputs.getValue(ValueRequirementNames.PILLAR_SPREADS);
    if (pillarObject == null) {
      throw new OpenGammaRuntimeException("Unable to get pillars");
    }

    // CDS analytics for credit curve (possible performance improvement if earlier result obtained)
    //final LegacyVanillaCreditDefaultSwapDefinition curveCDS = cds.withStartDate(now);
    //security.setStartDate(now); // needed for curve instruments
    final CDSAnalytic[] bucketCDSs = new CDSAnalytic[bucketDates.length];
    for (int i = 0; i < bucketCDSs.length; i++) {
      //security.setMaturityDate(bucketDates[i]);
      final CDSAnalyticVisitor visitor = new CDSAnalyticVisitor(now.toLocalDate(), _holidaySource, _regionSource, security.getStartDate().toLocalDate(), bucketDates[i].toLocalDate(), recoveryRate);
      bucketCDSs[i] = security.accept(visitor);
    }

    final ZonedDateTime[] pillarDates = SpreadCurveFunctions.getPillarDates(now, pillarObject.getXData());
    final CDSAnalytic[] pillarCDSs = new CDSAnalytic[pillarDates.length];
    for (int i = 0; i < pillarCDSs.length; i++) {
      //security.setMaturityDate(bucketDates[i]);
      final CDSAnalyticVisitor visitor = new CDSAnalyticVisitor(now.toLocalDate(), _holidaySource, _regionSource, security.getStartDate().toLocalDate(), pillarDates[i].toLocalDate(), recoveryRate);
      pillarCDSs[i] = security.accept(visitor);
    }

    final ISDACompliantCreditCurve creditCurve = (ISDACompliantCreditCurve) inputs.getValue(ValueRequirementNames.HAZARD_RATE_CURVE);
    if (creditCurve == null) {
      throw new OpenGammaRuntimeException("Couldnt get credit curve");
    }

    //final CDSAnalytic analytic = CDSAnalyticConverter.create(cds, now.toLocalDate());
    final CDSAnalyticVisitor visitor = new CDSAnalyticVisitor(now.toLocalDate(), _holidaySource, _regionSource, recoveryRate);
    final CDSAnalytic analytic = security.accept(visitor);
    final BuySellProtection buySellProtection = security.isBuy() ? BuySellProtection.BUY : BuySellProtection.SELL;
    final Double cdsQuoteDouble = (Double) inputs.getValue(MarketDataRequirementNames.MARKET_VALUE);
    if (cdsQuoteDouble == null) {
      throw new OpenGammaRuntimeException("Couldn't get spread for " + security);
    }
    final CDSQuoteConvention quote = SpreadCurveFunctions.getQuotes(security.getMaturityDate(), new double[] {cdsQuoteDouble}, security.getParSpread(), quoteConvention, true)[0];

    final double notional = security.getNotional().getAmount();
    final double coupon = security.getParSpread() * ONE_BPS;
    final PointsUpFront puf = getPointsUpfront(quote, buySellProtection, yieldCurve, analytic, creditCurve);
    final double accruedPremium = analytic.getAccruedPremium(coupon) * notional;
    final int accruedDays = analytic.getAccuredDays();
    final double quotedSpread = getQuotedSpread(quote, puf, buySellProtection, yieldCurve, analytic).getQuotedSpread();
    final double upfrontAmount = getUpfrontAmount(analytic, puf, notional, buySellProtection);
    final double cleanPV = puf.getPointsUpFront() * notional;
    final double cleanPrice = getCleanPrice(puf);
    final TenorLabelledMatrix1D bucketedCS01 = getBucketedCS01(analytic, bucketCDSs, spreadObject.getXData(), quote, notional, yieldCurve, creditCurve);
    final double parallelCS01 = getParallelCS01(quote, analytic, yieldCurve, notional, pillarCDSs, ArrayUtils.toPrimitive(pillarObject.getYData()));

    final Set<ComputedValue> results = Sets.newHashSetWithExpectedSize(_valueRequirements.length);
    results.add(new ComputedValue(new ValueSpecification(ValueRequirementNames.ACCRUED_PREMIUM, target.toSpecification(), properties), accruedPremium));
    results.add(new ComputedValue(new ValueSpecification(ValueRequirementNames.ACCRUED_DAYS, target.toSpecification(), properties), accruedDays));
    results.add(new ComputedValue(new ValueSpecification(ValueRequirementNames.QUOTED_SPREAD, target.toSpecification(), properties), quotedSpread / ONE_BPS));
View Full Code Here

            throw new IllegalArgumentException(dataEntry.toString());
          }
          times.add(Tenor.of(period));
          rates.add(dataEntry.getValue());
        }
        final NodalTenorDoubleCurve curve = new NodalTenorDoubleCurve(times.toArray(new Tenor[times.size()]), rates.toArray(new Double[rates.size()]), false);

        final ValueProperties properties = createValueProperties().get();
        final ValueSpecification spec = new ValueSpecification(ValueRequirementNames.BUCKETED_SPREADS, target.toSpecification(), properties);
        return Collections.singleton(new ComputedValue(spec, curve));
      }
View Full Code Here

TOP

Related Classes of com.opengamma.analytics.math.curve.NodalTenorDoubleCurve

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.