호돌찌의 AI 연구소
article thumbnail

 

2019년에 Crawling 공부하면서 정리를 했었던 내용의 일부입니다. 이때만 해도 정말 관심이 없었는데 지금은 차트를 상당히 좋아하는 제 자신이 대비됩니다. 살펴보겠습니다.


 

우선 업비트 개발자 센터로 접속한다.

메인페이지 → 고객센터 → Open API 이용안내 → 업비트 개발자 센터

또는 아래 GET STARTED 클릭!

 

 

시세 정보 아래 'REST API를 이용한 업비트 시세 수신' 을 활용할 예정이다.

 

 

cURL 언어로 소개가 되어있지만 R에서 GET 방식을 활용한 HTTP 요청으로 해결 가능.

 

시세 정보 조회 방법


  1. 코인 리스트 조회
  • 상장 코인 294개 정보를 조회할 수 있음
  • 예시 : 원화 마켓의 비트코인 시세를 알고싶다면 market 파라미터에 KRW-BTC 라고 명시할 수 있음
curl --request GET \ --url 'https://api.upbit.com/v1/ticker?markets=KRW-BTC'

 

2. 코인별 시세 조회

  • 특정 코인의 현재 시세를 조회 가능
curl --request GET \ --url 'https://api.upbit.com/v1/ticker?markets=KRW-BTC'

3. 코인별 캔들 조회

  • 분, 일, 주, 월 간격의 시세를 조회 가능
  • 예시 : KRW-BTC (원화, 비트코인 마켓)에서 가장 최근으로부터 5분봉을 3개 가져오고 싶다면 다음과 같이 요청가능
curl --request GET \ --url 'https://api.upbit.com/v1/candles/minutes/5?market=KRW-BTC&count=3'

 

 

- to 파라미터를 다음처럼 사용 가능

 

 

실습


패키지 부르기

> library(tidyverse) 
> library(httr) 
> library(rvest) 
> library(jsonlite)

 

가격 조회


업비트 개발자 센터의 웹 페이지 주소로 HTTP 요청을 실행하고 Upbit 마켓에 상장된 가상화폐의 코드 목록 조회

