[트레이딩] R로 업비트 데이터 분석하기

업비트는 대한민국에서 가장 큰 암호화폐 거래소 중 하나이며, REST API와 WebSocket API를 제공하여 실시간 데이터 및 과거 데이터를 조회할 수 있습니다. 이번 글에서는 R 언어를 활용하여 업비트 데이터를 가져오고 분석하는 방법을 소개하겠습니다.


1. 업비트 API 개요

업비트는 두 가지 주요 API를 제공합니다.

  • REST API: 과거 시세, 현재가, 주문 내역 등을 조회할 수 있음
  • WebSocket API: 실시간 시세 데이터를 스트리밍 방식으로 제공

R에서는 httr 패키지를 사용하여 REST API를 호출하고, websocket 패키지를 활용하면 WebSocket을 사용할 수 있습니다. 이번 글에서는 REST API를 중심으로 분석을 진행하겠습니다.


2. R 환경 설정

필요한 패키지를 설치하고 로드합니다.

install.packages("httr")
install.packages("jsonlite")
install.packages("tidyverse")

library(httr)
library(jsonlite)
library(tidyverse)

3. 업비트 REST API를 활용한 데이터 가져오기

3.1 현재가 조회

업비트에서 특정 코인의 현재가를 가져오는 방법은 다음과 같습니다.

url <- "https://api.upbit.com/v1/ticker"
query <- list(market = "KRW-BTC")
response <- GET(url, query = query)
data <- fromJSON(content(response, "text"))

if (is.na(data)) {
  stop("데이터를 가져오는 데 실패했습니다.")
}

glimpse(data)

이 코드를 실행하면 BTC/KRW(비트코인 원화)의 현재 가격과 거래량 정보를 확인할 수 있습니다.


3.2 과거 시세 조회 (캔들 데이터)

업비트는 다양한 주기의 캔들 데이터를 제공합니다. (1분, 3분, 5분, 10분, 1시간, 일봉 등)

아래 코드는 1시간(60분) 봉 데이터를 가져오는 예제입니다.

url <- "https://api.upbit.com/v1/candles/minutes/60"
query <- list(market = "KRW-BTC", count = 100)
response <- GET(url, query = query)
data <- fromJSON(content(response, "text"))

if (is.na(data)) {
  stop("캔들 데이터를 가져오는 데 실패했습니다.")
}

glimpse(data)

이렇게 하면 최근 100개의 1시간 봉 데이터를 불러올 수 있습니다.


4. 데이터 분석 및 시각화

4.1 캔들 데이터 정리

data_clean <- data %>%
  mutate(
    date = ifelse(is.na(trade_date_kst) | is.na(trade_time_kst), NA, paste(trade_date_kst, trade_time_kst)),
    date = as.POSIXct(date, format="%Y-%m-%d %H:%M:%S")
  ) %>%
  select(date, opening_price, high_price, low_price, trade_price, trade_volume) %>%
  rename(open = opening_price, high = high_price, low = low_price, close = trade_price, volume = trade_volume)

4.2 시각화 (캔들 차트)

ggplot(data_clean, aes(x = date, y = close)) +
  geom_line(color = "blue") +
  labs(title = "비트코인 1시간 봉 가격 변화", x = "날짜", y = "종가") +
  theme_minimal()

5. 거래량 분석

업비트에서 제공하는 데이터를 활용하면 거래량 패턴도 분석할 수 있습니다.

ggplot(data_clean, aes(x = date, y = volume)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "비트코인 거래량 변화", x = "날짜", y = "거래량") +
  theme_minimal()

이렇게 하면 특정 기간 동안의 거래량 변화를 시각적으로 확인할 수 있습니다.


6. 마무리

이번 글에서는 R을 활용하여 업비트 REST API를 통해 데이터를 가져오고 분석하는 방법을 살펴보았습니다.

  • httr을 활용하여 API 호출
  • 과거 시세 데이터를 가져와 tidyverse로 정리
  • ggplot2로 시각화

앞으로도 다양한 분석 기법과 함께 실전 적용 방법을 소개할 예정이니 기대해 주세요! 😊

댓글

이 블로그의 인기 게시물

공압 속도 제어: 미터인 vs 미터아웃

[PLC] PLC 아날로그 입출력 기본

전력(kW) 계산하기 (직류, 교류 단상, 교류 삼상)

Industrial Control with Relay: 파워릴레이와 범용릴레이

제너 다이오드에 저항을 연결하는 이유

NPN, PNP 트랜지스터 차이점

[PLC] 래더 다이어그램과 PLC

[아두이노] 가변저항(Potential Divider)과 전압분배(Voltage Divider)

[전기 기초] 저항의 정격전력(Watt) 표기의 의미

[수학] 선형관계란?