//------------------------------------------------------------------------- public virtual void test_of() { SimpleDiscountFactors test = SimpleDiscountFactors.of(GBP, DATE_VAL, CURVE); assertEquals(test.Currency, GBP); assertEquals(test.ValuationDate, DATE_VAL); assertEquals(test.Curve, CURVE); assertEquals(test.ParameterCount, CURVE.ParameterCount); assertEquals(test.getParameter(0), CURVE.getParameter(0)); assertEquals(test.getParameterMetadata(0), CURVE.getParameterMetadata(0)); assertEquals(test.withParameter(0, 1d).Curve, CURVE.withParameter(0, 1d)); assertEquals(test.withPerturbation((i, v, m) => v + 1d).Curve, CURVE.withPerturbation((i, v, m) => v + 1d)); assertEquals(test.findData(CURVE.Name), CURVE); assertEquals(test.findData(CurveName.of("Rubbish")), null); }
//------------------------------------------------------------------------- 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)); }
public virtual void test_withParameter() { IsdaCreditDiscountFactors test = IsdaCreditDiscountFactors.of(USD, VALUATION, CURVE).withParameter(1, 0.55); IsdaCreditDiscountFactors exp = IsdaCreditDiscountFactors.of(USD, VALUATION, CURVE.withParameter(1, 0.55)); assertEquals(test, exp); }