Internal Liquidity Management - ILM
Data - ECB
Last observation: 2026-W34 (N = 43) · 30 août 2026 (N = 4) · juil. 2026 (N = 49)
First observation: 31 déc. 1998 (N = 3) · 1998-W53 (N = 32) · mars 1999 (N = 26)
Last data update: 01 sept. 2026, 02:21
Last compile: 02 sept. 2026, 23:15
Structure
Info
- Liquidity. html
Main Refinancing operation
France, Germany, Italy
Code
ILM |>
filter(KEY %in% c("ILM.M.FR.N.A050100.U2.EUR",
"ILM.M.DE.N.A050100.U2.EUR",
"ILM.M.IT.N.A050100.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 2),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
labels = date_format("%Y"))
Eurosystem
Monthly
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.A050100.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 20),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Weekly
Code
ILM |>
filter(KEY %in% c("ILM.W.U2.C.A050100.U2.EUR")) |>
arrange(desc(TIME_PERIOD)) |>
week_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE)) +
ylab("Main refinancing operation - Eurosystem") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 20),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Total Assets
France, Germany, Italy
Code
ILM |>
filter(KEY %in% c("ILM.M.DE.N.T000000.Z5.Z01",
"ILM.M.FR.N.T000000.Z5.Z01",
"ILM.M.IT.N.T000000.Z5.Z01")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 200),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
labels = date_format("%Y"))
France, Germany, Italy
Code
ILM |>
filter(KEY %in% c("ILM.M.FR.N.L020000.U2.EUR",
"ILM.M.DE.N.L020000.U2.EUR",
"ILM.M.IT.N.L020000.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 200),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 1), "-01-01")),
labels = date_format("%Y"))
Liabilities to euro area credit institutions related to monetary policy operations denominated in euro
Base money
Linear
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.LT00001.Z5.EUR",
"ILM.M.U2.C.L020100.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.9),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 500),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Log
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.LT00001.Z5.EUR",
"ILM.M.U2.C.L020100.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("Required and Excess reserves") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.9),
legend.title = element_blank()) +
scale_y_log10(breaks = 10^(seq(0, 10, 1)),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Banknotes in circulation - Differences
Code
ILM |>
filter(KEY %in% c("ILM.M.4F.E.L010000.Z5.EUR",
"ILM.M.U2.C.L010000.Z5.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("Liquidity-providing factors") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 200),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Liquidity
https://data.ecb.europa.eu/publications/ecbeurosystem-policy-and-exchange-rates/3030613
Liquidity-providing factors
Individual
Bn€
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.AN00001.Z5.Z0Z",
"ILM.M.U2.C.A050100.U2.EUR",
"ILM.M.U2.C.A050200.U2.EUR",
"ILM.M.U2.C.A050500.U2.EUR",
"ILM.M.U2.C.A050A00.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("Liquidity-providing factors
") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 500),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Years of GDP
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.AN00001.Z5.Z0Z",
"ILM.M.U2.C.A050100.U2.EUR",
"ILM.M.U2.C.A050200.U2.EUR",
"ILM.M.U2.C.A050500.U2.EUR",
"ILM.M.U2.C.A050A00.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
left_join(B1GQ |> mutate(date = date + months(3)), by = "date") |>
mutate(B1GQ_i = spline(x = date, y = B1GQ, xout = date)$y) |>
mutate(OBS_VALUE = OBS_VALUE/B1GQ_i) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("Liquidity-providing factors (years of GDP)") + xlab("") + theme_minimal() +
theme(legend.position = c(0.4, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-5, 100, 5)) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Stacked
Bn€
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.AN00001.Z5.Z0Z",
"ILM.M.U2.C.A050100.U2.EUR",
"ILM.M.U2.C.A050200.U2.EUR",
"ILM.M.U2.C.A050500.U2.EUR",
"ILM.M.U2.C.A050A00.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
arrange(date) |>
mutate(TITLE = ifelse(BS_ITEM == "A050A00", "Other liquidity providing operations", TITLE),
TITLE = gsub(" - Eurosystem", "", TITLE)) |>
ggplot() + geom_area(aes(x = date, y = OBS_VALUE, fill = TITLE), alpha = 0.5) +
ylab("Liquidity-providing factors") + xlab("") + theme_minimal() +
theme(legend.position = c(0.3, 0.75),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 500),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Years of GDP
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.AN00001.Z5.Z0Z",
"ILM.M.U2.C.A050100.U2.EUR",
"ILM.M.U2.C.A050200.U2.EUR",
"ILM.M.U2.C.A050500.U2.EUR",
"ILM.M.U2.C.A050A00.U2.EUR")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
left_join(B1GQ |> mutate(date = date + months(3)), by = "date") |>
mutate(B1GQ_i = spline(x = date, y = B1GQ, xout = date)$y) |>
mutate(OBS_VALUE = OBS_VALUE/B1GQ_i) |>
ggplot() + geom_area(aes(x = date, y = OBS_VALUE, fill = TITLE), alpha = 0.5) +
ylab("Liquidity-providing factors (years of GDP)") + xlab("") + theme_minimal() +
theme(legend.position = c(0.4, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-5, 100, 5)) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Liquidity-absorbing factors
Individual
Bn€
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.L020200.U2.EUR",
"ILM.M.U2.C.L020300.U2.EUR",
"ILM.M.U2.C.L010000.Z5.EUR",
"ILM.M.U2.C.L050100.U2.EUR",
"ILM.M.U2.C.AN00002.Z5.Z0Z")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("Liquidity-absorbing factors") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 500),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Years of GDP
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.L020200.U2.EUR",
"ILM.M.U2.C.L020300.U2.EUR",
"ILM.M.U2.C.L010000.Z5.EUR",
"ILM.M.U2.C.L050100.U2.EUR",
"ILM.M.U2.C.AN00002.Z5.Z0Z")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
left_join(B1GQ |> mutate(date = date + months(3)), by = "date") |>
mutate(B1GQ_i = spline(x = date, y = B1GQ, xout = date)$y) |>
mutate(OBS_VALUE = OBS_VALUE/B1GQ_i) |>
ggplot() + geom_line(aes(x = date, y = OBS_VALUE, color = TITLE)) +
ylab("Liquidity-providing factors (years of GDP)") + xlab("") + theme_minimal() +
theme(legend.position = c(0.4, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-5, 100, 5)) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Stacked
Bn€
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.L020200.U2.EUR",
"ILM.M.U2.C.L020300.U2.EUR",
"ILM.M.U2.C.L010000.Z5.EUR",
"ILM.M.U2.C.L050100.U2.EUR",
"ILM.M.U2.C.AN00002.Z5.Z0Z")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
ggplot() + geom_col(aes(x = date, y = OBS_VALUE, fill = TITLE)) +
ylab("Liquidity-absorbing factors") + xlab("") + theme_minimal() +
theme(legend.position = c(0.45, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = seq(0, 10000, 500),
labels = dollar_format(acc = 1, pre = "", su = " Bn€")) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))
Years of GDP
Code
ILM |>
filter(KEY %in% c("ILM.M.U2.C.L020200.U2.EUR",
"ILM.M.U2.C.L020300.U2.EUR",
"ILM.M.U2.C.L010000.Z5.EUR",
"ILM.M.U2.C.L050100.U2.EUR",
"ILM.M.U2.C.AN00002.Z5.Z0Z")) |>
month_to_date() |>
mutate(OBS_VALUE = OBS_VALUE/1000) |>
left_join(B1GQ |> mutate(date = date + months(3)), by = "date") |>
mutate(B1GQ_i = spline(x = date, y = B1GQ, xout = date)$y) |>
mutate(OBS_VALUE = OBS_VALUE/B1GQ_i) |>
ggplot() + geom_col(aes(x = date, y = OBS_VALUE, fill = TITLE)) +
ylab("Liquidity-providing factors (years of GDP)") + xlab("") + theme_minimal() +
theme(legend.position = c(0.4, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-5, 100, 5)) +
scale_x_date(breaks = as.Date(paste0(seq(1940, 2100, 2), "-01-01")),
labels = date_format("%Y"))




