Пример #1
0
        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++;
            }
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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));
 }
Пример #10
0
 /// <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));
 }