Esempio n. 1
0
        //To transform par to discount, get the par rates needed
        private static Curve GetParCurveForTransformationToDiscount(Curve curve)
        {
            var inputTermsAndRates = curve.TermsAndRates;
            var freqTimesteps      = decimal.Divide(1, (decimal)curve.CompoundingFrequency.Value);;

            var requiredTerms = Array.ConvertAll(CreateArrayConstantIncrement((decimal)inputTermsAndRates.Keys.Max(), freqTimesteps, freqTimesteps), x => (double)x);

            if (requiredTerms.Any(x => !inputTermsAndRates.ContainsKey(x)))
            {
                Log.Info("Par rates have not been given for every cashflow frequency. Linear interpolation will be done on the par rates for missing rates! If you would like to use a different interpolation method, interpolate before calling this method.");
            }

            var interpolator = new InterpolationModifier(InterpolationType.Linear, inputTermsAndRates);
            var interpolatedTermsAndRates = interpolator.Interpolate(requiredTerms.ToArray());
            var interpolatedParCurve      = curve.Copy();

            interpolatedParCurve.SetTermsAndRates(interpolatedTermsAndRates);
            return(interpolatedParCurve);
        }
Esempio n. 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);
        }