Daily Liquidity

Data - ECB

Info

source dataset .html .RData

ecb

liq_daily

2024-09-18 2024-09-11

Info

Monetary financial institutions in the euro area are legally obliged to report data to their National Central Banks, which in turn report to the ECB.

Data on monetary policy

source dataset .html .RData

bdf

FM

2024-07-26 2024-06-18

bdf

MIR

2024-07-26 2024-07-01

bdf

MIR1

2024-07-26 2024-07-01

bis

CBPOL

2024-08-09 2024-09-15

ecb

BSI

2024-10-08 2024-09-16

ecb

BSI_PUB

2024-10-08 2024-10-08

ecb

FM

2024-10-08 2024-10-08

ecb

ILM

2024-10-08 2024-10-08

ecb

ILM_PUB

2024-10-08 2024-09-10

ecb

liq_daily

2024-09-18 2024-09-11

ecb

MIR

2024-06-19 2024-10-08

ecb

RAI

2024-09-19 2024-10-08

ecb

SUP

2024-09-19 2024-10-08

ecb

YC

2024-09-19 2024-09-16

ecb

YC_PUB

2024-09-19 2024-10-08

eurostat

ei_mfir_m

2024-09-30 2024-09-15

eurostat

irt_st_m

2024-09-30 2024-10-08

fred

r

2024-09-18 2024-09-18

oecd

MEI

2024-04-16 2024-06-30

oecd

MEI_FIN

2024-09-15 2024-05-21

LAST_COMPILE

LAST_COMPILE
2024-10-09

variable

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  group_by(variable, Variable) %>%
  summarise(Nobs = n()) %>%
  arrange(variable) %>%
  print_table_conditional
variable Variable Nobs
ABSPP ABSPP - ABS purchase programme 519
CBPP1 CBPP1 - Covered bond purchase programme 2632
CBPP2 CBPP2 - Covered bond purchase programme 2 1902
CBPP3 CBPP3 - Covered bond purchase programme 3 519
CSPP CSPP - Corporate sector purchase programme 434
DF Deposit facility 8784
MLF Marginal lending facility 8784
OMO Open market operations excl. MonPol portfolios 8784
PEPP PEPP - Pandemic emergency purchase programme 233
PSPP PSPP - Public sector purchase programm 498
SMP SMP - Securities Markets programme 560
current_accounts Current accounts 8818
excess_liquidity Excess liquidity 1303
net_autonomous_monpol Net liquidity effect from Autonomous Factors and MonPol portfolios 8818
reserve_requirements Reserve requirements 8818

duplicates

Same + different values

Code
liq_daily %>%
  group_by(variable, date) %>%
  filter(n()>1) %>%
  arrange(date, variable) %>%
  print_table_conditional

Different values

Code
liq_daily %>%
  unique %>%
  group_by(variable, date) %>%
  filter(n()>1) %>%
  arrange(date, variable) %>%
  print_table_conditional
date variable value
2008-01-01 OMO 535514
2008-01-01 OMO 535503
2008-01-01 net_autonomous_monpol 256501
2008-01-01 net_autonomous_monpol 256490
2008-01-02 OMO 468454
2008-01-02 OMO 468443
2008-01-02 net_autonomous_monpol 262467
2008-01-02 net_autonomous_monpol 262456
2008-01-03 OMO 437094
2008-01-03 OMO 437083
2008-01-03 net_autonomous_monpol 269250
2008-01-03 net_autonomous_monpol 269239
2008-01-15 current_accounts 168183
2008-01-15 current_accounts 168187
2008-01-15 net_autonomous_monpol 232059
2008-01-15 net_autonomous_monpol 232055

Data on liquidity

Last date

Code
liq_daily %>%
  filter(date == max(date)) %>%
  print_table_conditional
date variable value
2024-09-09 OMO 88060
2024-09-09 MLF 2
2024-09-09 DF 3061972
2024-09-09 net_autonomous_monpol -3134848
2024-09-09 current_accounts 160938
2024-09-09 reserve_requirements 162202
2024-09-09 excess_liquidity 3060707

Last date by variable

Code
liq_daily %>%
  group_by(variable) %>%
  filter(date == max(date)) %>%
  print_table_conditional
date variable value
2024-09-09 OMO 88060
2024-09-09 MLF 2
2024-09-09 DF 3061972
2024-09-09 net_autonomous_monpol -3134848
2024-09-09 current_accounts 160938
2024-09-09 reserve_requirements 162202
2024-09-06 CBPP1 0
2024-09-06 CBPP2 0
2024-09-06 SMP 1325
2024-09-06 CBPP3 261157
2024-09-06 ABSPP 8371
2024-09-06 PSPP 2211616
2024-09-06 CSPP 302649
2024-09-09 excess_liquidity 3060707
2024-09-06 PEPP 1642800

