// Calculate the time for initialise a SingleCurveBuilderInterpBestFit public static void TimeForBestFitVs3m() { #region Inputs // Start input Date refDate = (new Date(DateTime.Now)).mod_foll(); // I populate market rates set: from file, from real time, ... here not real data RateSet mktRates = new RateSet(refDate); // Depos mktRates.Add(1.434e-2, "3m", BuildingBlockType.EURDEPO); // Swap Vs 3M mktRates.Add(2.813e-2, "1Y", BuildingBlockType.EURSWAP3M); mktRates.Add(3.096e-2, "2Y", BuildingBlockType.EURSWAP3M); mktRates.Add(3.322e-2, "3Y", BuildingBlockType.EURSWAP3M); mktRates.Add(3.529e-2, "4Y", BuildingBlockType.EURSWAP3M); mktRates.Add(3.709e-2, "5Y", BuildingBlockType.EURSWAP3M); mktRates.Add(3.862e-2, "6Y", BuildingBlockType.EURSWAP3M); mktRates.Add(3.991e-2, "7Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.101e-2, "8Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.197e-2, "9Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.285e-2, "10Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.443e-2, "12Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.614e-2, "15Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.711e-2, "20Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.671e-2, "25Y", BuildingBlockType.EURSWAP3M); mktRates.Add(4.589e-2, "30Y", BuildingBlockType.EURSWAP3M); #endregion end Inputs #region building curve DateTime timer; // initialise the timer timer = DateTime.Now; double firstFixing = 1.434e-2; SingleCurveBuilderSmoothingFwd <OnLogDf, SimpleCubicInterpolator> C = new SingleCurveBuilderSmoothingFwd <OnLogDf, SimpleCubicInterpolator>(mktRates, firstFixing); Console.WriteLine("\n{0} \nFitted in {1}", C.ToString(), DateTime.Now - timer); timer = DateTime.Now; SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator> C1 = new SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator>(mktRates); Console.WriteLine("\n{0} \nFitted in {1}", C1.ToString(), DateTime.Now - timer); timer = DateTime.Now; SingleCurveBuilderStandard <OnLogDf, LinearInterpolator> C2 = new SingleCurveBuilderStandard <OnLogDf, LinearInterpolator>(mktRates, OneDimensionInterpolation.Linear); Console.WriteLine("\n{0} \nFitted in {1}", C2.ToString(), DateTime.Now - timer); #endregion building curve }
// Calculate the time for initialise a SingleCurveBuilderInterpBestFit public static void TimeForBestFitVs6m() { #region Inputs // Start input Date refDate = (new Date(DateTime.Now)).mod_foll(); // I populate markets rates set: from file, from real time, ... here not real data RateSet mktRates = new RateSet(refDate); // Depos mktRates.Add(2.243e-2, "1m", BuildingBlockType.EURDEPO); mktRates.Add(2.435e-2, "3m", BuildingBlockType.EURDEPO); mktRates.Add(2.620e-2, "6m", BuildingBlockType.EURDEPO); // Swap Vs 6M mktRates.Add(2.869e-2, "1Y", BuildingBlockType.EURSWAP6M); mktRates.Add(3.316e-2, "2Y", BuildingBlockType.EURSWAP6M); mktRates.Add(3.544e-2, "3Y", BuildingBlockType.EURSWAP6M); mktRates.Add(3.745e-2, "4Y", BuildingBlockType.EURSWAP6M); mktRates.Add(3.915e-2, "5Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.057e-2, "6Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.175e-2, "7Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.273e-2, "8Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.362e-2, "9Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.442e-2, "10Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.589e-2, "12Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.750e-2, "15Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.835e-2, "20Y", BuildingBlockType.EURSWAP6M); mktRates.Add(4.787e-2, "25Y", BuildingBlockType.EURSWAP6M); #endregion end Inputs #region building curve DateTime timer; timer = DateTime.Now; double firstFixing = 1.62e-2; SingleCurveBuilderSmoothingFwd <OnLogDf, SimpleCubicInterpolator> C = new SingleCurveBuilderSmoothingFwd <OnLogDf, SimpleCubicInterpolator>(mktRates, firstFixing); Console.WriteLine("\n{0} \nFitted in {1}", C.ToString(), DateTime.Now - timer); timer = DateTime.Now; SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator> C1 = new SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator>(mktRates); Console.WriteLine("\n{0} \nFitted in {1}", C1.ToString(), DateTime.Now - timer); timer = DateTime.Now; SingleCurveBuilderStandard <OnLogDf, LinearInterpolator> C2 = new SingleCurveBuilderStandard <OnLogDf, LinearInterpolator>(mktRates, OneDimensionInterpolation.Linear); Console.WriteLine("\n{0} \nFitted in {1}", C2.ToString(), DateTime.Now - timer); #endregion building curve }
// Print on excel forward rate using different curve builder for OIS fwd 3m public static void CheckFwdRatesOIS3m() { #region Inputs // ref date Date refDate = (new Date(DateTime.Now)).mod_foll(); // I populate market rates set: from file, from real time, ... RateSet mktRates = new RateSet(refDate); mktRates.Add(2.338e-2, "1d", BuildingBlockType.EURDEPO); // mktRates.Add(2.272e-2, "1w", BuildingBlockType.EONIASWAP); // mktRates.Add(2.241e-2, "2w", BuildingBlockType.EONIASWAP); // mktRates.Add(2.16e-2, "3w", BuildingBlockType.EONIASWAP); // mktRates.Add(2.226e-2, "1m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.299e-2, "2m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.323e-2, "3m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.344e-2, "4m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.371e-2, "5m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.39e-2, "6m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.41e-2, "7m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.4316e-2, "8m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.449e-2, "9m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.466e-2, "10m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.48e-2, "11m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.529e-2, "15m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.565e-2, "18m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.603e-2, "21m", BuildingBlockType.EONIASWAP); // mktRates.Add(2.493e-2, "1Y", BuildingBlockType.EONIASWAP); mktRates.Add(2.644e-2, "2Y", BuildingBlockType.EONIASWAP); mktRates.Add(2.849e-2, "3Y", BuildingBlockType.EONIASWAP); mktRates.Add(3.08e-2, "4Y", BuildingBlockType.EONIASWAP); mktRates.Add(3.292e-2, "5Y", BuildingBlockType.EONIASWAP); mktRates.Add(3.471e-2, "6Y", BuildingBlockType.EONIASWAP); mktRates.Add(3.621e-2, "7Y", BuildingBlockType.EONIASWAP); mktRates.Add(3.748e-2, "8Y", BuildingBlockType.EONIASWAP); mktRates.Add(3.86e-2, "9Y", BuildingBlockType.EONIASWAP); mktRates.Add(3.965e-2, "10Y", BuildingBlockType.EONIASWAP); mktRates.Add(4.064e-2, "11Y", BuildingBlockType.EONIASWAP); mktRates.Add(4.155e-2, "12Y", BuildingBlockType.EONIASWAP); // From here interpolation is need mktRates.Add(4.358e-2, "15Y", BuildingBlockType.EONIASWAP); mktRates.Add(4.48e-2, "20Y", BuildingBlockType.EONIASWAP); mktRates.Add(4.465e-2, "25Y", BuildingBlockType.EONIASWAP); mktRates.Add(4.415e-2, "30Y", BuildingBlockType.EONIASWAP); List <IRateCurve> CurveList = new List <IRateCurve>(); // list containing curve List <string> CurveString = new List <string>(); // list containing labels #endregion end Inputs #region building curve SingleCurveBuilderStandard <OnDf, LinearInterpolator> C1 = new SingleCurveBuilderStandard <OnDf, LinearInterpolator>(mktRates, OneDimensionInterpolation.Linear); SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator> C2 = new SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator>(mktRates); #endregion end building curve // populate lists CurveList.Add(C1); CurveString.Add(C1.ToString()); CurveList.Add(C2); CurveString.Add(C2.ToString()); #region printing output // I get the longer eonia swap available from the input data SwapStyle LS = (SwapStyle)mktRates.GetArrayOfBB().Last(); Schedule s = new Schedule(refDate, LS.endDate, "3m", Rule.Backward, LS.swapLeg1.SwapBusDayRollsAdj, "0d", LS.swapLeg1.SwapBusDayPayAdj); Dc dc = Dc._Act_360; Date[] FromDate = s.fromDates; Date[] ToDate = s.toDates; int N = FromDate.Length; List <Vector <double> > Fwds = new List <Vector <double> >(); double[] dt = new double[N]; for (int i = 0; i < N; i++) { dt[i] = FromDate[0].YF(ToDate[i], Dc._30_360); } foreach (IRateCurve myC in CurveList) { double[] fwd = new double[N]; for (int i = 0; i < N; i++) { double yf = FromDate[i].YF(ToDate[i], dc); double df_ini = myC.Df(FromDate[i]); double df_end = myC.Df(ToDate[i]); fwd[i] = ((df_ini / df_end) - 1) / yf; } Fwds.Add(new Vector <double>(fwd)); } ExcelMechanisms exl = new ExcelMechanisms(); exl.printInExcel(new Vector <double>(dt), CurveString, Fwds, "Fwd 3M", "time", "rate"); // .printInExcel<T> #endregion end printing output }
// Print on excel forward rate using different curve builder for 3m public static void CheckFwdRatesVs3m() { #region Inputs // Start input Date refDate = (new Date(DateTime.Now)).mod_foll(); // I populate market rates set: from file, from real time, ... RateSet mktRates = new RateSet(refDate); // Depos mktRates.Add(0.434e-2, "3m", BuildingBlockType.EURDEPO); // Swap Vs 3M mktRates.Add(0.813e-2, "1Y", BuildingBlockType.EURSWAP3M); mktRates.Add(1.096e-2, "2Y", BuildingBlockType.EURSWAP3M); mktRates.Add(1.322e-2, "3Y", BuildingBlockType.EURSWAP3M); mktRates.Add(1.529e-2, "4Y", BuildingBlockType.EURSWAP3M); mktRates.Add(1.709e-2, "5Y", BuildingBlockType.EURSWAP3M); mktRates.Add(1.862e-2, "6Y", BuildingBlockType.EURSWAP3M); mktRates.Add(1.991e-2, "7Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.101e-2, "8Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.197e-2, "9Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.285e-2, "10Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.443e-2, "12Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.614e-2, "15Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.711e-2, "20Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.671e-2, "25Y", BuildingBlockType.EURSWAP3M); mktRates.Add(2.589e-2, "30Y", BuildingBlockType.EURSWAP3M); #endregion end Inputs #region building curve SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator> C1 = new SingleCurveBuilderInterpBestFit <OnLogDf, SimpleCubicInterpolator>(mktRates); double firstFixing = 0.434e-2; SingleCurveBuilderSmoothingFwd <OnLogDf, SimpleCubicInterpolator> C2 = new SingleCurveBuilderSmoothingFwd <OnLogDf, SimpleCubicInterpolator>(mktRates, firstFixing); SingleCurveBuilderStandard <OnLogDf, LinearInterpolator> C3 = new SingleCurveBuilderStandard <OnLogDf, LinearInterpolator>(mktRates, OneDimensionInterpolation.Linear); #endregion end building curve List <IRateCurve> CurveList = new List <IRateCurve>(); // list containing curve List <string> CurveString = new List <string>(); // list containing labels // populate lists CurveList.Add(C1); CurveString.Add(C1.ToString()); CurveList.Add(C2); CurveString.Add(C2.ToString()); CurveList.Add(C3); CurveString.Add(C3.ToString()); #region printing output // I get the longer swap SwapStyle LS = (SwapStyle)mktRates.GetArrayOfBB().Last(); Dc dc = Dc._Act_360; Date[] FromDate = LS.scheduleLeg2.fromDates; Date[] ToDate = LS.scheduleLeg2.toDates; int N = FromDate.Length; List <Vector <double> > Fwds = new List <Vector <double> >(); double[] dt = new double[N]; for (int i = 0; i < N; i++) { dt[i] = FromDate[0].YF(ToDate[i], Dc._30_360); } foreach (IRateCurve myC in CurveList) { double[] fwd = new double[N]; for (int i = 0; i < N; i++) { double yf = FromDate[i].YF(ToDate[i], dc); double df_ini = myC.Df(FromDate[i]); double df_end = myC.Df(ToDate[i]); fwd[i] = ((df_ini / df_end) - 1) / yf; } Fwds.Add(new Vector <double>(fwd)); } ExcelMechanisms exl = new ExcelMechanisms(); exl.printInExcel(new Vector <double>(dt), CurveString, Fwds, "Fwd vs 3M", "time", "rate"); // .printInExcel<T> #endregion end printing output }