Exemple #1
0
        /// <summary>
        /// Gets the value.
        /// </summary>
        /// <param name="pt">The pt.</param>
        /// <param name="interpolationType">The interpolation.</param>
        /// <param name="extrapolation">if set to <c>true</c> [extrapolation].</param>
        /// <param name="times">A vertical array of times.</param>
        /// <param name="values">A vertical array of values.</param>
        /// <returns>The value at that point.</returns>
        public static Double GetValue(Double pt, string interpolationType, bool extrapolation, Double[] times, Double[] values)
        {
            var    curve = new InterpolatedCurve(new DiscreteCurve(times, values), InterpolationFactory.Create(interpolationType), extrapolation);
            IPoint point = new Point1D(pt);

            return(curve.Value(point));
        }
        public void TestAllInterpolations()
        {
            Random r = new Random(Environment.TickCount);

            foreach (string interp in _linearInterpolations)
            {
                TearDown();
                var interpolation = InterpolationFactory.Create(interp);
                interpolation.Initialize(_times, _rates);
                Debug.WriteLine($"interpolationType : {interp}");
                for (int i = 1; i < 100; ++i)
                {
                    double time       = (i + r.Next(-10000, 10000) / 10000) / 10.0;
                    double interpRate = interpolation.ValueAt(time, true);
                    Debug.WriteLine($"interpolatedRate : {interpRate} Time: {time}");
                }
                int index = 0;
                foreach (double time in _times)
                {
                    if (time != 0.0)
                    {
                        double interpRate  = interpolation.ValueAt(time, true);
                        double interpValue = _rates[index];
                        Assert.AreEqual(interpRate, interpValue, 10 - 8);
                    }
                    index++;
                }
            }
            foreach (string interp in _logLinearInterpolations)
            {
                TearDown();
                double[] exp  = SetUp();
                double[] temp = new double[exp.Length];
                exp.CopyTo(temp, 0);
                var interpolation = InterpolationFactory.Create(interp);
                interpolation.Initialize(_times, temp);
                Debug.WriteLine($"interpolationType : {interp}");
                for (int i = 1; i < 100; ++i)
                {
                    double time       = (i + r.Next(-10000, 10000) / 10000) / 10.0;
                    double interpRate = interpolation.ValueAt(time, true);
                    Debug.WriteLine($"interpolatedRate : {interpRate} Time: {time}");
                }
                int index = 0;
                foreach (double time in _times)
                {
                    if (time != 0.0)
                    {
                        double interpRate  = interpolation.ValueAt(time, true);
                        double interpValue = exp[index];
                        Assert.AreEqual(interpRate, interpValue, 10 - 8);
                    }
                    index++;
                }
            }
        }
Exemple #3
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);
        }
        /// <summary>
        /// Gets the rate lin365.
        /// </summary>
        /// <param name="yearFraction1">The year fraction1.</param>
        /// <param name="yearFraction2">The year fraction2.</param>
        /// <param name="ratedays">The ratedays.</param>
        /// <param name="rateamts">The rateamts.</param>
        /// <param name="daybasis">The daybasis.</param>
        /// <returns></returns>
        public static double GetRateCCLin365(double yearFraction1, double yearFraction2, int[] ratedays, double[] rateamts)
        {
            DiscreteCurve rc        = CreateCurve(ratedays, rateamts, 365);
            var           rateCurve = new InterpolatedCurve(rc, InterpolationFactory.Create("LinearInterpolation"), false);
            IPoint        pt1       = new Point1D(yearFraction1);
            IPoint        pt2       = new Point1D(yearFraction2);
            double        rt1       = rateCurve.Value(pt1);
            double        rt2       = rateCurve.Value(pt2);

            if (yearFraction1 != yearFraction2)
            {
                return((rt2 * yearFraction2 - rt1 * yearFraction1) / (yearFraction2 - yearFraction1));
            }
            return(0);
        }
