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);
        }
Example #2
0
        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);
        }