Financial Markets, Interest Rates - FM

Data - Banque de France

🇫🇷 Version française

Info

Last observation: H: 2026-12-31 (N = 2) · D: 2026-08-14 (N = 13) · M: 2026-07-31 (N = 18)

First observation: M: 1980-01-31 (N = 4) · D: 1990-01-02 (N = 1) · H: 2015-06-30 (N = 2)

Last data update: 16 août 2026, 00:14. Last compile: 30 août 2026, 10:26

Structure

Interest Rates

ECB - Deposit facility, refinancing operations

All

Code
FM |>
  filter(grepl("FM.D.U2.EUR.4F.KR.MRR_FR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.MLFR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.DFR.LEV", variable)) |>

  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.1),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 1),
                labels = percent_format(accuracy = 1))

2022-

Code
FM |>
  filter(grepl("FM.D.U2.EUR.4F.KR.MRR_FR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.MLFR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.DFR.LEV", variable)) |>
  filter(date >= as.Date("2022-01-01")) |>

  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 1),
                labels = percent_format(accuracy = 1))

Treasury Bonds

10-year, 5-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

2018-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

March 2020-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= as.Date("2020-01-01"),
          FREQ == "D") |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

2021-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= as.Date("2021-01-01"),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

2 years

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= Sys.Date() - years(2),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .5),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

30-year, 10-year, 1-month

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC30", "FRMOYTEC10"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  #select_if(function(col) length(unique(col)) > 1) %>%
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

30-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC30"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  #select_if(function(col) length(unique(col)) > 1) %>%
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

30-year, 10-year, 5-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

March 2020-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= as.Date("2020-01-01"),
          FREQ == "D") |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2021-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= as.Date("2021-01-01"),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2 years

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= Sys.Date() - years(2),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .5),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

1-year, 5-year, 10-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2030, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

March 2020-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= as.Date("2020-03-01"),
          FREQ == "D") |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2021-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= as.Date("2021-01-01"),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2 years

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= Sys.Date() - years(2),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .5),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")