Exemple #5
0
        private void buttonInterpolate_Click(object sender, EventArgs e)
        {
            if (comboBoxInterpolationType.SelectedIndex < 0)
            {
                MessageBox.Show("Не выбран тип интерполяции.");
                return;
            }

            InterpolationType interpolationType = (InterpolationType)Enum.Parse(typeof(InterpolationType), comboBoxInterpolationType.SelectedItem.ToString());

            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();

            Interpolation.Interpolation instance = InterpolationFactory.GetInterpolationProvider(interpolationType, this.RemainedPoints.ToArray());

            if (checkBoxParallelMode.Checked)
            {
                List<Task> tasks = new List<Task>();
                foreach (var item in this.RemovedPoints)
                {
                    Task task = new Task(() =>
                    {
                        item.Y = instance.GetInterpolatedValue(item.X);
                    });

                    task.Start();
                    tasks.Add(task);
                }

                Task.WaitAll(tasks.ToArray());
            }
            else
            {
                foreach (var item in this.RemovedPoints)
                {
                    item.Y = checked(instance.GetInterpolatedValue(item.X));
                }
            }

            stopwatch.Stop();
            this.DrawGraphic(
                2,
                System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Point,
                this.RemovedPoints,
                "Interpolated");

            this.label9.Text = this.defaultTimeInfo + (stopwatch.ElapsedMilliseconds / 1000.0).ToString();
        }
 public void TestAllInterpolatedCurves()
 {
     foreach (string interp in _linearInterpolations)
     {
         TearDown();
         IInterpolation     interpolation = InterpolationFactory.Create(interp);
         DiscreteCurve      curve         = new DiscreteCurve(_times, _rates);
         IInterpolatedSpace interpCurve   = new InterpolatedCurve(curve, interpolation, true);
         Debug.WriteLine($"interpolationType : {interp}");
         foreach (double point in _testPointArray)
         {
             IPoint p = new Point1D(point);
             Console.WriteLine(interpCurve.Value(p));
         }
     }
     foreach (string interp in _specialInterpolations)
     {
         TearDown();
         var interpolation = (WingModelInterpolation)InterpolationFactory.Create(interp);
         interpolation.Forward = 1.0;
         interpolation.Spot    = 1.0;
         var curve = new DiscreteCurve(Strikes, Vols);
         IInterpolatedSpace interpCurve = new InterpolatedCurve(curve, interpolation, true);
         Debug.WriteLine($"interpolationType : {interp}");
         foreach (double point in _testPointArray)
         {
             IPoint p = new Point1D(point);
             Console.WriteLine(interpCurve.Value(p));
         }
     }
     foreach (string interp in _logLinearInterpolations)
     {
         TearDown();
         double[]           exp           = SetUp();
         IInterpolation     interpolation = InterpolationFactory.Create(interp);
         DiscreteCurve      curve         = new DiscreteCurve(_times, exp);
         IInterpolatedSpace interpCurve   = new InterpolatedCurve(curve, interpolation, true);
         Debug.WriteLine($"interpolationType : {interp}");
         foreach (double point in _testPointArray)
         {
             IPoint p = new Point1D(point);
             Console.WriteLine(interpCurve.Value(p));
         }
     }
 }
        /// <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);
        }
 /// <summary>
 /// Builds a raw volatility surface from basic data types.
 /// </summary>
 /// <param name="rows"></param>
 /// <param name="columns"></param>
 /// <param name="volData"></param>
 /// <param name="interpolation"></param>
 /// <param name="allowExtrapolation"></param>
 public VolSurfaceInterpolator(double[] rows, double[] columns, Matrix volData, InterpolationMethod interpolation, bool allowExtrapolation)
     : base(new DiscreteSurface(rows, columns, volData), InterpolationFactory.Create(interpolation.Value), allowExtrapolation)
 {
 }
 /// <summary>
 /// Builds a raw volatility surface from basic data types.
 /// </summary>
 /// <param name="data"></param>
 /// <param name="interpolation"></param>
 /// <param name="allowExtrapolation"></param>
 /// <param name="baseDate"></param>
 public VolSurfaceInterpolator(MultiDimensionalPricingData data, InterpolationMethod interpolation, bool allowExtrapolation, DateTime baseDate)
     : base(ProcessMultiDimensionalPricingData(data, baseDate), InterpolationFactory.Create(interpolation.Value), allowExtrapolation)
 {
 }
 /// <summary>
 /// VolSurfaceInterpolator
 /// </summary>
 /// <param name="discreteCurve"></param>
 /// <param name="interpolation"></param>
 /// <param name="allowExtrapolation"></param>
 public VolSurfaceInterpolator(IDiscreteSpace discreteCurve, InterpolationMethod interpolation, bool allowExtrapolation)
     : base(discreteCurve, InterpolationFactory.Create(interpolation.Value), allowExtrapolation)
 {
 }
