public void TestSelfConsistency() { var result = new double[Rates.Length]; for (var i = 0; i < Rates.Length; i++) { result[i] = Rates[i] * Times[i]; } var vectorRatesTimes = new DoubleVector(result); vectorRatesTimes.Multiply(-1.0d); vectorRatesTimes.Apply(Math.Exp); var index = 0; foreach (var pointvalue in vectorRatesTimes) { var yearFraction = (decimal)Times[index]; foreach (var comp in _compounding) { var result2 = RateAnalytics.DiscountFactorToZeroRate(1.0m, (decimal)pointvalue, yearFraction, comp); var result1 = RateAnalytics.ZeroRateToDiscountFactor(result2, yearFraction, comp); Debug.WriteLine($"DFIn : {pointvalue} DFOut: {(double) result1}"); Assert.AreEqual((double)result1, pointvalue, .000000001); } index++; } }
/// <summary> /// Gets the forward lin365. /// </summary> /// <param name="yearFraction">The year fraction.</param> /// <param name="divdays">The div days.</param> /// <param name="divamts">The div amounts.</param> /// <param name="ratedays">The rate days.</param> /// <param name="rateamts">The rate amounts.</param> /// <returns></returns> public static double GetForwardCCLin365(double spot, double yearFraction, int[] divdays, double[] divamts, int[] ratedays, double[] rateamts) { double pvdivs = GetPVDivsCCLin365(0, yearFraction, divdays, divamts, ratedays, rateamts); double r0 = GetRateCCLin365(0, yearFraction, ratedays, rateamts); double df = RateAnalytics.ZeroRateToDiscountFactor(r0, yearFraction, CompoundingFrequencyEnum.Continuous); return((spot - pvdivs) / df); }
/// <summary> /// Gets the dividend discount factor. /// </summary> public static decimal GetDiscountFactor(decimal years, decimal rate, CompoundingFrequencyEnum cf) { double years0 = Convert.ToDouble(years); double rate0 = Convert.ToDouble(rate); double df = RateAnalytics.ZeroRateToDiscountFactor(rate0, years0, cf); decimal df0 = Convert.ToDecimal(df); return(df0); }
public void ZeroRateToDiscountFactor2Test() { double result = RateAnalytics.ZeroRateToDiscountFactor(0.02, 0.5, "SemiAnnual"); Assert.AreEqual(0.99009900, result, 0.00000001); result = RateAnalytics.ZeroRateToDiscountFactor(0.02, 0.5, "Continuous"); Assert.AreEqual(0.99004983, result, 0.00000001); }
/// <summary> /// Gets the df. /// </summary> /// <param name="days">The days.</param> /// <returns></returns> public decimal GetDf(int days) { var rateCurve = new InterpolatedCurve(new DiscreteCurve(GetYearsArray(), RateArray), InterpolationFactory.Create(InterpolationType), false); double maturityYrs = days / 365.0; IPoint point = new Point1D(maturityYrs); double rate = rateCurve.Value(point); double df = RateAnalytics.ZeroRateToDiscountFactor(rate, maturityYrs, RateType); decimal df0 = Convert.ToDecimal(df); return(df0); }
public void ZeroRateToDiscountFactor1Test() { decimal result = RateAnalytics.ZeroRateToDiscountFactor(0.02m, 0.5m, 0.5m); Assert.AreEqual(0.99009900, (double)result, 0.00000001); result = RateAnalytics.ZeroRateToDiscountFactor(0.02m, 0.5m, 0); Assert.AreEqual(0.99004983, (double)result, 0.00000001); result = RateAnalytics.ZeroRateToDiscountFactor(0.02m, 0m, 0.5m); Assert.AreEqual(1, result); }
internal static double GetAdjustedDiscountFactor(DateTime baseDate, DateTime baseCurveDate, IDayCounter dayCounter, double zeroRateSpread, IRateCurve baseCurve) { const double compoundingPeriod = 0.25; // Convert to Zero Rate double yearFraction = dayCounter.YearFraction(baseDate, baseCurveDate); double df0 = baseCurve.GetDiscountFactor(baseCurveDate); double z0 = RateAnalytics.DiscountFactorToZeroRate(df0, yearFraction, compoundingPeriod); // Add the spread double z = z0 + zeroRateSpread; // Change back double discountFactor = RateAnalytics.ZeroRateToDiscountFactor(z, yearFraction, compoundingPeriod); return(discountFactor); }
public void ZeroRateToDiscountFactor0Test() { var index = 0; foreach (var pointvalue in Rates) { var yearFraction = (decimal)Times[index]; foreach (var comp in _compounding) { var result2 = RateAnalytics.ZeroRateToDiscountFactor((decimal)pointvalue, yearFraction, comp); Debug.WriteLine($"rate : {result2} Time: {yearFraction}"); } index++; } }
/// <summary> /// Evaluates the discount factor at maturity. /// </summary> /// <returns></returns> protected virtual Decimal EvaluateDiscountFactorAtMaturity() { return(AnalyticParameters.StartDiscountFactor * RateAnalytics.ZeroRateToDiscountFactor(AnalyticParameters.Rate, AnalyticParameters.YearFraction, AnalyticParameters.PeriodAsTimesPerYear)); }
/// <summary> /// Converts from the zero rate to a terminal wealth. /// </summary> /// <param name="rate"></param> /// <param name="yearFraction"></param> /// <param name="compoundingPeriod"></param> /// <returns></returns> public decimal ZeroRateToDiscountFactor(decimal rate, decimal yearFraction,//TODO yearFraction <> 0. decimal compoundingPeriod) { return(RateAnalytics.ZeroRateToDiscountFactor(rate, yearFraction, compoundingPeriod)); }