//------------------------------------------------------------------------- public virtual void coverage() { SwaptionSurfaceExpiryTenorParameterMetadata test1 = SwaptionSurfaceExpiryTenorParameterMetadata.of(TIME_TO_EXPIRY, TENOR); coverImmutableBean(test1); SwaptionSurfaceExpiryTenorParameterMetadata test2 = SwaptionSurfaceExpiryTenorParameterMetadata.of(2.5d, 60d, "(2.5, 60)"); coverBeanEquals(test1, test2); }
public virtual void test_of_noLabel() { SwaptionSurfaceExpiryTenorParameterMetadata test = SwaptionSurfaceExpiryTenorParameterMetadata.of(TIME_TO_EXPIRY, TENOR); assertEquals(test.Identifier, Pair.of(TIME_TO_EXPIRY, TENOR)); assertEquals(test.Label, Pair.of(TIME_TO_EXPIRY, TENOR).ToString()); assertEquals(test.Tenor, TENOR); assertEquals(test.YearFraction, TIME_TO_EXPIRY); }
public virtual void test_of_withLabel() { string label = "(1.5Y, 36M)"; SwaptionSurfaceExpiryTenorParameterMetadata test = SwaptionSurfaceExpiryTenorParameterMetadata.of(TIME_TO_EXPIRY, TENOR, label); assertEquals(test.Identifier, Pair.of(TIME_TO_EXPIRY, TENOR)); assertEquals(test.Label, label); assertEquals(test.Tenor, TENOR); assertEquals(test.YearFraction, TIME_TO_EXPIRY); }
static BlackSwaptionExpiryTenorVolatilitiesTest() { IList<SwaptionSurfaceExpiryTenorParameterMetadata> list = new List<SwaptionSurfaceExpiryTenorParameterMetadata>(); int nData = TIME.size(); for (int i = 0; i < nData; ++i) { SwaptionSurfaceExpiryTenorParameterMetadata parameterMetadata = SwaptionSurfaceExpiryTenorParameterMetadata.of(TIME.get(i), TENOR.get(i)); list.Add(parameterMetadata); } METADATA = Surfaces.blackVolatilityByExpiryTenor("GOVT1-SWAPTION-VOL", ACT_365F).withParameterMetadata(list); }
static SwaptionSabrRateVolatilityDataSet() { for (int i = 0; i < EXPIRY_NODE_USD.Length; ++i) { SwaptionSurfaceExpiryTenorParameterMetadata @base = SwaptionSurfaceExpiryTenorParameterMetadata.of(EXPIRY_NODE_USD[i], TENOR_NODE_USD[i]); ALPHA_PARAM_METADATA.Add(LabelParameterMetadata.of("Alpha, " + @base.Label)); BETA_PARAM_METADATA.Add(LabelParameterMetadata.of("Beta, " + @base.Label)); RHO_PARAM_METADATA.Add(LabelParameterMetadata.of("Rho, " + @base.Label)); NU_PARAM_METADATA.Add(LabelParameterMetadata.of("Nu, " + @base.Label)); } int n = BETA_TENOR_NODE_EUR.Length; PARAMETER_META_LIST_EUR = new List <ParameterMetadata>(n); for (int i = 0; i < n; ++i) { PARAMETER_META_LIST_EUR.Add(SwaptionSurfaceExpiryTenorParameterMetadata.of(BETA_EXPIRY_NODE_EUR[i], BETA_TENOR_NODE_EUR[i])); } }
public virtual void regressionPvSurfaceSensi() { PointSensitivities pointComputed = SWAPTION_PRICER.presentValueSensitivityModelParamsSabr(SWAPTION_PAY_LONG, RATE_PROVIDER, VOLS_REGRESSION).build(); assertSensitivity(pointComputed, SabrParameterType.ALPHA, 6.5786313367554754E7, REGRESSION_TOL); assertSensitivity(pointComputed, SabrParameterType.BETA, -1.2044275797229866E7, REGRESSION_TOL); assertSensitivity(pointComputed, SabrParameterType.RHO, 266223.51118849067, REGRESSION_TOL); assertSensitivity(pointComputed, SabrParameterType.NU, 400285.5505271345, REGRESSION_TOL); CurrencyParameterSensitivities sensiComputed = VOLS_REGRESSION.parameterSensitivity(pointComputed); double[][] alphaExp = new double[][] { new double[] { 0.0, 1.0, 0.0 }, new double[] { 0.5, 1.0, 0.0 }, new double[] { 1.0, 1.0, 0.0 }, new double[] { 2.0, 1.0, 0.0 }, new double[] { 5.0, 1.0, 0.0 }, new double[] { 10.0, 1.0, 0.0 }, new double[] { 0.0, 5.0, 0.0 }, new double[] { 0.5, 5.0, 0.0 }, new double[] { 1.0, 5.0, 6204.475194599179 }, new double[] { 2.0, 5.0, 3.94631212984123E7 }, new double[] { 5.0, 5.0, 0.0 }, new double[] { 10.0, 5.0, 0.0 }, new double[] { 0.0, 10.0, 0.0 }, new double[] { 0.5, 10.0, 0.0 }, new double[] { 1.0, 10.0, 4136.961894403858 }, new double[] { 2.0, 10.0, 2.631285063205345E7 }, new double[] { 5.0, 10.0, 0.0 }, new double[] { 10.0, 10.0, 0.0 } }; double[][] betaExp = new double[][] { new double[] { 0.0, 1.0, -0.0 }, new double[] { 0.5, 1.0, -0.0 }, new double[] { 1.0, 1.0, -0.0 }, new double[] { 2.0, 1.0, -0.0 }, new double[] { 5.0, 1.0, -0.0 }, new double[] { 10.0, 1.0, -0.0 }, new double[] { 0.0, 5.0, -0.0 }, new double[] { 0.5, 5.0, -0.0 }, new double[] { 1.0, 5.0, -1135.926404680998 }, new double[] { 2.0, 5.0, -7224978.759366533 }, new double[] { 5.0, 5.0, -0.0 }, new double[] { 10.0, 5.0, -0.0 }, new double[] { 0.0, 10.0, -0.0 }, new double[] { 0.5, 10.0, -0.0 }, new double[] { 1.0, 10.0, -757.402375482629 }, new double[] { 2.0, 10.0, -4817403.70908317 }, new double[] { 5.0, 10.0, -0.0 }, new double[] { 10.0, 10.0, -0.0 } }; double[][] rhoExp = new double[][] { new double[] { 0.0, 1.0, 0.0 }, new double[] { 0.5, 1.0, 0.0 }, new double[] { 1.0, 1.0, 0.0 }, new double[] { 2.0, 1.0, 0.0 }, new double[] { 5.0, 1.0, 0.0 }, new double[] { 10.0, 1.0, 0.0 }, new double[] { 0.0, 5.0, 0.0 }, new double[] { 0.5, 5.0, 0.0 }, new double[] { 1.0, 5.0, 25.10821912392996 }, new double[] { 2.0, 5.0, 159699.03429338703 }, new double[] { 5.0, 5.0, 0.0 }, new double[] { 10.0, 5.0, 0.0 }, new double[] { 0.0, 10.0, 0.0 }, new double[] { 0.5, 10.0, 0.0 }, new double[] { 1.0, 10.0, 16.741423326578513 }, new double[] { 2.0, 10.0, 106482.62725265314 }, new double[] { 5.0, 10.0, 0.0 }, new double[] { 10.0, 10.0, 0.0 } }; double[][] nuExp = new double[][] { new double[] { 0.0, 1.0, 0.0 }, new double[] { 0.5, 1.0, 0.0 }, new double[] { 1.0, 1.0, 0.0 }, new double[] { 2.0, 1.0, 0.0 }, new double[] { 5.0, 1.0, 0.0 }, new double[] { 10.0, 1.0, 0.0 }, new double[] { 0.0, 5.0, 0.0 }, new double[] { 0.5, 5.0, 0.0 }, new double[] { 1.0, 5.0, 37.751952372314484 }, new double[] { 2.0, 5.0, 240118.59649585965 }, new double[] { 5.0, 5.0, 0.0 }, new double[] { 10.0, 5.0, 0.0 }, new double[] { 0.0, 10.0, 0.0 }, new double[] { 0.5, 10.0, 0.0 }, new double[] { 1.0, 10.0, 25.171893432592533 }, new double[] { 2.0, 10.0, 160104.03018547 }, new double[] { 5.0, 10.0, 0.0 }, new double[] { 10.0, 10.0, 0.0 } }; double[][][] exps = new double[][][] { alphaExp, betaExp, rhoExp, nuExp }; SurfaceMetadata[] metadata = new SurfaceMetadata[] { SwaptionSabrRateVolatilityDataSet.META_ALPHA, SwaptionSabrRateVolatilityDataSet.META_BETA_USD, SwaptionSabrRateVolatilityDataSet.META_RHO, SwaptionSabrRateVolatilityDataSet.META_NU }; // x-y-value order does not match sorted order in surface, thus sort it CurrencyParameterSensitivities sensiExpected = CurrencyParameterSensitivities.empty(); for (int i = 0; i < exps.Length; ++i) { int size = exps[i].Length; IDictionary <DoublesPair, double> sensiMap = new SortedDictionary <DoublesPair, double>(); for (int j = 0; j < size; ++j) { sensiMap[DoublesPair.of(exps[i][j][0], exps[i][j][1])] = exps[i][j][2]; } IList <ParameterMetadata> paramMetadata = new List <ParameterMetadata>(size); IList <double> sensi = new List <double>(); foreach (KeyValuePair <DoublesPair, double> entry in sensiMap.SetOfKeyValuePairs()) { paramMetadata.Add(SwaptionSurfaceExpiryTenorParameterMetadata.of(entry.Key.First, entry.Key.Second)); sensi.Add(entry.Value); } SurfaceMetadata surfaceMetadata = metadata[i].withParameterMetadata(paramMetadata); sensiExpected = sensiExpected.combinedWith(CurrencyParameterSensitivity.of(surfaceMetadata.SurfaceName, surfaceMetadata.ParameterMetadata.get(), USD, DoubleArray.copyOf(sensi))); } testSurfaceParameterSensitivities(sensiComputed, sensiExpected, REGRESSION_TOL * NOTIONAL); }
public virtual void test_serialization() { SwaptionSurfaceExpiryTenorParameterMetadata test = SwaptionSurfaceExpiryTenorParameterMetadata.of(TIME_TO_EXPIRY, TENOR); assertSerialization(test); }