Пример #1
0
        /// <summary>
        /// Anns the yield.
        /// </summary>
        /// <param name="baseDate">The base date.</param>
        /// <param name="targetDate">The target date.</param>
        /// <param name="divCurve">The div curve.</param>
        /// <param name="ratetimes">The rate times.</param>
        /// <param name="rateamts">The rate amounts.</param>
        /// <param name="im">the im?</param>
        /// <param name="cf">The cf?</param>
        /// <returns></returns>
        public static double GetPVDivs(double yearFraction1, double yearFraction2, int[] divdays, double[] divamts, int[] ratedays, double[] rateamts, string im, CompoundingFrequencyEnum cf, int daybasis)
        {
            DiscreteCurve divCurve  = CreateCurve(divdays, divamts, daybasis);
            DiscreteCurve rc        = CreateCurve(ratedays, rateamts, daybasis);
            List <IPoint> points    = divCurve.GetPointList();
            double        sum       = 0;
            var           rateCurve = new InterpolatedCurve(rc, InterpolationFactory.Create(im), false);

            foreach (IPoint pt in points)
            {
                decimal t    = Convert.ToDecimal(pt.GetX());
                decimal rate = Convert.ToDecimal(rateCurve.Value(pt));
                double  df   = Convert.ToDouble(GetDiscountFactor(t, rate, cf));
                if ((pt.GetX() <= yearFraction2) & (pt.GetX() > yearFraction1))
                {
                    sum += pt.FunctionValue * df;
                }
            }
            return(sum);
        }
Пример #2
0
        public double minValueAfter(int i, InterpolatedCurve c, bool validData, int f)
        {
            //return Const.QL_Epsilon;

            if (validData)
            {
                double r = c.data().Min();
#if QL_NEGATIVE_RATES
                return(r < 0.0 ? r * 2.0 : r / 2.0);
#else
                return(r / 2.0);
#endif
            }
#if QL_NEGATIVE_RATES
            // no constraints.
            // We choose as min a value very unlikely to be exceeded.
            return(-maxRate);
#else
            return(Const.QL_EPSILON);
#endif
        }
Пример #3
0
        /// <summary>
        /// Anns the yield.
        /// </summary>
        /// <param name="baseDate">The base date.</param>
        /// <param name="targetDate">The target date.</param>
        /// <param name="divCurve">The div curve.</param>
        /// <param name="ratetimes">The rate times.</param>
        /// <param name="rateamts">The rate amounts.</param>
        /// <param name="im">the im?</param>
        /// <param name="cf">The cf?</param>
        /// <returns></returns>
        public static double GetPVDivs(DateTime baseDate, DateTime targetDate, DiscreteCurve divCurve, double[] ratetimes, double[] rateamts, string im, CompoundingFrequencyEnum cf)
        {
            List <IPoint> points = divCurve.GetPointList();
            double        sum    = 0;

            var rateCurve = new InterpolatedCurve(new DiscreteCurve(ratetimes, rateamts), InterpolationFactory.Create(im), false);

            int    t0       = (targetDate - baseDate).Days;
            double maturity = t0 / 365.0;

            foreach (IPoint pt in points)
            {
                decimal t    = Convert.ToDecimal(pt.GetX());
                decimal rate = Convert.ToDecimal(rateCurve.Value(pt));
                double  df   = Convert.ToDouble(GetDiscountFactor(t, rate, cf));
                if ((pt.GetX() <= maturity) & (pt.GetX() > 0))
                {
                    sum += pt.FunctionValue * df;
                }
            }
            return(sum);
        }
Пример #4
0
 public double maxValueAfter(int i, InterpolatedCurve c, bool validData, int first)
 {
     return(traits_.maxValueAfter(i, c, validData, first));
 }
Пример #5
0
 public double guess(int i, InterpolatedCurve c, bool validData, int first)
 {
     return(traits_.guess(i, c, validData, first));
 }
Пример #6
0
 public double maxValueAfter(int i, InterpolatedCurve c, bool validData, int f)
 {
     // survival probability cannot increase
     return(c.data()[i - 1]);
 }
Пример #7
0
        ///<summary>
        /// Gets the interpolated value from the curve.
        ///</summary>
        ///<param name="point">A 1D point</param>
        /// <param name="interpolationType">The interpolation.</param>
        /// <param name="extrapolation">if set to <c>true</c> [extrapolation].</param>
        /// <param name="times">A vetical array of times.</param>
        /// <param name="values">A vertical array of values.</param>
        /// <returns>The value at that point.</returns>
        public static Double GetDateValue(IPoint point, string interpolationType, bool extrapolation, double[] times, double[] values)
        {
            var curve = new InterpolatedCurve(new DiscreteCurve(times, values), InterpolationFactory.Create(interpolationType), extrapolation);

            return(curve.Value(point));
        }
Пример #8
0
 public double maxValueAfter(int i, InterpolatedCurve c, bool validData, int f)
 {
     throw new NotSupportedException();
 }
Пример #9
0
 public double guess(int i, InterpolatedCurve c, bool validData, int f)
 {
     throw new NotSupportedException();
 }