Unable to find index curve: GBP-LIBOR-6M exception

I’ve successfully calibrated a USD curve using your helpful example CalibrationZeroRateUsd2OisFuturesIrs. When I try to adapt this to a GBP curve I get the error “Unable to find index curve: GBP-LIBOR-6M”. Where should I specify this?

Is there a simple way to switch currencies when building discount curves using your built in market conventions?

Made some code change and now get the error “IllegalArgumentException: Array of x-values must be sorted and unique” Which array needs to be sorted?

I can’t tell for sure without more of a stack trace. However, when building a curve such as InterpolatedNodalCurve the x-values (which represent time) must be in order. If you are using the files to load from, you may find the “Clash Action” column useful, see here.

How can one see the interpolatedNodalcurve when calling Calibrate

I’m trying to adapt your example CalibrationZeroRateUsd2OisFuturesIrs for the GBP curve but I get the error :IllegalArgumentException: Array of x-values must be sorted and unique. I presume this is due the tenors of the Curve Group Definition not being ordered but I can’t see what the issue is. Is it the OIS discount curve or the Swaps curve? The curve group definition is shown below.

CurveGroupDefinition{name=GBP-DSCON-LIBOR6M, entries=[CurveGroupEntry{curveName=GBP-DSCON-OIS, discountCurrencies=[GBP], indices=[GBP-SONIA]}, CurveGroupEntry{curveName=GBP-LIBOR6M-IRS, discountCurrencies=[], indices=[GBP-LIBOR-6M]}], curveDefinitions=[InterpolatedNodalCurveDefinition{name=GBP-DSCON-OIS, xValueType=YearFraction, yValueType=ZeroRate, dayCount=Act/365F, nodes=[TermDepositCurveNode{template=TermDepositTemplate{depositPeriod=P1D, convention=GBP-Dep}, rateId=QuoteId{standardId=CALIBRATION~GBP-ON, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1D, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=1W, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-1W, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1W, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=2W, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-2W, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2W, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=3W, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-3W, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3W, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=1M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-1M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=2M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-2M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=3M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-3M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=6M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-6M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=6M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=9M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-9M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=9M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=1Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-1Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=2Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-2Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=3Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-3Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=4Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-4Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=4Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=5Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-5Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=5Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=7Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-7Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=7Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=10Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-10Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=10Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=15Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-15Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=15Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=20Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-20Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=20Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=30Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-30Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=30Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}], interpolator=NaturalCubicSpline, extrapolatorLeft=Flat, extrapolatorRight=Flat}, InterpolatedNodalCurveDefinition{name=GBP-LIBOR6M-IRS, xValueType=YearFraction, yValueType=ZeroRate, dayCount=Act/365F, nodes=[IborFixingDepositCurveNode{template=IborFixingDepositTemplate{depositPeriod=P6M, convention=GBP-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-Fixing-3M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=6M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, IborFutureCurveNode{template=RelativeIborFutureTemplate{minimumPeriod=P7D, sequenceNumber=1, convention=GBP-LIBOR-6M-Quarterly-IMM}, rateId=QuoteId{standardId=CALIBRATION~GBP-ED1, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, IborFutureCurveNode{template=RelativeIborFutureTemplate{minimumPeriod=P7D, sequenceNumber=2, convention=GBP-LIBOR-6M-Quarterly-IMM}, rateId=QuoteId{standardId=CALIBRATION~GBP-ED2, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, IborFutureCurveNode{template=RelativeIborFutureTemplate{minimumPeriod=P7D, sequenceNumber=3, convention=GBP-LIBOR-6M-Quarterly-IMM}, rateId=QuoteId{standardId=CALIBRATION~GBP-ED3, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=1Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-1Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=2Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-2Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=3Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-3Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=4Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-4Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=4Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=5Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-5Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=5Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=7Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-7Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=7Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=10Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-10Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=10Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=12Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-12Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=12Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=15Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-15Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=15Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=20Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-20Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=20Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=25Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-25Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=25Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=30Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-30Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=30Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}], interpolator=NaturalCubicSpline, extrapolatorLeft=Flat, extrapolatorRight=Flat}], seasonalityDefinitions={}, computeJacobian=true, computePvSensitivityToMarketQuote=false}
ImmutableMarketData{valuationDate=2017-05-03, values={QuoteId{standardId=CALIBRATION~GBP-OIS-1M, fieldName=MarketValue, observableSource=None}=0.002124, QuoteId{standardId=CALIBRATION~GBP-OIS-7Y, fieldName=MarketValue, observableSource=None}=0.00656, QuoteId{standardId=CALIBRATION~GBP-OIS-2W, fieldName=MarketValue, observableSource=None}=0.002117, QuoteId{standardId=CALIBRATION~GBP-OIS-4Y, fieldName=MarketValue, observableSource=None}=0.004269, QuoteId{standardId=CALIBRATION~GBP-IRS6M-10Y, fieldName=MarketValue, observableSource=None}=0.01155, QuoteId{standardId=CALIBRATION~GBP-OIS-2Y, fieldName=MarketValue, observableSource=None}=0.002899, QuoteId{standardId=CALIBRATION~GBP-IRS6M-30Y, fieldName=MarketValue, observableSource=None}=0.014039999999999999, QuoteId{standardId=CALIBRATION~GBP-Fixing-3M, fieldName=MarketValue, observableSource=None}=0.0032180999999999998, QuoteId{standardId=CALIBRATION~GBP-IRS6M-3Y, fieldName=MarketValue, observableSource=None}=0.00638, QuoteId{standardId=CALIBRATION~GBP-OIS-15Y, fieldName=MarketValue, observableSource=None}=0.01098, QuoteId{standardId=CALIBRATION~GBP-IRS6M-1Y, fieldName=MarketValue, observableSource=None}=0.00498, QuoteId{standardId=CALIBRATION~GBP-OIS-6M, fieldName=MarketValue, observableSource=None}=0.002182, QuoteId{standardId=CALIBRATION~GBP-IRS6M-20Y, fieldName=MarketValue, observableSource=None}=0.01426, QuoteId{standardId=CALIBRATION~GBP-IRS6M-15Y, fieldName=MarketValue, observableSource=None}=0.01361, QuoteId{standardId=CALIBRATION~GBP-IRS6M-5Y, fieldName=MarketValue, observableSource=None}=0.007980000000000001, QuoteId{standardId=CALIBRATION~GBP-OIS-2M, fieldName=MarketValue, observableSource=None}=0.0021260000000000003, QuoteId{standardId=CALIBRATION~GBP-OIS-30Y, fieldName=MarketValue, observableSource=None}=0.012115, QuoteId{standardId=CALIBRATION~GBP-IRS6M-7Y, fieldName=MarketValue, observableSource=None}=0.009555000000000001, QuoteId{standardId=CALIBRATION~GBP-OIS-3W, fieldName=MarketValue, observableSource=None}=0.00211, QuoteId{standardId=CALIBRATION~GBP-ED1, fieldName=MarketValue, observableSource=None}=0.99665, QuoteId{standardId=CALIBRATION~GBP-ED2, fieldName=MarketValue, observableSource=None}=0.9963, QuoteId{standardId=CALIBRATION~GBP-OIS-3Y, fieldName=MarketValue, observableSource=None}=0.0035730000000000002, QuoteId{standardId=CALIBRATION~GBP-IRS6M-25Y, fieldName=MarketValue, observableSource=None}=0.014199999999999999, QuoteId{standardId=CALIBRATION~GBP-OIS-1W, fieldName=MarketValue, observableSource=None}=0.00211, QuoteId{standardId=CALIBRATION~GBP-OIS-5Y, fieldName=MarketValue, observableSource=None}=0.0050219999999999996, QuoteId{standardId=CALIBRATION~GBP-OIS-1Y, fieldName=MarketValue, observableSource=None}=0.002376, QuoteId{standardId=CALIBRATION~GBP-ED3, fieldName=MarketValue, observableSource=None}=0.996, QuoteId{standardId=CALIBRATION~GBP-OIS-10Y, fieldName=MarketValue, observableSource=None}=0.008658, QuoteId{standardId=CALIBRATION~GBP-ON, fieldName=MarketValue, observableSource=None}=0.001663, QuoteId{standardId=CALIBRATION~GBP-OIS-9M, fieldName=MarketValue, observableSource=None}=0.002286, QuoteId{standardId=CALIBRATION~GBP-OIS-20Y, fieldName=MarketValue, observableSource=None}=0.011974, QuoteId{standardId=CALIBRATION~GBP-IRS6M-4Y, fieldName=MarketValue, observableSource=None}=0.007169999999999999, QuoteId{standardId=CALIBRATION~GBP-IRS6M-12Y, fieldName=MarketValue, observableSource=None}=0.0126, QuoteId{standardId=CALIBRATION~GBP-OIS-3M, fieldName=MarketValue, observableSource=None}=0.0021260000000000003, QuoteId{standardId=CALIBRATION~GBP-IRS6M-2Y, fieldName=MarketValue, observableSource=None}=0.005615}, timeSeries={}}
Curve not built on 3-May-2017 due to java.lang.IllegalArgumentException: Array of x-values must be sorted and unique
About to compute curve for 4-May-2017
CurveGroupDefinition{name=GBP-DSCON-LIBOR6M, entries=[CurveGroupEntry{curveName=GBP-DSCON-OIS, discountCurrencies=[GBP], indices=[GBP-SONIA]}, CurveGroupEntry{curveName=GBP-LIBOR6M-IRS, discountCurrencies=[], indices=[GBP-LIBOR-6M]}], curveDefinitions=[InterpolatedNodalCurveDefinition{name=GBP-DSCON-OIS, xValueType=YearFraction, yValueType=ZeroRate, dayCount=Act/365F, nodes=[TermDepositCurveNode{template=TermDepositTemplate{depositPeriod=P1D, convention=GBP-Dep}, rateId=QuoteId{standardId=CALIBRATION~GBP-ON, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1D, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=1W, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-1W, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1W, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=2W, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-2W, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2W, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=3W, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-3W, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3W, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=1M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-1M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=2M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-2M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=3M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-3M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=6M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-6M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=6M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=9M, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-9M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=9M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=1Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-1Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=2Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-2Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=3Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-3Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=4Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-4Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=4Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=5Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-5Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=5Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=7Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-7Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=7Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=10Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-10Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=10Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=15Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-15Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=15Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=20Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-20Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=20Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedOvernightSwapCurveNode{template=FixedOvernightSwapTemplate{periodToStart=P0D, tenor=30Y, convention=GBP-FIXED-1Y-SONIA-OIS}, rateId=QuoteId{standardId=CALIBRATION~GBP-OIS-30Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=30Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}], interpolator=NaturalCubicSpline, extrapolatorLeft=Flat, extrapolatorRight=Flat}, InterpolatedNodalCurveDefinition{name=GBP-LIBOR6M-IRS, xValueType=YearFraction, yValueType=ZeroRate, dayCount=Act/365F, nodes=[IborFixingDepositCurveNode{template=IborFixingDepositTemplate{depositPeriod=P6M, convention=GBP-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-Fixing-3M, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=6M, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, IborFutureCurveNode{template=RelativeIborFutureTemplate{minimumPeriod=P7D, sequenceNumber=1, convention=GBP-LIBOR-6M-Quarterly-IMM}, rateId=QuoteId{standardId=CALIBRATION~GBP-ED1, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, IborFutureCurveNode{template=RelativeIborFutureTemplate{minimumPeriod=P7D, sequenceNumber=2, convention=GBP-LIBOR-6M-Quarterly-IMM}, rateId=QuoteId{standardId=CALIBRATION~GBP-ED2, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, IborFutureCurveNode{template=RelativeIborFutureTemplate{minimumPeriod=P7D, sequenceNumber=3, convention=GBP-LIBOR-6M-Quarterly-IMM}, rateId=QuoteId{standardId=CALIBRATION~GBP-ED3, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=1Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-1Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=1Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=2Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-2Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=2Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=3Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-3Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=3Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=4Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-4Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=4Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=5Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-5Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=5Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=7Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-7Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=7Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=10Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-10Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=10Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=12Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-12Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=12Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=15Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-15Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=15Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=20Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-20Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=20Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=25Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-25Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=25Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}, FixedIborSwapCurveNode{template=FixedIborSwapTemplate{periodToStart=P0D, tenor=30Y, convention=GBP-FIXED-6M-LIBOR-6M}, rateId=QuoteId{standardId=CALIBRATION~GBP-IRS6M-30Y, fieldName=MarketValue, observableSource=None}, additionalSpread=0.0, label=30Y, date=CurveNodeDate{type=End, date=null}, dateOrder=CurveNodeDateOrder{minGapInDays=1, action=Exception}}], interpolator=NaturalCubicSpline, extrapolatorLeft=Flat, extrapolatorRight=Flat}], seasonalityDefinitions={}, computeJacobian=true, computePvSensitivityToMarketQuote=false}

Where do I specify the index curve ?

Curve not built on 2-May-2017 due to java.lang.IllegalArgumentException: Unable to find index curve: GBP-LIBOR-6M
java.lang.IllegalArgumentException: Unable to find index curve: GBP-LIBOR-6M
at com.opengamma.strata.pricer.rate.ImmutableRatesProvider.indexCurve(ImmutableRatesProvider.java:210)
at com.opengamma.strata.pricer.rate.ImmutableRatesProvider.iborIndexRates(ImmutableRatesProvider.java:251)
at com.opengamma.strata.pricer.impl.rate.ForwardIborRateComputationFn.rate(ForwardIborRateComputationFn.java:45)

If you look at the source code of ImmutableRatesProvider you will see that it contains a ImmutableMap<Index, Curve> indexCurves. The error occurs because there is no curve in the map for the key GBP-LIBOR-6M.

If you created the ImmutableRatesProvider by hand, it is up to you to populate the map correctly.

If you use something else to create it, then that needs to be configured to add GBP-LIBOR-6M. This may be the groups.csv and settings.csv files if you are using the standard loaders.ie. if you want to re-use the 3 month LIBOR curve for 6 months, you’d need to add a new row in the groups.csv file referencing the 6 month index

This folder has an example with SONIA and GBP-LIBOR-6M.

Stephen, Thank you for the reply and information. I’m actually trying to amend the CalibrationZeroRateUsd2OisFuturesIrsTest.java example and this example doesn’t create the ImmutableRatesProvider explicitly. Do you have a similar example for another non-USD currency?

See other examples in the same package, such as CalibrationDiscountingSimpleEurStdTenorsTest for EUR (that produces three curves, one for discounting, and one each for 3 month / 6 month EURIBOR.

Thank you Stephen that was very helpful and I’ve now been able to build the main currency curves.