private static ImmutableList<ParameterMetadata> createParameterMetadata(double expiry, DoubleArray delta) { ArgChecker.notNull(delta, "delta"); int nbDelta = delta.size(); ParameterMetadata[] parameterMetadata = new ParameterMetadata[2 * nbDelta + 1]; parameterMetadata[nbDelta] = GenericVolatilitySurfaceYearFractionParameterMetadata.of(expiry, DeltaStrike.of(0.5d)); for (int i = 0; i < nbDelta; i++) { parameterMetadata[i] = GenericVolatilitySurfaceYearFractionParameterMetadata.of(expiry, DeltaStrike.of(1d - delta.get(i))); // Put parameterMetadata[2 * nbDelta - i] = GenericVolatilitySurfaceYearFractionParameterMetadata.of(expiry, DeltaStrike.of(delta.get(i))); // Call } return ImmutableList.copyOf(parameterMetadata); }
public void test_serialization() { DeltaStrike test = DeltaStrike.of(0.6d); assertSerialization(test); }
private CurrencyParameterSensitivity parameterSensitivity(FxOptionSensitivity point) { double expiryTime = point.getExpiry(); double strike = currencyPair.isInverse(point.getCurrencyPair()) ? 1d / point.getStrike() : point.getStrike(); double forward = currencyPair.isInverse(point.getCurrencyPair()) ? 1d / point.getForward() : point.getForward(); double pointValue = point.getSensitivity(); DoubleMatrix bucketedSensi = smile.volatilityAndSensitivities(expiryTime, strike, forward).getSensitivities(); double[] times = smile.getExpiries().toArray(); int nTimes = times.length; List<Double> sensiList = new ArrayList<Double>(); List<ParameterMetadata> paramList = new ArrayList<ParameterMetadata>(); for (int i = 0; i < nTimes; ++i) { DoubleArray deltas = smile.getVolatilityTerm().get(i).getDelta(); 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.getCurrency(), DoubleArray.copyOf(sensiList)); }