Exemple #11
0
 /// <summary>
 /// SimpleDiscountFactorCurve
 /// </summary>
 /// <param name="baseDate"></param>
 /// <param name="interpolation"></param>
 /// <param name="extrapolation"></param>
 /// <param name="dates"></param>
 /// <param name="dfs"></param>
 public SimpleDiscountFactorCurve(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation,
                                  DateTime[] dates, Decimal[] dfs)
     : base(new DiscreteCurve(PointCurveHelper(baseDate, dates), Converter(dfs)), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     BaseDate = baseDate;
 }
Exemple #12
0
 /// <summary>
 /// SimpleFxCurve
 /// </summary>
 /// <param name="baseDate"></param>
 /// <param name="interpolation"></param>
 /// <param name="extrapolation"></param>
 /// <param name="times"></param>
 /// <param name="dfs"></param>
 public SimpleEquityCurve(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation, //TODO add a curve id.
                          IList <double> times, IList <double> dfs)
     : base(new DiscreteCurve(times, dfs), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     BaseDate = baseDate;
 }
 public float Update(float dt, InterpolationMode i)
 {
     return(Update(ref this, dt, InterpolationFactory.GetInterpolation(i)));
 }
 /// <summary>
 /// Builds a raw volatility surface from basic data types.
 /// </summary>
 /// <param name="data"></param>
 /// <param name="forwards"></param>
 /// <param name="xInterpolation"></param>
 /// <param name="yInterpolation"></param>
 public ExtendedVolatilitySurfaceInterpolator(MultiDimensionalPricingData data, ParametricAdjustmentPoint[] forwards, string xInterpolation, string yInterpolation)
     : base(ProcessMultiDimensionalPricingData(data), forwards, InterpolationFactory.Create(xInterpolation), InterpolationFactory.Create(yInterpolation), true)
 {
 }
Exemple #15
0
 /// <summary>
 /// SimpleCommodityCurve
 /// </summary>
 /// <param name="baseDate"></param>
 /// <param name="interpolation"></param>
 /// <param name="extrapolation"></param>
 /// <param name="dfs"></param>
 public SimpleBondCurve(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation,
                        IDictionary <DateTime, double> dfs)
     : base(new DiscreteCurve(PointCurveHelper(baseDate, dfs.Keys), dfs.Values.ToList()), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     BaseDate = baseDate;
 }
 ///<summary>
 ///</summary>
 ///<param name="termCurve"></param>
 ///<param name="baseDate"></param>
 ///<param name="dayCounter"></param>
 public FxCurveInterpolator(TermCurve termCurve, DateTime baseDate, IDayCounter dayCounter)
     : base(CurveHelper.Converter(termCurve, baseDate, dayCounter), InterpolationFactory.Create(termCurve), CurveHelper.IsExtrapolationPermitted(termCurve))
 {
 }
Exemple #17
0
 /// <summary>
 /// SimpleVolatilitySurface
 /// </summary>
 /// <param name="baseDate"></param>
 /// <param name="interpolation"></param>
 /// <param name="extrapolation"></param>
 /// <param name="times"></param>
 /// <param name="strikes"></param>
 /// <param name="vols"></param>
 public SimpleVolatilitySurface(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation, //TODO add a curve id.
                                double[] times, double[] strikes, double[,] vols)
     : base(times, strikes, new Matrix(vols), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     _baseDate = baseDate;
 }
        /// <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);
        }
Exemple #19
0
 public float Interpolate(float v0, float v1, float t)
 {
     return(InterpolationFactory.Linear(v0, v1, t));
 }
