Daily Liquidity

Data - ECB

Info

source dataset .html .RData

ecb

liq_daily

2024-06-19 2024-05-21

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-06-30 2024-06-18

bdf

MIR

2024-06-30 2024-06-30

bdf

MIR1

2024-06-30 2024-06-30

bis

CBPOL

2024-06-19 2024-06-07

ecb

BSI

2024-06-30 2024-05-21

ecb

BSI_PUB

2024-06-30 2024-06-30

ecb

FM

2024-06-30 2024-06-30

ecb

ILM

2024-06-30 2024-06-30

ecb

ILM_PUB

2024-06-30 2024-01-25

ecb

liq_daily

2024-06-19 2024-05-21

ecb

MIR

2024-06-19 2024-06-30

ecb

RAI

2024-06-07 2024-06-30

ecb

SUP

2024-06-19 2024-06-30

ecb

YC

2024-06-20 2024-05-21

ecb

YC_PUB

2024-06-20 2024-06-30

eurostat

ei_mfir_m

2024-06-23 2024-06-08

eurostat

irt_st_m

2024-06-23 2024-06-30

fred

r

2024-06-30 2024-06-30

oecd

MEI

2024-04-16 2024-06-30

oecd

MEI_FIN

2024-06-20 2024-05-21

LAST_COMPILE

LAST_COMPILE
2024-07-01

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 483
CBPP1 CBPP1 - Covered bond purchase programme 2596
CBPP2 CBPP2 - Covered bond purchase programme 2 1866
CBPP3 CBPP3 - Covered bond purchase programme 3 483
CSPP CSPP - Corporate sector purchase programme 398
DF Deposit facility 8603
MLF Marginal lending facility 8603
OMO Open market operations excl. MonPol portfolios 8603
PEPP PEPP - Pandemic emergency purchase programme 197
PSPP PSPP - Public sector purchase programm 462
SMP SMP - Securities Markets programme 524
current_accounts Current accounts 8603
excess_liquidity Excess liquidity 1088
net_autonomous_monpol Net liquidity effect from Autonomous Factors and MonPol portfolios 8603
reserve_requirements Reserve requirements 8603

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
2023-12-29 OMO 410280
2023-12-29 MLF 10
2023-12-29 DF 3334822
2023-12-29 net_autonomous_monpol -3098551
2023-12-29 current_accounts 174019
2023-12-29 reserve_requirements 162283
2023-12-29 CBPP1 0
2023-12-29 CBPP2 0
2023-12-29 SMP 2397
2023-12-29 CBPP3 285620
2023-12-29 ABSPP 13350
2023-12-29 PSPP 2403035
2023-12-29 CSPP 323921
2023-12-29 excess_liquidity 3346548
2023-12-29 PEPP 1666024

Last date by variable

Code
liq_daily %>%
  group_by(variable) %>%
  filter(date == max(date)) %>%
  print_table_conditional
date variable value
2023-12-29 OMO 410280
2023-12-29 MLF 10
2023-12-29 DF 3334822
2023-12-29 net_autonomous_monpol -3098551
2023-12-29 current_accounts 174019
2023-12-29 reserve_requirements 162283
2023-12-29 CBPP1 0
2023-12-29 CBPP2 0
2023-12-29 SMP 2397
2023-12-29 CBPP3 285620
2023-12-29 ABSPP 13350
2023-12-29 PSPP 2403035
2023-12-29 CSPP 323921
2023-12-29 excess_liquidity 3346548
2023-12-29 PEPP 1666024

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 = ""))