private CurrencyParameterSensitivity parameterSensitivity(FxOptionSensitivity point) { double expiryTime = point.Expiry; double strike = currencyPair.isInverse(point.CurrencyPair) ? 1d / point.Strike : point.Strike; double forward = currencyPair.isInverse(point.CurrencyPair) ? 1d / point.Forward : point.Forward; double pointValue = point.Sensitivity; DoubleMatrix bucketedSensi = smile.volatilityAndSensitivities(expiryTime, strike, forward).Sensitivities; double[] times = smile.Expiries.toArray(); int nTimes = times.Length; IList <double> sensiList = new List <double>(); IList <ParameterMetadata> paramList = new List <ParameterMetadata>(); for (int i = 0; i < nTimes; ++i) { DoubleArray deltas = smile.VolatilityTerm.get(i).Delta; int nDeltas = deltas.size(); int nDeltasTotal = 2 * nDeltas + 1; double[] deltasTotal = new double[nDeltasTotal]; // absolute delta deltasTotal[nDeltas] = 0.5d; for (int j = 0; j < nDeltas; ++j) { deltasTotal[j] = 1d - deltas.get(j); deltasTotal[2 * nDeltas - j] = deltas.get(j); } for (int j = 0; j < nDeltasTotal; ++j) { sensiList.Add(bucketedSensi.get(i, j) * pointValue); DeltaStrike absoluteDelta = DeltaStrike.of(deltasTotal[j]); ParameterMetadata parameterMetadata = FxVolatilitySurfaceYearFractionParameterMetadata.of(times[i], absoluteDelta, currencyPair); paramList.Add(parameterMetadata); } } return(CurrencyParameterSensitivity.of(name, paramList, point.Currency, DoubleArray.copyOf(sensiList))); }
//------------------------------------------------------------------------- public virtual void coverage() { FxVolatilitySurfaceYearFractionParameterMetadata test1 = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE, CURRENCY_PAIR); coverImmutableBean(test1); FxVolatilitySurfaceYearFractionParameterMetadata test2 = FxVolatilitySurfaceYearFractionParameterMetadata.of(3d, MoneynessStrike.of(1.1d), CurrencyPair.of(EUR, AUD)); coverBeanEquals(test1, test2); }
public virtual void test_of_withStrikeType() { FxVolatilitySurfaceYearFractionParameterMetadata test = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE, CURRENCY_PAIR); assertEquals(test.CurrencyPair, CURRENCY_PAIR); assertEquals(test.Identifier, Pair.of(TIME_TO_EXPIRY, STRIKE)); assertEquals(test.Label, Pair.of(TIME_TO_EXPIRY, STRIKE.Label).ToString()); assertEquals(test.Strike, STRIKE); assertEquals(test.YearFraction, TIME_TO_EXPIRY); }
public virtual void test_of_withLabel() { Pair <double, Strike> pair = Pair.of(TIME_TO_EXPIRY, STRIKE1); string label = "(1.5, 1.35)"; FxVolatilitySurfaceYearFractionParameterMetadata test = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE1, label, CURRENCY_PAIR); assertEquals(test.CurrencyPair, CURRENCY_PAIR); assertEquals(test.Identifier, pair); assertEquals(test.Label, label); assertEquals(test.Strike, STRIKE1); assertEquals(test.YearFraction, TIME_TO_EXPIRY); }
public virtual void test_serialization() { FxVolatilitySurfaceYearFractionParameterMetadata test = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE, CURRENCY_PAIR); assertSerialization(test); }