Par Sensitivity to only selected Nodes of the Fwd curve


I have a vanilla IRS 6M fixed vs 3M USD Libor floating trade and I am building my Forward Curve as follows. From what I have learned from this forum, we do not add Cash Deposits to forward curve, also there is no 2 weeks or 1 Month node, the first one is a 3 Month ED future.

//Add the LIBOR fixing as the swap is off market, the start date is in the past
  BusinessDayAdjustment bda = BusinessDayAdjustment.of(FOLLOWING, USNY);
  TermDepositConvention convention = ImmutableTermDepositConvention.of("USD-Dep", USD, bda, ACT_360, DaysAdjustment.ofBusinessDays(0, USNY));
  QuoteId quoteId = QuoteId.of(StandardId.of(SCHEME, "USD-Fixing-3M"));
  builder.addValue(quoteId, 0.0170725);
  //Add the first ED Future
  IborFutureConvention futureConvention = ImmutableIborFutureConvention.of(USD_LIBOR_3M, DateSequences.QUARTERLY_IMM);
  quoteId = QuoteId.of(StandardId.of(SCHEME, "USD-ED1"));
  forwardCurveNodes.add(IborFutureCurveNode.of(IborFutureTemplate.of(YearMonth.of(2020, 3), futureConvention), 
  builder.addValue(quoteId, 0.983429);
  //Add more ED futures and then par swaps start at 3Y mark

This works as expected and the NPV of the swap is very close to vendor’s NPV. Now, I need to get par sensitivities only for certain points of the curve (2W,1M,3M,6M,1Y,2Y…30Y). If I do the below, I get sensitivity to each node that was used to build the Fwd curve but I do not want that. How do I go about asking for only certain par rate sensitivities ? Is Linear Interpolation is good option to get 2W and 1M sensitivity?

SwapTradeCalculations swapTradeCalc = new SwapTradeCalculations(SWAP_PRICER);
CurrencyParameterSensitivities ps = swapTradeCalc.pv01MarketQuoteBucketed(trade, result);


You need to use a SyntheticRatesCurveCalibrator to fit a curve with the instruments you want to see sensitivities against with your current curve as an input. That will allow you to project a 6M par dv01 from a curve using futures.

Thank you. I was able to use SyntheticRatesCurveCalibrator as follows:

    RatesCurveCalibrator CALIBRATOR = RatesCurveCalibrator.of(1e-9, 1e-9, 100);
CalibrationMeasures MQ_MEASURES = CalibrationMeasures.MARKET_QUOTE;
SyntheticRatesCurveCalibrator CALIBRATOR_SYNTHETIC = SyntheticRatesCurveCalibrator.of(CALIBRATOR, 

//ratesCurveGroupDef - Full OIS Discount curve and Libor 3M forward curve with quotes
RatesProvider result = CALIBRATOR.calibrate(ratesCurveGroupDef, ALL_QUOTES, REF_DATA);

//ratesCurveGroupDefSIMM - OIS Discount curve and Libor 3M forward curve with Only SIMM tenors and no 
RatesProvider resultSIMM = CALIBRATOR_SYNTHETIC.calibrate(ratesCurveGroupDefSIMM, result, 

//Compute SIMM sensitivities
PointSensitivities ptsSIMM = SWAP_PRICER.presentValueSensitivity(trade,resultSIMM);
CurrencyParameterSensitivities psSIMM = resultSIMM.parameterSensitivity(ptsSIMM);
CurrencyParameterSensitivities mqsSIMM = MQC.sensitivity(psSIMM, resultSIMM);

The vanilla swap had an effective date of Dec 13th, 2019 and maturity date of Dec 13th, 2029.
The fixed coupon is 1.753% and notional is 100MM.
The valuation date is Feb 11th, 2020
Following is the DV01 analysis. Hopefully it makes sense.
Thanks again.