IRRBB Interest Rate Shock Scenarios using R code

[This article was first published on K & L Fintech Modeling, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
This post explains how to calculate the IRRBB interest rate shock scenarios of BCBS(2016) prior to discussing change in economic value of equity (∆EVE) and net interest income (∆NII).
IRRBB Interest Rate Shock Scenarios using R code


IRRBB Interest Rate Shock Scenarios



IRRBB refers to the current or prospective risk to a bank’s capital and to its earnings, arising from the impact of adverse movements in interest rates on its banking book. The adverse movements of interest rates are implemented by hypothetical shock scenarios using the guideline of BCBS (2016).


The impact of interest rate shocks on individual bank’s change in economic value of equity (∆EVE) and net interest income (∆NII) are computed based on these interest rate shock scenarios. These interest rate shocks are heuristic and purely hypothetical. They do not reflect monetary policy considerations.



6 Interest Rate Shock Scenarios


Banks should apply six prescribed interest rate shock scenarios to capture parallel and non-parallel gap risks for EVE and two prescribed interest rate shock scenarios for NII (two parallel shocks).

These scenarios are applied to IRRBB exposures in each currency for which the bank has material positions. BCBS (2016) presents the standardized interest rate shock scenarios as follows.

  1. parallel shock up : a constant parallel shock up across all maturity
  2. parallel shock down : a constant parallel shock down across all maturity
  3. short rates shock up
  4. short rates shock down
  5. steeper shock : short rates down and long rates up
  6. flatter shock : short rates up and long rates down


For illustration purpose, when we assume that a yield curve is constant at 1% across all maturities (Base), shocked curves are generated as follows.

IRRBB Interest Rate Shock Scenarios using R code



Formula for IRRBB IR Shock Scenarios


The size of shock is different from currency to currency. For instance, 6 shocks for USD currency are derived as follows.

1) Parallel shock up/down
\[\begin{align} \Delta R_{p}(t_k) = \pm \overline{R}_{p,US}= \pm 0.02 \end{align}\]
2) Short rates shock up/down
\[\begin{align} \Delta R_{short}(t_k) &= \pm \overline{R}_{short,US} \times \exp \left(-\frac{t_k}{4} \right) \\ &= \pm 0.03 \times \exp \left(-\frac{t_k}{4} \right) \end{align}\] Here, \(\exp \left(-\frac{t_k}{4} \right)\) is a monotonic decreasing function with maturity. This type of functional form is already used as forward rate slope factor of Nelson-Siegel model.

To define the steepener/flattener shock, additional long rate shock is needed to move long-term rates as follows.


3) Long rates shock up/down
\[\begin{align} \Delta R_{long}(t_k) &= \pm \overline{R}_{long,US} \times \left(1-e^{-\frac{t_k}{4}}\right) \\ &= \pm 0.015 \times \left(1-e^{-\frac{t_k}{4}}\right) \end{align}\] This is used only when steepener/flattener shock are defined.


4) Rotational shock up/down (steepener/flattener)

\[\begin{align} \Delta R_{steep}(t_k) &= -0.65 \times |\Delta R_{short}(t_k)| + 0.9 \times |\Delta R_{long}(t_k)| \\ \Delta R_{flat}(t_k) &= +0.80 \times |\Delta R_{short}(t_k)| – 0.6 \times |\Delta R_{long}(t_k)| \end{align}\]
As these formula are for USD currency using \(\overline{R}_{shock,US}\), for other currencies refer to the next table in BCBS (2016) to find \(\overline{R}_{shock,c} \).

IRRBB  Interest Rate Shock Scenarios using R code


R code


The following R code implements IRRBB IR scenarios with the guideline of BCBS (2016).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#========================================================#
# Quantitative ALM, Financial Econometrics & Derivatives 
# ML/DL using R, Python, Tensorflow by Sang-Heon Lee 
#
# https://kiandlee.blogspot.com
#——————————————————–#
# IRRBB Interest Rate Shock Scenarios
#========================================================#
 
graphics.off(); rm(list = ls())
 
#=======================================================
# read data
#=======================================================
str.zero < “mat rate
     0.083333333    0.01529
     0.25            0.01648
     0.5            0.01815
     0.75            0.01947
     1              0.02045
     2              0.02252
     3              0.02410
     4              0.02549
     5              0.02637
     6              0.02730
     7              0.02787
     8              0.02825
     9              0.02857
     10              0.02881
     12              0.02913
     15              0.02953
     20              0.03042″
 
df < read.table(text = str.zero, header = TRUE)
 
#=======================================================
# make shocks
#=======================================================
 
# size of shocks by each currency
# USD parameter : BCBS (2016)
r_bar_p_c < 0.02
r_bar_s_c < 0.03
r_bar_l_c < 0.015
 
# placeholder for rate shocks
dr < data.frame(base = rep(0,length(df$mat)))
 
# Parallel shock up/down
dr$pu <  r_bar_p_c
dr$pd < r_bar_p_c
 
# Short rate shock up/down
dr$su <  r_bar_s_c*exp(df$mat/4)
dr$sd < r_bar_s_c*exp(df$mat/4)
 
# Long rate shock
drlong < r_bar_l_c*(1exp(df$mat/4))
 
# Rotational shock 
dr$steep < 0.65*dr$su + 0.9*drlong
dr$flat  <   0.8*dr$su  0.6*drlong
 
dr
 
#=======================================================
# generate shocked curves
#=======================================================
 
(df.irrbb < 0.01 + dr)
x11(width = 5, height = 4
matplot(df$mat, df.irrbb, type=“l”, lty = 1, lwd = 3,
        xlab = “Maturity(year)”, ylab = “Yield(decimal)”,
        main = “IRRBB IR shock scenarios (Base = 1%)”)
 
(df.irrbb < df$rate + dr)
x11(width = 5, height = 4
matplot(df$mat, df.irrbb, type=“l”, lty = 1, lwd = 3,
        xlab = “Maturity(year)”, ylab = “Yield(decimal)”,
        main = “IRRBB IR shock scenarios”)
 
cs


Running this R code, we can get the following table which contains the base curve and 6 shocked curves.

Interest Rate Risk in the Banking Book


The base yield curve and the six shock scenarios are depicted as follows.

Interest Rate Risk in the Banking Book


Concluding Remarks


In this post we have implemented R code to calculate BCBS(2016) IRRBB IR scenarios. Now that these IR scenarios are given, understanding and calculating ∆EVE and ∆NII in IRRBB will be discussed later.


Reference


BCBS (2016), “Standards – Interest rate risk in the banking book,” Bank for International Settlements. \(\blacksquare\)


To leave a comment for the author, please follow the link and comment on their blog: K & L Fintech Modeling.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)