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)));
        }
Пример #2
0
        //-------------------------------------------------------------------------
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        public virtual void test_serialization()
        {
            FxVolatilitySurfaceYearFractionParameterMetadata test = FxVolatilitySurfaceYearFractionParameterMetadata.of(TIME_TO_EXPIRY, STRIKE, CURRENCY_PAIR);

            assertSerialization(test);
        }