private void TransformToDiscountThenDesired(Curve curve) { var transformerFactory = new CurveTypeTransformerFactory(); var originalCurveTransformer = transformerFactory.GetTransformer(curve.CurveType); var discountCurveTransformer = transformerFactory.GetTransformer(CurveType.Discount); discountCurveTransformer.Transform(curve); //Note: Discount factors are not dependent on CompoundingType/Frequency so this can be performed safely curve.CompoundingType = _targetCompoundingType; curve.CompoundingFrequency = TargetCompoundingFrequency; originalCurveTransformer.Transform(curve); }
static void Main() { var curveInfoFilePath = @"C:\Users\flori\OneDrive\Documents\Learning\C# Curves\Inputs\TestCurveInformation.csv"; var ratesFilePath = @"C:\Users\flori\OneDrive\Documents\Learning\C# Curves\Inputs\TestRates.csv"; var outputPathCurves = @"C:\Users\flori\OneDrive\Documents\Learning\C# Curves\Outputs\TransformedCurves.csv"; var curves = ParseCurves(curveInfoFilePath, ratesFilePath); var adjustedCurves = new Dictionary <string, Curve>(); foreach (var curveWithName in curves) { var name = curveWithName.Key; var curve = curveWithName.Value; adjustedCurves.Add($"{name}_1base", curve); //interpolated curve example var interpolatedCurve = curve.Copy(); var interpolator = new InterpolationModifier(InterpolationType.Spline, curve.TermsAndRates); interpolator.Interpolate(interpolatedCurve, MaturityType.Quarterly); adjustedCurves.Add($"{name}_2interpolated", interpolatedCurve); //extrapolated curve example var extrapolatedCurve = interpolatedCurve.Copy(); var extrapolator = new ExtrapolationModifier(ExtrapolationType.Constant, interpolatedCurve.TermsAndRates); extrapolator.Extrapolate(extrapolatedCurve, 100); adjustedCurves.Add($"{name}_3extrapolated", extrapolatedCurve); //transformed curve example forward var transformedCurveDisc = extrapolatedCurve.Copy(); var curveTypeTransformerDisc = new CurveTypeTransformerFactory().GetTransformer(CurveType.Discount); curveTypeTransformerDisc.Transform(transformedCurveDisc); adjustedCurves.Add($"{name}_4transformedDisc", transformedCurveDisc); //transformed curve example forward var transformedCurveFwd = transformedCurveDisc.Copy(); var curveTypeTransformerFwd = new CurveTypeTransformerFactory().GetTransformer(CurveType.Forward); curveTypeTransformerFwd.Transform(transformedCurveFwd); adjustedCurves.Add($"{name}_5transformedFwd", transformedCurveFwd); } WriteRatesToCsv(adjustedCurves, outputPathCurves); }