> res <- GET(url = 'https://api.upbit.com/v1/market/all') 
> print(res) 
Response [https://api.upbit.com/v1/market/all] 
Date: 2019-10-19 08:29 
Status: 200 
Content-Type: application/json;charset=UTF-8 
Size: 24.1 kB

 

Json type이므로, fromJSON() 활용하기

> coinList <- res %>% content(as = 'text') %>% fromJSON()
> coinList
       market            korean_name                         english_name
1     KRW-BTC               비트코인                              Bitcoin
2     KRW-ETH               이더리움                             Ethereum
3     BTC-ETH               이더리움                             Ethereum
4     BTC-LTC             라이트코인                             Litecoin
5   BTC-STRAT             스트라티스                              Stratis

 

비트코인으로 지정하여 관심있는 코인의 가격을 조회

> coinNm <- '비트코인'
# 관심 있는 코인의 코드 확인
> coinList[coinList$korean_name == coinNm, 'market']
[1] "KRW-BTC"  "USDT-BTC"

# 비트코인 현재 가격 조회 
> res <- GET(url = 'https://api.upbit.com/v1/ticker', 
+            query = list(markets = 'KRW-BTC') )
> res
Response [https://api.upbit.com/v1/ticker?markets=KRW-BTC]
  Date: 2019-10-19 08:32
  Status: 200
  Content-Type: application/json;charset=UTF-8
  Size: 806 B

 

데이터를 추출해보자

> coinPrice <- res %>% content(as = 'text') %>% fromJSON()
> coinPrice
   market trade_date trade_time trade_date_kst trade_time_kst trade_timestamp opening_price high_price
1 KRW-BTC   20191019     083148       20191019         173148    1.571474e+12       9428000    9470000
  low_price trade_price prev_closing_price change change_price change_rate signed_change_price
1   9384000     9451000            9434000   RISE        17000 0.001801993               17000
  signed_change_rate trade_volume acc_trade_price acc_trade_price_24h acc_trade_volume
1        0.001801993    0.0840891      5043019650         16618799892         535.4759
  acc_trade_volume_24h highest_52_week_price highest_52_week_date lowest_52_week_price
1             1765.195              16840000           2019-06-26              3562000
  lowest_52_week_date    timestamp
1          2018-12-15 1.571474e+12

이것저것 뽑아보자

> # 최근 거래일시 출력 
> as.POSIXct(x = coinPrice$trade_timestamp / 1e3, origin = '1970-01-01')
[1] "2019-10-19 17:31:48 KST"

> # 전일종가
> coinPrice$prev_closing_price
[1] 9434000
> 
> # 현재시세
> coinPrice$trade_price
[1] 9451000
> 
> # 변동금액
> coinPrice$signed_change_price
[1] 17000
> 
> # 변동율
> coinPrice$signed_change_rate
[1] 0.001801993

 

분, 일, 주, 월 간격 시세 조회

 

분 단위 URL 마지막에 1, 3, 5, 10, 15, 30, 60, 240을 추가하면 해당 간격으로 조회가능

분 단위 : 'https://api.upbit.com/v1/candles/minutes/1'

일 단위 : 'https://api.upbit.com/v1/candles/days'

주 단위 : 'https://api.upbit.com/v1/candles/weeks'

월 단위 : 'https://api.upbit.com/v1/candles/months'

 

분 단위로 조회

> res <- GET(url = 'https://api.upbit.com/v1/candles/minutes/1', 
+            query = list(market = 'KRW-BTC', 
+                         count = 200) )
> 
>
> res
Response [https://api.upbit.com/v1/candles/minutes/1?market=KRW-BTC&count=200]
  Date: 2019-10-19 09:51
  Status: 200
  Content-Type: application/json;charset=UTF-8
  Size: 69.6 kB


> res %>% content(as = 'text') %>% fromJSON() -> df 
> head(x = df, n = 10L)
    market candle_date_time_utc candle_date_time_kst opening_price high_price low_price trade_price    timestamp candle_acc_trade_price candle_acc_trade_volume unit
1  KRW-BTC  2019-10-19T09:51:00  2019-10-19T18:51:00       9428000    9432000   9425000     9428000 1.571479e+12             6800444.43              0.72144258    1
2  KRW-BTC  2019-10-19T09:50:00  2019-10-19T18:50:00       9428000    9430000   9428000     9428000 1.571479e+12             1283538.62              0.13614091    1
3  KRW-BTC  2019-10-19T09:49:00  2019-10-19T18:49:00       9430000    9430000   9430000     9430000 1.571479e+12             1198564.22              0.12710119    1
4  KRW-BTC  2019-10-19T09:48:00  2019-10-19T18:48:00       9440000    9440000   9440000     9440000 1.571479e+12            16001103.97              1.69503220    1
5  KRW-BTC  2019-10-19T09:47:00  2019-10-19T18:47:00       9441000    9441000   9440000     9440000 1.571478e+12              350518.39              0.03713006    1
6  KRW-BTC  2019-10-19T09:46:00  2019-10-19T18:46:00       9441000    9441000   9441000     9441000 1.571478e+12               23924.72              0.00253413    1
7  KRW-BTC  2019-10-19T09:45:00  2019-10-19T18:45:00       9435000    9441000   9433000     9441000 1.571478e+12            13366888.01              1.41660987    1
8  KRW-BTC  2019-10-19T09:44:00  2019-10-19T18:44:00       9434000    9436000   9434000     9436000 1.571478e+12             1851219.86              0.19619795    1
9  KRW-BTC  2019-10-19T09:43:00  2019-10-19T18:43:00       9435000    9436000   9434000     9435000 1.571478e+12             3631427.46              0.38491079    1
10 KRW-BTC  2019-10-19T09:42:00  2019-10-19T18:42:00       9430000    9441000   9430000     9433000 1.571478e+12            20227525.37              2.14437684    1

 

시:분 추출하기

> str_extract(string = df$candle_date_time_kst, 
+             pattern = '\\d{2}:\\d{2}') -> df$trade_time

ggplot을 이용하여 표현

> ggplot(data = df, 
+        mapping = aes(x = trade_time, 
+                      y = trade_price, 
+                      group = TRUE)) + 
+   geom_line() + 
+   theme_bw() + 
+   theme(axis.text.x = element_text(angle = 90))

 

비슷하게 다 적용해서 하면 가능. 월단위로 한번 뽑아보자

> res <- GET(url = 'https://api.upbit.com/v1/candles/months', 
+            query = list(market = 'KRW-BTC',
+                         count = 12))
> res
Response [https://api.upbit.com/v1/candles/months?market=KRW-BTC&count=12]
  Date: 2019-10-19 09:55
  Status: 200
  Content-Type: application/json;charset=UTF-8
  Size: 4.63 kB

> res %>% content(as = 'text') %>% fromJSON() -> df

> head(x = df, n = 10L)
    market candle_date_time_utc candle_date_time_kst opening_price high_price low_price trade_price    timestamp candle_acc_trade_price candle_acc_trade_volume first_day_of_period
1  KRW-BTC  2019-10-01T00:00:00  2019-10-01T09:00:00       9945000   10443000   9295000     9435000 1.571479e+12           6.707671e+11                68204.19          2019-10-01
2  KRW-BTC  2019-09-01T00:00:00  2019-09-01T09:00:00      11612000   13014000   9268000     9945000 1.569888e+12           1.748379e+12               152291.29          2019-09-01
3  KRW-BTC  2019-08-01T00:00:00  2019-08-01T09:00:00      11956000   14570000  11380000    11612000 1.567296e+12           3.661279e+12               283765.53          2019-08-01
4  KRW-BTC  2019-07-01T00:00:00  2019-07-01T09:00:00      13599000   15537000  10880000    11957000 1.564618e+12           6.321462e+12               487170.94          2019-07-01
5  KRW-BTC  2019-06-01T00:00:00  2019-06-01T09:00:00      10383000   16840000   9172000    13598000 1.561939e+12           4.981182e+12               395517.39          2019-06-01
6  KRW-BTC  2019-05-01T00:00:00  2019-05-01T09:00:00       6117000   10815000   6107000    10383000 1.559347e+12           3.225143e+12               364387.76          2019-05-01
7  KRW-BTC  2019-04-01T00:00:00  2019-04-01T09:00:00       4661000    6566000   4621000     6117000 1.556669e+12           1.666238e+12               286261.85          2019-04-01
8  KRW-BTC  2019-03-01T00:00:00  2019-03-01T09:00:00       4240000    4680000   4120000     4661000 1.554077e+12           9.711789e+11               220183.66          2019-03-01
9  KRW-BTC  2019-02-01T00:00:00  2019-02-01T09:00:00       3775000    4554000   3735000     4240000 1.551398e+12           6.131763e+11               149447.01          2019-02-01
10 KRW-BTC  2019-01-01T00:00:00  2019-01-01T09:00:00       4200000    4577000   3730000     3775000 1.548979e+12           6.255651e+11               152628.16          2019-01-01

월-일 추출하고 그래프로 표현

> str_extract(string = df$candle_date_time_kst, 
+             pattern = '(?<=-)\\d{2}-\\d{2}') -> df$trade_days

> ggplot(data = df, 
+        mapping = aes(x = trade_days, 
+                      y = trade_price, 
+                      group = TRUE)) + 
+   geom_line() + 
+   theme_bw() + 
+   theme(axis.text.x = element_text(angle = 90))

 

 

<Copyright 2019. hotorch. All rights reserved.>

profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!