def test_FinInterpolatedForwards(): import matplotlib.pyplot as plt tValues = np.array([0.0, 3.0, 5.0, 10.0]) rValues = np.array([0.04, 0.07, 0.08, 0.09]) dfValues = np.exp(-tValues*rValues) tInterpValues = np.linspace(0.0, 12.0, 200) print(tValues) print(rValues) print(dfValues) curveDate = FinDate(2019,1,3) for method in FinInterpMethods: discountCurve = FinDiscountCurve(curveDate, tValues, dfValues, method) dfInterpValues = discountCurve.df(tInterpValues) fwdInterpValues = discountCurve.fwd(tInterpValues) zeroInterpValues = discountCurve.zeroRate(tInterpValues) if PLOT_GRAPHS: plt.figure(figsize=(8, 6)) plt.plot(tValues, dfValues, 'o', color='g', label="DFS:") plt.plot(tInterpValues, dfInterpValues, color='r', label="DF:" + str(method)) plt.legend() plt.figure(figsize=(8, 6)) plt.plot(tInterpValues, fwdInterpValues, color='r', label="FWD:" + str(method)) plt.plot(tInterpValues, zeroInterpValues, color='b', label="ZERO:" + str(method)) plt.plot(tValues, rValues, 'o', color='g', label="ZERO RATES") plt.legend()
def test_FinDiscountCurve(): # Create a curve from times and discount factors startDate = FinDate(1, 1, 2018) years = np.linspace(0, 10, 6) rate = 0.05 + 0.005 * years - 0.0003 * years * years dfs = np.exp(-rate * years) dates = startDate.addYears(years) curve = FinDiscountCurve(startDate, dates, dfs, FinInterpTypes.FLAT_FWD_RATES) testCases.header("T", "DF", "ZERORATE", "CC_FWD", "MM_FWD", "SURVPROB") plotYears = np.linspace(0, 12, 12 * 12 + 1)[1:] plotDates = startDate.addYears(plotYears) # Examine dependency of curve on compounding rate zeroRates_A = curve.zeroRate(plotDates, FinFrequencyTypes.ANNUAL) zeroRates_S = curve.zeroRate(plotDates, FinFrequencyTypes.SEMI_ANNUAL) zeroRates_Q = curve.zeroRate(plotDates, FinFrequencyTypes.QUARTERLY) zeroRates_M = curve.zeroRate(plotDates, FinFrequencyTypes.MONTHLY) zeroRates_C = curve.zeroRate(plotDates, FinFrequencyTypes.CONTINUOUS) if PLOT_GRAPHS: plt.figure(figsize=(6, 4)) plt.plot(plotYears, scale(zeroRates_A, 100), label='A') plt.plot(plotYears, scale(zeroRates_S, 100), label='S') plt.plot(plotYears, scale(zeroRates_Q, 100), label='Q') plt.plot(plotYears, scale(zeroRates_M, 100), label='M') plt.plot(plotYears, scale(zeroRates_C, 100), label='C') plt.ylim((5, 8)) plt.title('Discount Curves') plt.xlabel('Time (years)') plt.ylabel('Zero Rate (%)') plt.legend(loc='lower right', frameon=False) # Examine dependency of fwd curve on the interpolation scheme for interp in FinInterpTypes: curve = FinDiscountCurve(startDate, dates, dfs, interp) fwdRates = curve.fwd(plotDates) zeroRates = curve.zeroRate(plotDates, FinFrequencyTypes.ANNUAL) parRates = curve.swapRate(startDate, plotDates, FinFrequencyTypes.ANNUAL) if PLOT_GRAPHS: plt.figure(figsize=(6, 4)) plt.plot(plotYears, scale(fwdRates, 100), label='FWD RATES') plt.plot(plotYears, scale(zeroRates, 100), label='ZERO RATES') plt.plot(plotYears, scale(parRates, 100), label='PAR RATES') plt.ylim((3.0, 8.5)) plt.title('Forward Curves using ' + str(interp)) plt.xlabel('Time (years)') plt.ylabel('Fwd Rate (%)') plt.legend(loc='lower right', frameon=False)
def test_FinInterpolatedForwards(): import matplotlib.pyplot as plt tValues = np.array([0.0, 3.0, 5.0, 10.0]) rValues = np.array([0.04, 0.07, 0.08, 0.09]) dfValues = np.exp(-tValues * rValues) tInterpValues = np.linspace(0.0, 12.0, 49) curveDate = FinDate(1, 1, 2019) tDates = curveDate.addYears(tValues) tInterpDates = curveDate.addYears(tInterpValues) for interpType in FinInterpTypes: discountCurve = FinDiscountCurve(curveDate, tDates, dfValues, interpType) dfInterpValues = discountCurve.df(tInterpDates) fwdInterpValues = discountCurve.fwd(tInterpDates) zeroInterpValues = discountCurve.zeroRate(tInterpDates) if PLOT_GRAPHS: plt.figure(figsize=(8, 6)) plt.plot(tValues, dfValues, 'o', color='g', label="DFS:") plt.plot(tInterpValues, dfInterpValues, color='r', label="DF:" + str(interpType)) plt.legend() plt.figure(figsize=(8, 6)) plt.plot(tInterpValues, fwdInterpValues, color='r', label="FWD:" + str(interpType)) plt.plot(tInterpValues, zeroInterpValues, color='b', label="ZERO:" + str(interpType)) plt.plot(tValues, rValues, 'o', color='g', label="ZERO RATES") plt.legend()