protected static ValueRequirement getCurveRequirement(
     final String curveName,
     final String forwardCurveName,
     final String fundingCurveName,
     final String calculationMethod,
     final Currency currency) {
   final ValueProperties.Builder properties;
   if (calculationMethod.equals(InterpolatedDataProperties.CALCULATION_METHOD_NAME)) {
     properties =
         ValueProperties.builder()
             .with(ValuePropertyNames.CURVE, curveName)
             .withAny(InterpolatedDataProperties.LEFT_X_EXTRAPOLATOR_NAME)
             .withAny(InterpolatedDataProperties.RIGHT_X_EXTRAPOLATOR_NAME)
             .with(ValuePropertyNames.CURVE_CALCULATION_METHOD, calculationMethod);
   } else {
     properties =
         ValueProperties.builder()
             .with(ValuePropertyNames.CURVE, curveName)
             .with(YieldCurveFunction.PROPERTY_FORWARD_CURVE, forwardCurveName)
             .with(YieldCurveFunction.PROPERTY_FUNDING_CURVE, fundingCurveName)
             .with(ValuePropertyNames.CURVE_CALCULATION_METHOD, calculationMethod);
   }
   return new ValueRequirement(
       ValueRequirementNames.YIELD_CURVE,
       ComputationTargetType.PRIMITIVE,
       currency.getUniqueId(),
       properties.get());
 }
コード例 #2
0
 private ValueRequirement getVolatilityRequirement(final String surface, final Currency currency) {
   final ValueProperties properties =
       ValueProperties.builder()
           .with(ValuePropertyNames.SURFACE, surface)
           .with(
               InstrumentTypeProperties.PROPERTY_SURFACE_INSTRUMENT_TYPE,
               InstrumentTypeProperties.SWAPTION_ATM)
           .get();
   return new ValueRequirement(
       ValueRequirementNames.INTERPOLATED_VOLATILITY_SURFACE,
       ComputationTargetType.PRIMITIVE,
       currency.getUniqueId(),
       properties);
 }
 private static YieldAndDiscountCurve getCurve(
     final FunctionInputs inputs, final Currency currency, final String curveName) {
   final ValueProperties.Builder properties =
       ValueProperties.builder().with(ValuePropertyNames.CURVE, curveName);
   final Object curveObject =
       inputs.getValue(
           new ValueRequirement(
               ValueRequirementNames.YIELD_CURVE,
               ComputationTargetType.PRIMITIVE,
               currency.getUniqueId(),
               properties.get()));
   if (curveObject == null) {
     throw new OpenGammaRuntimeException("Could not get " + curveName + " curve");
   }
   final YieldAndDiscountCurve curve = (YieldAndDiscountCurve) curveObject;
   return curve;
 }
コード例 #4
0
  @Override
  public Set<ValueRequirement> getRequirements(
      final FunctionCompilationContext context,
      final ComputationTarget target,
      final ValueRequirement desiredValue) {
    final LegacyVanillaCDSSecurity cds = (LegacyVanillaCDSSecurity) target.getSecurity();
    final Currency ccy = cds.getNotional().getCurrency();
    final CreditCurveIdentifier isdaIdentifier = getISDACurveIdentifier(cds);
    final CreditCurveIdentifier spreadIdentifier = getSpreadCurveIdentifier(cds);

    final String isdaOffset = desiredValue.getConstraint(ISDAFunctionConstants.ISDA_CURVE_OFFSET);
    if (isdaOffset == null) {
      return null;
    }

    final String isdaCurveDate = desiredValue.getConstraint(ISDAFunctionConstants.ISDA_CURVE_DATE);
    if (isdaCurveDate == null) {
      return null;
    }

    final String isdaCurveMethod =
        desiredValue.getConstraint(ISDAFunctionConstants.ISDA_IMPLEMENTATION);
    if (isdaCurveMethod == null) {
      return null;
    }

    // isda curve
    final ValueProperties isdaProperties =
        ValueProperties.builder()
            .with(ValuePropertyNames.CURVE, isdaIdentifier.toString())
            .with(
                ValuePropertyNames.CURVE_CALCULATION_METHOD, ISDAFunctionConstants.ISDA_METHOD_NAME)
            .with(ISDAFunctionConstants.ISDA_CURVE_OFFSET, isdaOffset)
            .with(ISDAFunctionConstants.ISDA_CURVE_DATE, isdaCurveDate)
            .with(ISDAFunctionConstants.ISDA_IMPLEMENTATION, isdaCurveMethod)
            .get();
    final ValueRequirement isdaRequirment =
        new ValueRequirement(
            ValueRequirementNames.YIELD_CURVE,
            ComputationTargetType.CURRENCY,
            ccy.getUniqueId(),
            isdaProperties);

    final String quoteConvention =
        desiredValue.getConstraint(ISDAFunctionConstants.CDS_QUOTE_CONVENTION);
    if (quoteConvention == null) {
      return null;
    }

    final String bucketTenors =
        desiredValue.getConstraint(ISDAFunctionConstants.ISDA_BUCKET_TENORS);
    if (bucketTenors == null) {
      return null;
    }

    // market  spreads
    final ValueProperties spreadProperties =
        ValueProperties.builder()
            .with(ISDAFunctionConstants.CDS_QUOTE_CONVENTION, quoteConvention)
            .with(
                ValuePropertyNames.CURVE_CALCULATION_METHOD, ISDAFunctionConstants.ISDA_METHOD_NAME)
            .with(ISDAFunctionConstants.ISDA_CURVE_OFFSET, isdaOffset)
            .with(ISDAFunctionConstants.ISDA_CURVE_DATE, isdaCurveDate)
            .with(ISDAFunctionConstants.ISDA_IMPLEMENTATION, isdaCurveMethod)
            .with(ISDAFunctionConstants.ISDA_BUCKET_TENORS, bucketTenors)
            .get();
    final ValueRequirement spreadRequirment =
        new ValueRequirement(
            ValueRequirementNames.BUCKETED_SPREADS, target.toSpecification(), spreadProperties);
    final ValueRequirement pillarRequirment =
        new ValueRequirement(
            ValueRequirementNames.PILLAR_SPREADS, target.toSpecification(), spreadProperties);
    final ValueRequirement creditCurveRequirement =
        new ValueRequirement(
            ValueRequirementNames.HAZARD_RATE_CURVE, target.toSpecification(), spreadProperties);

    // get individual spread for this cds (ignore business day adjustment on either)
    final Period period =
        Period.between(
            cds.getStartDate().toLocalDate().withDayOfMonth(20),
            cds.getMaturityDate().toLocalDate().withDayOfMonth(20));
    final ValueRequirement cdsSpreadRequirement =
        new ValueRequirement(
            MarketDataRequirementNames.MARKET_VALUE,
            ComputationTargetType.PRIMITIVE,
            ExternalId.of("Tenor", period.toString()));

    final CdsRecoveryRateIdentifier recoveryRateIdentifier =
        cds.accept(new CreditSecurityToRecoveryRateVisitor(context.getSecuritySource()));
    final ValueRequirement recoveryRateRequirement =
        new ValueRequirement(
            "PX_LAST", ComputationTargetType.PRIMITIVE, recoveryRateIdentifier.getExternalId());

    return Sets.newHashSet(
        isdaRequirment,
        spreadRequirment,
        cdsSpreadRequirement,
        creditCurveRequirement,
        pillarRequirment,
        recoveryRateRequirement);
  }