public static CurvePoint Solve(this ExtrapolationLong 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)); }
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); }
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; }
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)); }
private static Point GetPoint(this ExtrapolationLong extrapolation, Point p, X x) => extrapolation switch {