Asset purchase program

CBPP1, CBPP2, CBPP3, SMP, ABSPP, PSPP, CSPP, PEPP

All

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(variable %in% c("CBPP1", "CBPP2", "CBPP3", "SMP", "ABSPP", "PSPP", "CSPP", "PEPP")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.7),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

2020-

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2020-01-01")) %>%
  filter(variable %in% c("CBPP1", "CBPP2", "CBPP3", "SMP", "ABSPP", "PSPP", "CSPP", "PEPP")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2020-01-01"), Sys.Date(), by = "6 months"),
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.5, 0.5),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

2022-

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2022-01-01")) %>%
  filter(variable %in% c("CBPP1", "CBPP2", "CBPP3", "SMP", "ABSPP", "PSPP", "CSPP", "PEPP")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.45, 0.5),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

Excess Liquidity

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(Variable == "Excess liquidity") %>%
  ggplot + geom_line(aes(x = date, y = value/10^3)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

Excess Liquidity & Deposit Facility

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

Synthesis excess liquidity

All

Code
liq_daily %>%
  filter(variable %in% c("excess_liquidity", "reserve_requirements", "current_accounts", "DF", "MLF")) %>%
  group_by(date, variable) %>%
  filter(row_number(value) == 1) %>%
  spread(variable, value) %>%
  transmute(date, `Excess Liquidity (ECB)` = excess_liquidity,
            `Excess Liquidity (own)` = current_accounts-reserve_requirements+DF-MLF) %>%
  gather(Variable, value, -date) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable, linetype = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_color_manual(values = c("red", "black")) +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

2022

Code
liq_daily %>%
  filter(variable %in% c("excess_liquidity", "reserve_requirements", "current_accounts", "DF", "MLF")) %>%
  group_by(date, variable) %>%
  filter(row_number(value) == 1) %>%
  spread(variable, value) %>%
  transmute(date, `Excess Liquidity (ECB)` = excess_liquidity,
            `Excess Liquidity (own)` = current_accounts-reserve_requirements+DF-MLF) %>%
  gather(Variable, value, -date) %>%
  filter(date >= as.Date("2022-01-01")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.8, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

Excess Liquidity

Code
liq_daily %>%
  filter(variable %in% c("excess_liquidity", "reserve_requirements", "current_accounts", "DF", "MLF")) %>%
  group_by(date, variable) %>%
  filter(row_number(value) == 1) %>%
  spread(variable, value) %>%
  transmute(date, value = current_accounts-reserve_requirements+DF-MLF) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3)) +
  xlab("") + ylab("Excess liquidity") + theme_minimal() +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

Excess Liquidity & Deposit Facility & Current accounts

All

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

2020-

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2020-01-01")) %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2020-01-01"), Sys.Date(), by = "6 months"),
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

2022-

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2022-01-01")) %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts")) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.15, 0.5),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

Excess Liquidity & Deposit Facility & Current accounts

All

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) %>%
  mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = as.Date(paste0(seq(1940, 2030, 2), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.8),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

2020-

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2020-01-01")) %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) %>%
  mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2020-01-01"), Sys.Date(), by = "6 months"),
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.5, 0.5),
        legend.title = element_blank()) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

2022-

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2022-01-01")) %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) %>%
  mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "2 months"),
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.15, 0.5),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))

July 2022- Novembre 2022

Code
liq_daily %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2022-09-05"),
         date <= as.Date("2022-09-20")) %>%
  filter(Variable %in% c("Excess liquidity", "Deposit facility", "Current accounts", "Marginal lending facility", "Reserve requirements")) %>%
  mutate(Variable = factor(Variable, levels = c("Current accounts", "Reserve requirements", "Deposit facility", "Marginal lending facility", "Excess liquidity"))) %>%
  ggplot + geom_line(aes(x = date, y = value/10^3, color = Variable)) +
  xlab("") + ylab("") + theme_minimal() +
  scale_x_date(breaks = seq(from = as.Date("2022-01-01"), as.Date("2026-01-01"), by = "1 day"),
               labels = date_format("%d %b %Y")) +
  theme(legend.position = c(0.15, 0.5),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 1000*seq(-100, 90, .5),
                     labels = scales::dollar_format(acc = 1, su = " Bn€", pre = ""))