//------------------------------------------------------------------------- public virtual void test_discountFactor() { IsdaCreditDiscountFactors test = IsdaCreditDiscountFactors.of(USD, VALUATION, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(VALUATION, DATE_AFTER); double expected = Math.Exp(-relativeYearFraction * CURVE.yValue(relativeYearFraction)); assertEquals(test.discountFactor(DATE_AFTER), expected); }
//------------------------------------------------------------------------- public virtual void test_discountFactor() { ZeroRateDiscountFactors test = ZeroRateDiscountFactors.of(GBP, DATE_VAL, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double expected = Math.Exp(-relativeYearFraction * CURVE.yValue(relativeYearFraction)); assertEquals(test.discountFactor(DATE_AFTER), expected); }
//------------------------------------------------------------------------- public virtual void test_discountFactor() { SimpleDiscountFactors test = SimpleDiscountFactors.of(GBP, DATE_VAL, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double expected = CURVE.yValue(relativeYearFraction); assertEquals(test.discountFactor(DATE_AFTER), expected); }
//------------------------------------------------------------------------- public virtual void test_volatility() { for (int i = 0; i < NB_EXPIRY; i++) { double expiryTime = VOLS.relativeTime(TEST_EXPIRY[i]); for (int j = 0; j < NB_STRIKE; ++j) { double volExpected = CURVE.yValue(expiryTime); double volComputed = VOLS.volatility(CURRENCY_PAIR, TEST_EXPIRY[i], TEST_STRIKE[j], FORWARD[i]); assertEquals(volComputed, volExpected, TOLERANCE); } } }
//------------------------------------------------------------------------- // print for debugging protected internal virtual void print(IborCapletFloorletVolatilityCalibrationResult res, DoubleArray strikes, double maxTime) { Console.WriteLine("Print in CapletStrippingSetup \n"); Console.WriteLine("Chi-square: " + res.ChiSquare); IborCapletFloorletVolatilities vols = res.Volatilities; const int nSamples = 51; const int nStrikeSamples = 51; Console.Write("\n"); for (int i = 0; i < nStrikeSamples; i++) { Console.Write("\t" + (strikes.get(0) + (strikes.get(strikes.size() - 1) - strikes.get(0)) * i) / (nStrikeSamples - 1)); } Console.Write("\n"); for (int index = 0; index < nSamples; index++) { //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: final double t = 0.25 + index * maxTime / (nSamples - 1); double t = 0.25 + index * maxTime / (nSamples - 1); double forward = FWD_CURVE.yValue(t); Console.Write(t); for (int i = 0; i < nStrikeSamples; i++) { double strike = (strikes.get(0) + (strikes.get(strikes.size() - 1) - strikes.get(0)) * i) / (nStrikeSamples - 1); Console.Write("\t" + vols.volatility(t, strike, forward)); } Console.Write("\n"); } }
//------------------------------------------------------------------------- public virtual void test_discountFactor() { ZeroRatePeriodicDiscountFactors test = ZeroRatePeriodicDiscountFactors.of(GBP, DATE_VAL, CURVE); double relativeYearFraction = ACT_365F.relativeYearFraction(DATE_VAL, DATE_AFTER); double expected = Math.Pow(1.0d + CURVE.yValue(relativeYearFraction) / CMP_PERIOD, -CMP_PERIOD * relativeYearFraction); assertEquals(test.discountFactor(DATE_AFTER), expected); }
//------------------------------------------------------------------------- public virtual void test_price() { double computed = PRICER.price(FUTURE, PROVIDER); double pvSwap = PRICER.SwapPricer.presentValue(RSWAP, PROVIDER).getAmount(USD).Amount; double yc = ACT_ACT_ISDA.relativeYearFraction(VAL_DATE, DELIVERY); double df = Math.Exp(-USD_DSC.yValue(yc) * yc); double expected = 1d + pvSwap / df; assertEquals(computed, expected, TOL); }
public virtual void test_presentValue() { CurrencyAmount computedRec = PRICER.presentValue(SWAPTION_REC_LONG, RATE_PROVIDER, VOLS); CurrencyAmount computedPay = PRICER.presentValue(SWAPTION_PAY_SHORT, RATE_PROVIDER, VOLS); double forward = SWAP_PRICER.parRate(RSWAP_REC, RATE_PROVIDER); double annuityCash = SWAP_PRICER.LegPricer.annuityCash(RFIXED_LEG_REC, forward); double expiry = VOLS.relativeTime(SWAPTION_REC_LONG.Expiry); double tenor = VOLS.tenor(SETTLE, END); double volatility = SURFACE.zValue(expiry, tenor); double settle = ACT_ACT_ISDA.relativeYearFraction(VAL_DATE, SETTLE); double df = Math.Exp(-DSC_CURVE.yValue(settle) * settle); double expectedRec = df * annuityCash * BlackFormulaRepository.price(forward, RATE, expiry, volatility, false); double expectedPay = -df *annuityCash *BlackFormulaRepository.price(forward, RATE, expiry, volatility, true); assertEquals(computedRec.Currency, EUR); assertEquals(computedRec.Amount, expectedRec, NOTIONAL * TOL); assertEquals(computedPay.Currency, EUR); assertEquals(computedPay.Amount, expectedPay, NOTIONAL * TOL); }
//------------------------------------------------------------------------- private InterpolatedNodalCurve fitSwap(int curveIndex, BasicFixedLeg swap, InterpolatedNodalCurve curve, double swapRate) { int nPayments = swap.NumPayments; int nNodes = curve.ParameterCount; double t1 = curveIndex == 0 ? 0.0 : curve.XValues.get(curveIndex - 1); double t2 = curveIndex == nNodes - 1 ? double.PositiveInfinity : curve.XValues.get(curveIndex + 1); double temp = 0; double temp2 = 0; int i1 = 0; int i2 = nPayments; double[] paymentAmounts = new double[nPayments]; for (int i = 0; i < nPayments; i++) { double t = swap.getPaymentTime(i); paymentAmounts[i] = swap.getPaymentAmounts(i, swapRate); if (t <= t1) { double df = Math.Exp(-curve.yValue(t) * t); temp += paymentAmounts[i] * df; temp2 += paymentAmounts[i] * t *df *curve.yValueParameterSensitivity(t).Sensitivity.get(curveIndex); i1++; } else if (t >= t2) { double df = Math.Exp(-curve.yValue(t) * t); temp += paymentAmounts[i] * df; temp2 -= paymentAmounts[i] * t *df *curve.yValueParameterSensitivity(t).Sensitivity.get(curveIndex); i2--; } } double cachedValues = temp; double cachedSense = temp2; int index1 = i1; int index2 = i2; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: java.util.function.Function<double, double> func = new java.util.function.Function<double, double>() System.Func <double, double> func = (double?x) => { InterpolatedNodalCurve tempCurve = curve.withParameter(curveIndex, x); double sum = 1.0 - cachedValues; // Floating leg at par for (int i = index1; i < index2; i++) { double t = swap.getPaymentTime(i); sum -= paymentAmounts[i] * Math.Exp(-tempCurve.yValue(t) * t); } return(sum); }; //JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final': //ORIGINAL LINE: java.util.function.Function<double, double> grad = new java.util.function.Function<double, double>() System.Func <double, double> grad = (double?x) => { InterpolatedNodalCurve tempCurve = curve.withParameter(curveIndex, x); double sum = cachedSense; for (int i = index1; i < index2; i++) { double t = swap.getPaymentTime(i); sum += swap.getPaymentAmounts(i, swapRate) * t * Math.Exp(-tempCurve.yValue(t) * t) * tempCurve.yValueParameterSensitivity(t).Sensitivity.get(curveIndex); } return(sum); }; double guess = curve.getParameter(curveIndex); if (guess == 0.0 && func(guess) == 0.0) { return(curve); } double[] bracket = guess > 0d ? BRACKETER.getBracketedPoints(func, 0.8 * guess, 1.25 * guess, double.NegativeInfinity, double.PositiveInfinity) : BRACKETER.getBracketedPoints(func, 1.25 * guess, 0.8 * guess, double.NegativeInfinity, double.PositiveInfinity); double r = rootFinder.getRoot(func, grad, bracket[0], bracket[1]).Value; return(curve.withParameter(curveIndex, r)); }