Exemple #20
0
 public float Interpolate(float v0, float v1, float t)
 {
     return(InterpolationFactory.EaseInQuad(v0, v1, t));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="SimpleZeroRateCurve"/> class.
 /// </summary>
 /// <param name="interpolation">The interpolation.</param>
 /// <param name="extrapolation">if set to <c>true</c> [extrapolation].</param>
 /// <param name="times">The times.</param>
 /// <param name="rates">The rates.</param>
 public SimpleZeroInflationRateCurve(InterpolationMethod interpolation, bool extrapolation, double[] times, double[] rates)
     : base(new DiscreteCurve(times, rates), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
 }
 /// <summary>
 /// SimpleCapletCurve
 /// </summary>
 /// <param name="baseDate"></param>
 /// <param name="interpolation"></param>
 /// <param name="extrapolation"></param>
 /// <param name="vols"></param>
 public SimpleCapletCurve(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation,
                          IDictionary <DateTime, Decimal> vols)
     : base(new DiscreteCurve(PointCurveHelper(baseDate, vols.Keys), Converter(vols.Values)), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     BaseDate = baseDate;
 }
Exemple #23
0
 /// <summary>
 /// SimpleInflationCurve
 /// </summary>
 /// <param name="baseDate"></param>
 /// <param name="interpolation"></param>
 /// <param name="extrapolation"></param>
 /// <param name="times"></param>
 /// <param name="dfs"></param>
 public SimpleInflationCurve(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation, //TODO add a curve id.
                             double[] times, double[] dfs)
     : base(new DiscreteCurve(times, dfs), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     BaseDate = baseDate;
 }
 /// <summary>
 /// SimpleDiscountFactorCurve
 /// </summary>
 /// <param name="referenceCurve"></param>
 /// <param name="baseDate"></param>
 /// <param name="extrapolation"></param>
 /// <param name="times"></param>
 /// <param name="dfs"></param>
 public SimpleSpreadDiscountFactorCurve(IRateCurve referenceCurve, DateTime baseDate, bool extrapolation,
                                        double[] times, double[] dfs)
     : base(new DiscreteCurve(times, dfs), InterpolationFactory.CreateRateSpread(referenceCurve), extrapolation)
 {
     BaseDate = baseDate;
 }
 /// <summary>
 /// Builds a raw volatility surface from basic data types.
 /// </summary>
 /// <param name="rows"></param>
 /// <param name="columns"></param>
 /// <param name="forwards"></param>
 /// <param name="volData"></param>
 /// <param name="xInterpolation"></param>
 /// <param name="yInterpolation"></param>
 public ExtendedVolatilitySurfaceInterpolator(double[] rows, double[] columns, double[] forwards, Matrix volData, string xInterpolation, string yInterpolation)
     : base(rows, columns, forwards, volData, InterpolationFactory.Create(xInterpolation), InterpolationFactory.Create(yInterpolation))
 {
 }
 /// <summary>
 /// SimpleDiscountFactorCurve
 /// </summary>
 /// <param name="referenceCurve"></param>
 /// <param name="baseDate"></param>
 /// <param name="extrapolation"></param>
 /// <param name="dfs"></param>
 public SimpleSpreadDiscountFactorCurve(ICommodityCurve referenceCurve, DateTime baseDate, bool extrapolation,
                                        IDictionary <DateTime, double> dfs)
     : base(new DiscreteCurve(PointCurveHelper(baseDate, dfs.Keys), dfs.Values.ToList()), InterpolationFactory.CreateCommoditySpread(referenceCurve), extrapolation)
 {
     BaseDate = baseDate;
 }
Exemple #27
0
 /// <summary>
 /// SimpleFxCurve
 /// </summary>
 /// <param name="baseDate"></param>
 /// <param name="interpolation"></param>
 /// <param name="extrapolation"></param>
 /// <param name="dates"></param>
 /// <param name="dfs"></param>
 public SimpleEquityCurve(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation, //TODO add a curve id.
                          IEnumerable <DateTime> dates, IList <double> dfs)
     : base(new DiscreteCurve(PointCurveHelper(baseDate, dates), dfs), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     BaseDate = baseDate;
 }
 /// <summary>
 /// SimpleDiscountFactorCurve
 /// </summary>
 /// <param name="referenceCurve"></param>
 /// <param name="baseDate"></param>
 /// <param name="extrapolation"></param>
 /// <param name="dates"></param>
 /// <param name="dfs"></param>
 public SimpleSpreadDiscountFactorCurve(IRateCurve referenceCurve, DateTime baseDate, bool extrapolation,
                                        IEnumerable <DateTime> dates, IEnumerable <decimal> dfs)
     : base(new DiscreteCurve(PointCurveHelper(baseDate, dates), ConvertDecimals(dfs)), InterpolationFactory.CreateRateSpread(referenceCurve), extrapolation)
 {
     BaseDate = baseDate;
 }
Exemple #29
0
 /// <summary>
 /// SimpleCommodityCurve
 /// </summary>
 public SimpleBondCurve(DateTime baseDate, InterpolationMethod interpolation, bool extrapolation,
                        IEnumerable <DateTime> dates, double[] dfs)
     : base(new DiscreteCurve(PointCurveHelper(baseDate, dates), dfs), InterpolationFactory.Create(interpolation.Value), extrapolation)
 {
     BaseDate = baseDate;
 }
Exemple #30
0
 public float Interpolate(float v0, float v1, float t)
 {
     return(InterpolationFactory.EaseOutCubic(v0, v1, t));
 }