R는 통계 분석 및 금융 모델링에 가장 강력한 언어 중 하나입니다. 그리고 시간 시리즈 데이터와 작업하는 성숙한 생태계를 가지고 있습니다. 이 가이드는 현대 httr2 그리고 jsonlite 결국에는 중앙은행 데이터를 가져와 깔끔한 탭을 만들고 출판 준비된 차트를 만들어내는 재사용 가능한 R 워크플로우가 50줄 이하의 코드로 만들어집니다.
당신 이 건축 할 것
FXMacroData REST API에 대한 인증, 여러 화폐에 대한 정책율 및 인플레이션 시간 시리즈를 검색, 단일 티블로 결합하고 ggplot2 로 플롯을 작성하여 쿼토 또는 R 마크다운 보고서에 삽입 할 준비가 된 완전히 재생 가능한 R 스크립트.
필수 조건
- R ≥ 4.2 및 RStudio (또는 모든 R 환경)
- 다음 패키지:
httr2jsonlitedplyrtidyrlubridateggplot2 - FXMacroData API 키 등록 / 가입 한 번 구해
필요한 패키지를 한 번 설치하세요.
install.packages(c("httr2", "jsonlite", "dplyr", "tidyr", "lubridate", "ggplot2"))
단계 1 API 형태를 이해
모든 FXMacroData 지표의 최종 지점은 동일한 URL 패턴을 따르고 있습니다.
GET https://fxmacrodata.com/api/v1/announcements/{currency}/{indicator}?api_key=YOUR_API_KEY
응답은 JSON 객체입니다. data 각 요소가 를 갖는 배열 date
그리고 val 필드 (그리고 선택적으로 announcement_datetime 예를 들어, 미국 연방준비제도 정책율을 가져오면:
curl "https://fxmacrodata.com/api/v1/announcements/usd/policy_rate?api_key=YOUR_API_KEY&start=2022-01-01"
{
"data": [
{ "date": "2025-03-19", "val": 4.25, "announcement_datetime": "2025-03-19T18:00:00Z" },
{ "date": "2025-01-29", "val": 4.25, "announcement_datetime": "2025-01-29T19:00:00Z" },
{ "date": "2024-12-18", "val": 4.25, "announcement_datetime": "2024-12-18T19:00:00Z" }
]
}
이 깨끗한 구조는 최소한의 변환으로 R 데이터 프레임에 완벽하게 매핑됩니다.
단계 2 API 키를 설정
스크립트에서 하드 코딩하기 보다는 환경 변수에서 API 키를 저장합니다.
~/.Renviron 파일:
FXMD_API_KEY=your_actual_api_key_here
다음으로 환경을 다시 로드하고 각 스크립트의 맨 위에 있는 키를 검색합니다.
readRenviron("~/.Renviron")
API_KEY <- Sys.getenv("FXMD_API_KEY")
if (nchar(API_KEY) == 0) stop("FXMD_API_KEY is not set in .Renviron")
보안 팁
버전 제어에 API 키를 절대 연결하지 마십시오. .Renviron 네 .gitignore 만약 당신이 프로젝트 디렉토리에 보관한다면. 재생 가능한 배포를 위해, 비밀 관리자 또는 CI 환경 변수를 사용하세요.
단계 3 일반적 인 가져오기 보조자 를 작성
랑 httr2 당신은 선언적으로 요청을 만들고, 오류를 명시적으로 처리하고, 하나의 파이프라인에서 JSON을 디코드합니다. 아래의 함수는 세 단계 모두 한 재사용 보조자로 포장합니다:
library(httr2)
library(jsonlite)
library(dplyr)
library(lubridate)
BASE_URL <- "https://fxmacrodata.com/api/v1"
#' Fetch an indicator time series from FXMacroData
#'
#' @param currency Three-letter currency code, e.g. "usd", "eur", "gbp"
#' @param indicator Indicator slug, e.g. "policy_rate", "inflation", "gdp"
#' @param start Optional start date as "YYYY-MM-DD" string
#' @param end Optional end date as "YYYY-MM-DD" string
#' @return A tibble with columns: date (Date), val (numeric), currency (chr), indicator (chr)
fetch_indicator <- function(currency, indicator, start = NULL, end = NULL) {
req <- request(BASE_URL) |>
req_url_path_append("announcements", currency, indicator) |>
req_url_query(api_key = API_KEY) |>
req_error(is_error = \(resp) resp_status(resp) >= 400)
if (!is.null(start)) req <- req |> req_url_query(start = start)
if (!is.null(end)) req <- req |> req_url_query(end = end)
resp <- req |> req_perform()
rows <- resp |> resp_body_json(simplifyVector = TRUE)
as_tibble(rows$data) |>
mutate(
date = as_date(date),
val = as.numeric(val),
currency = toupper(currency),
indicator = indicator
)
}
여기서 중요한 선택은: req_error() HTTP 4xx/5xx 응답이 조용히 잘못된 데이터를 반환하는 대신 R 조건을 던지는 것을 보장합니다. resp_body_json(simplifyVector = TRUE) nested array을 리스트 대신 데이터 프레임에 직접 강제합니다. 그리고 as_date() 윤활성화로부터 제대로 된
Date 즉시 기둥으로
단계 4 여러 화폐와 지표를 가져오기
Now use the helper to pull policy rates for four G4 currencies over a three-year window — exactly the kind of multi-currency comparison that drives divergence trading decisions:
currencies <- c("usd", "eur", "gbp", "jpy")
START <- "2022-01-01"
# Pull policy rates for all four currencies and stack into one tibble
policy_rates <- purrr::map_dfr(
currencies,
\(ccy) fetch_indicator(ccy, "policy_rate", start = START)
)
# Quick check
dplyr::glimpse(policy_rates)
#> Rows: ~80
#> Columns: date <date>, val <dbl>, currency <chr>, indicator <chr>
추가적인 지표를 쉽게 찾아볼 수 있습니다. 예를 들어, 정책금리 옆에 인플레이션을 끌어내면 실제 금리 스프레드를 계산할 수 있습니다
inflation <- purrr::map_dfr(
currencies,
\(ccy) fetch_indicator(ccy, "inflation", start = START)
)
# Combine into one tidy frame
macro_data <- bind_rows(policy_rates, inflation)
검색할 수 있는 지표
전체 카탈로그는 fxmacrodata.com/api-data-docs외환 분석의 핵심 시리즈는 정책금리 인플레이션 국내총생산 실업그리고 pmi모든 시리즈는 동일한 가져오는 패턴을 사용합니다 그냥 통화와 지표 슬러그를 변경합니다.
단계 5 데이터를 청소하고 재구성
대부분의 분석에서는 데이터를 입력해야 합니다. 넓다 형식 각 지표와 통화에 한 열 API에서 반환되는 겹쳐진 정돈된 형식보다는. pivot_wider() 이 호출은 한 단계로 처리됩니다. fill() 중앙은행의 희박한 발표를 정규 월간 격자로 전개합니다.
library(tidyr)
# Build a regular monthly date spine
date_spine <- tibble(date = seq.Date(as_date(START), Sys.Date(), by = "month"))
# Pivot to wide: one row per date, columns = currency_indicator
wide_data <- macro_data |>
# Use year-month as join key so quarterly data aligns to month boundaries
mutate(date = floor_date(date, "month")) |>
pivot_wider(
names_from = c(currency, indicator),
values_from = val,
values_fn = \(x) last(x) # take latest reading within each month
)
# Left-join onto the date spine and forward-fill sparse series
full_data <- date_spine |>
left_join(wide_data, by = "date") |>
fill(everything(), .direction = "down")
head(full_data)
단계 6 실제 금리 스프레드를 계산
실제 금리 스프레드는 정책금리 빼기 인플레이션입니다. 긍정적 인 스프레이드는 중앙 은행이 소비자 가격 성장에 비해 제한적 인 영역에 있음을 의미합니다. EURUSD 실제 금리의 차이는 EUR/USD 방향의 가장 강력한 중장기 예측자 중 하나입니다.
spread_data <- full_data |>
mutate(
real_rate_usd = USD_policy_rate - USD_inflation,
real_rate_eur = EUR_policy_rate - EUR_inflation,
real_rate_gbp = GBP_policy_rate - GBP_inflation,
real_rate_jpy = JPY_policy_rate - JPY_inflation,
# EUR minus USD spread: positive = EUR relatively less restrictive
eur_usd_spread = real_rate_eur - real_rate_usd
)
단계 7 ggplot2로 시각화
깔끔한 을 준비하면 ggplot2 다선 차트는 몇 줄이 필요합니다. colour 미적:
library(ggplot2)
policy_rates |>
ggplot(aes(x = date, y = val, colour = currency)) +
geom_step(linewidth = 0.9) +
scale_colour_manual(
values = c(USD = "#2563eb", EUR = "#16a34a", GBP = "#7c3aed", JPY = "#dc2626")
) +
scale_y_continuous(labels = scales::label_percent(scale = 1)) +
labs(
title = "G4 Central Bank Policy Rates",
x = NULL,
y = "Policy rate (%)",
colour = "Currency",
caption = "Source: FXMacroData"
) +
theme_minimal(base_size = 13) +
theme(legend.position = "bottom")
사용 geom_step() 보다 geom_line() 정책금리 시리즈의 경우 중앙은행 결정은 분리된 계단 변화이며 단계 차트에서 정확하게 나타납니다.
단계 8 보고서에 대한 수출
이 차트를 쿼토 또는 R 마크다운 문서에 삽입하는 경우, 재생성을 위해 CSV에 데이터 프레임을 저장하고 인라인 렌더링을 위해 높은 해상도의 PNG에 그래프를 저장합니다.
readr::write_csv(spread_data, "macro_spread_data.csv")
ggsave(
filename = "policy_rates.png",
width = 10,
height = 5.6,
dpi = 150
)
인터랙티브 리 대시보드에서는 같은 이 직접 에 공급됩니다. plotly::ggplotly() 제로 마찰 상호작용을 위해
단계 9 스케줄 스크립트로 자동화
수동으로 다시 실행하지 않고 분석을 계속하려면, 가져오는 논리를 독립적인 R 스크립트로 포장하고 cronR (리눅스/마코스) 또는 윈도우 작업 스케줄러:
# file: refresh_macro.R — run daily at 08:00 UTC
readRenviron("~/.Renviron")
source("fetch_helpers.R")
macro_data <- purrr::map_dfr(
tidyr::crossing(
currency = c("usd", "eur", "gbp", "jpy"),
indicator = c("policy_rate", "inflation", "unemployment")
),
\(row) fetch_indicator(row$currency, row$indicator, start = "2020-01-01")
)
readr::write_csv(macro_data, paste0("data/macro_", Sys.Date(), ".csv"))
message("Refresh complete: ", nrow(macro_data), " observations written.")
이 과 을 발매 달력 최종점 고효과 데이터가 예상되는 날만 업데이트를 활성화하도록 하고, 조용한 날에는 불필요한 API 호출을 절약합니다.
완전한 작업 예제
위의 모든 단편들은 ~60줄의 하나의 스크립트로 결합됩니다. FXMD_API_KEY 네 에 .Renviron, 파일을 실행하면 R에서 모델링할 수 있는 완전히 갱신 가능한 매크로 데이터 세트가 준비되어 있습니다.
요약
어떻게 해야 하는지 배우게 되었습니다.
- 환경 변수를 사용하여 FXMacroData로 안전하게 인증
- 재사용할 수 있는 것을 만들자
fetch_indicator()httr2 그리고 jsonlite - 와 함께 여러 통화 지표 시리즈를 끌어내어 쌓아
purrr::map_dfr() - 재구성, 앞을 채우고, 와 함께 파생 스프레드를 계산합니다. 그리고
- 출판 준비 단계 차트를 제작 ggplot2
- 스케줄된 R 스크립트로 매일 업데이트를 자동화
다음 단계로, 국내총생산 PMI그리고 무역 균형 모든 G10 통화에 대한 더 완전한 매크로 스코어카드를 구축하기 위해 최종 지점. 같은 가져오기 보조 및 ggplot2 작업 흐름은 변경되지 않습니다.