Esempio n. 1
0
        public static CurvePoint Solve(this ExtrapolationShort extraShort, CurvePoint min, Maturity maturity)
        {
            var p = min.ToPoint();
            var x = maturity.ToX();

            var point = extraShort.GetPoint(p, x);

            return(CurvePoint.FromPoint(point, min.Price.Currency));
        }
Esempio n. 2
0
 public CurveRecipe(Guid id, Tenor lastLiquidTenor, DayCountConvention dayCountConvention, Interpolation interpolation,
                    ExtrapolationShort extrapolationShort, ExtrapolationLong extrapolationLong, OutputFrequency outputFrequency, OutputType outputType, params OrderedTransformation[] transformations)
 {
     Id = id;
     LastLiquidTenor    = lastLiquidTenor;
     DayCountConvention = dayCountConvention;
     Interpolation      = interpolation;
     ExtrapolationShort = extrapolationShort;
     ExtrapolationLong  = extrapolationLong;
     OutputFrequency    = outputFrequency;
     OutputType         = outputType;
     _transformations   = transformations?.ToImmutableArray() ?? ImmutableArray <OrderedTransformation> .Empty;
 }
Esempio n. 3
0
        private CurvePoint ResolveMaturity(Maturity maturity, IEnumerable <CurvePoint> points)
        {
            var alreadyExistingPoint = points.FirstOrDefault(p => p.Maturity == maturity);

            if (alreadyExistingPoint != null)
            {
                return(alreadyExistingPoint);
            }

            var minPoint = points
                           .OrderBy(p => p.Maturity)
                           .First();

            if (maturity < minPoint.Maturity)
            {
                return(ExtrapolationShort.Solve(minPoint, maturity));
            }

            var maxPoint = points
                           .OrderBy(p => p.Maturity)
                           .Last();

            if (maturity > maxPoint.Maturity)
            {
                return(ExtrapolationLong.Solve(maxPoint, maturity));
            }

            var before = points
                         .Where(p => p.Maturity < maturity)
                         .OrderBy(p => p.Maturity)
                         .Last();

            var after = points
                        .Where(p => p.Maturity > maturity)
                        .OrderBy(p => p.Maturity)
                        .First();

            return(Interpolation.Solve(before, after, maturity));
        }
Esempio n. 4
0
        public CurveRecipe Define(NonEmptyGuid marketCurveId, NonEmptyString shortName, NonEmptyString description, Tenor lastLiquidTenor, DayCountConvention dayCountConvention, Interpolation interpolation, ExtrapolationShort extrapolationShort,
                                  ExtrapolationLong extrapolationLong, OutputFrequency outputFrequency, OutputType outputType)
        {
            var @event = CurveRecipeCreated(marketCurveId, shortName, description, lastLiquidTenor, dayCountConvention, interpolation, extrapolationShort,
                                            extrapolationLong, outputFrequency.OutputSeries, outputFrequency.MaximumMaturity.Value, outputType);

            GenerateEvent(@event);

            return(this);
        }
Esempio n. 5
0
 private static Point GetPoint(this ExtrapolationShort extrapolation, Point p, X x) => extrapolation switch
 {