/// <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); }
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 }
/// <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); }
public double maxValueAfter(int i, InterpolatedCurve c, bool validData, int first) { return(traits_.maxValueAfter(i, c, validData, first)); }
public double guess(int i, InterpolatedCurve c, bool validData, int first) { return(traits_.guess(i, c, validData, first)); }
public double maxValueAfter(int i, InterpolatedCurve c, bool validData, int f) { // survival probability cannot increase return(c.data()[i - 1]); }
///<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)); }
public double maxValueAfter(int i, InterpolatedCurve c, bool validData, int f) { throw new NotSupportedException(); }
public double guess(int i, InterpolatedCurve c, bool validData, int f) { throw new NotSupportedException(); }