본문 바로가기
  • plotly로 바로쓰는 동적시각화 in R & 파이썬
금융 데이터 분석

주가 데이터 가져오기 in R

by 아참형인간 2022. 7. 1.
tq_get.knit

tqk와 tidyquant 패키지를 사용한 주가 가져오기

데이터 분석이 많이 사용되는 분야 중에 하나가 금융 분야일 것이다. 금융 분야에서는 매우 중요한 것이 리스크 관리이다. 20세기 후반부터 급격히 많이진 다양한 금융 파생 상품의 관리가 복잡해지면서 이 파생 상품을 비롯한 금융권의 다양한 위험을 이를 보다 과학적으로 관리할 필요가 생겼고 이를 수학적, 통계학적, IT적으로 관리하는 방법론으로 유용하게 활용되는 것이 금융 공학이다. 이처럼 수학, 통계, IT 프로그래밍을 기반으로 금융 투자의 가치를 판단하는 사람들을 퀀트(Quantitative Analyst)라고 한다.

하지만 전문적인 퀀트가 아니라면 복잡한 파생상품들의 분석이 필요없을 것이다. 많은 사람들은 주식에 관심이 많고 주식 분석만 해도 큰 문제는 없을 것이다. 그렇다면 R로 우리나라의 주식 가격을 어떻게 가져올 수 있을까? 이에 대해 알아보겠다.

우리나라 주가 가져오기 : tqk 패키지(출처 : https://github.com/mrchypark/tqk)

tqk 패키지는 우리나라의 코스피, 코스닥에 상장된 주가를 가져오는 패키지이다. 이 패키지는 아직(22년 6월) CLAN에 등록되지 못했다. 따라서 Github에 등록된 패키지를 설치해야 한다. 이를 위해서 먼저 remote 패키지가 필요하다.

if (!require('tqk')) {
  remotes::install_github("mrchypark/tqk")
  library(tqk)
}

tqk 패키지에서는 두 개의 함수를 제공한다.

  • code_get() : 한국 주식의 코드를 가져옴
  • tqk_get() : 한국 주식 코드에 따른 주식 값을 가져옴

다음과 같이 삼성전자의 주식 코드와 주식값을 가져올 수 있다.

## 먼저 한국 주식의 코드값을 가져온다. 
code <- code_get()

head(code, 10)
## # A tibble: 10 x 3
##    market name             code  
##    <chr>  <chr>            <chr> 
##  1 코스닥 넥스트칩         396270
##  2 코스닥 삼성스팩6호      425290
##  3 코스닥 엔에이치스팩23호 422040
##  4 코스닥 교보12호스팩     421800
##  5 코스닥 레이저쎌         412350
##  6 코스닥 보로노이         310210
##  7 코스닥 위니아에이드     377460
##  8 코스닥 케이비제21호스팩 424140
##  9 코스닥 비플라이소프트   148780
## 10 코스닥 범한퓨얼셀       382900
## 삼성전자 코드값을 가져온다. 
sse_code <- code |> filter(name == '삼성전자') |>
  select(code) |> 
  pull()

sse_code
## [1] "005930"
samsung <- tqk_get(sse_code, from='2022-01-01', to='2022-06-30')

tail(samsung, 10)
## # A tibble: 10 x 7
##    date        open  high   low close   volume adjusted
##    <date>     <dbl> <dbl> <dbl> <dbl>    <int>    <dbl>
##  1 2022-06-17 59400 59900 59400 59800 29053450    59800
##  2 2022-06-20 59800 59900 58100 58700 34111306    58700
##  3 2022-06-21 58700 59200 58200 58500 25148109    58500
##  4 2022-06-22 59000 59100 57600 57600 23334687    57600
##  5 2022-06-23 57700 58000 56800 57400 28338608    57400
##  6 2022-06-24 57900 59100 57700 58400 23256103    58400
##  7 2022-06-27 59000 59900 58300 58800 18122236    58800
##  8 2022-06-28 59200 59500 58700 59400 13540538    59400
##  9 2022-06-29 58500 58800 58000 58000 14677138    58000
## 10 2022-06-30 57200 57600 57000 57000 18833333    57000

미국 주가 가져오기 : tidyquant 패키지

이번에는 미국 주식시장에 상장된 주식의 주가를 가져오는 방법을 알아보자. 미국 주가를 가져오는 패키지는 여러개가 있지만 이 중 tidyverse 생태계를 사용하는 tidyquant를 사용하도록 하겠다. tidyquant에서 주가를 가져오는 함수는 tq_get()이다.

tidyquant를 사용하여 미국에 상장된 ’KT’주가와 다우존스 지수를 가져오는 방법은 다음과 같다.

if (!require('tidyquant')) {
  install.packages("tidyquant")
  library(tidyquant)
}

KT_stock_prices <- tq_get("KT", from='2022-01-01', to='2022-06-30')

KT_stock_prices |> tail(10)
## # A tibble: 10 x 8
##    symbol date        open  high   low close  volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
##  1 KT     2022-06-15  13.9  14.0  13.8  13.9 1102300     13.9
##  2 KT     2022-06-16  13.7  13.7  13.5  13.6 1312000     13.6
##  3 KT     2022-06-17  13.9  14.0  13.7  13.8 1899600     13.8
##  4 KT     2022-06-21  14.0  14.2  13.9  14.1 1178700     14.1
##  5 KT     2022-06-22  13.9  14.0  13.8  14.0  564500     14.0
##  6 KT     2022-06-23  14.0  14.1  13.9  14.0  548200     14.0
##  7 KT     2022-06-24  14.2  14.4  14.2  14.4  666100     14.4
##  8 KT     2022-06-27  14.5  14.5  14.4  14.4  802800     14.4
##  9 KT     2022-06-28  14.4  14.4  14.2  14.2  822600     14.2
## 10 KT     2022-06-29  14.1  14.2  14.1  14.1  511400     14.1
tq_get("DOW", from = "2019-01-01") |> tail(10)
## # A tibble: 10 x 8
##    symbol date        open  high   low close   volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl>
##  1 DOW    2022-06-16  55.7  56.0  54.7  55.4  7641800     55.4
##  2 DOW    2022-06-17  55.2  56.0  54.0  54.8 12735300     54.8
##  3 DOW    2022-06-21  56.3  56.7  54.9  55.0  6391700     55.0
##  4 DOW    2022-06-22  52.3  52.8  51.6  52.3 10383100     52.3
##  5 DOW    2022-06-23  52.2  52.7  50.4  51.1  9662000     51.1
##  6 DOW    2022-06-24  51.5  53.8  51.2  53.1  9107700     53.1
##  7 DOW    2022-06-27  52.9  53.3  52.0  52.2  7507300     52.2
##  8 DOW    2022-06-28  52.8  54.2  52.3  52.5  5169400     52.5
##  9 DOW    2022-06-29  52.7  53.0  51.3  52.0  4385700     52.0
## 10 DOW    2022-06-30  51.2  51.7  50.9  51.6  1411603     51.6

tq_get()에서 첫 번쨰 매개변수로 사용되는 회사명을 확인하기 위해서는 tq_exchange()를 사용할 수 있다. 다만 미국의 주식 시장도 우리나라의 코스피, 코스닥으로 구분되듯이 뉴욕증권거래소(NYSE), 나스닥증권거래소(NASDAQ), 아멕스(AMEX)로 구분되어 있다.

tq_exchange_options()
## [1] "AMEX"   "NASDAQ" "NYSE"
tq_exchange("NYSE") |> head(10)
## # A tibble: 10 x 7
##    symbol company        last.sale.price  market.cap country ipo.year industry  
##    <chr>  <chr>                    <dbl>       <dbl> <chr>      <int> <chr>     
##  1 A      Agilent Techn~          117.   35093715959 "Unite~     1999 "Electric~
##  2 AA     Alcoa Corpora~           44.8   8257767672 ""          2016 "Metal Fa~
##  3 AAC    Ares Acquisit~            9.84  1230000000 ""          2021 "Business~
##  4 AAIC   Arlington Ass~            3.21    95216664 "Unite~       NA "Real Est~
##  5 AAIC^B Arlington Ass~           21             NA "Unite~       NA ""        
##  6 AAIC^C Arlington Ass~           22.5           NA "Unite~       NA ""        
##  7 AAIN   Arlington Ass~           23.8            0 "Unite~       NA ""        
##  8 AAM^A  Apollo Asset ~           24.3           NA "Unite~       NA ""        
##  9 AAM^B  Apollo Asset ~           25.1           NA "Unite~       NA ""        
## 10 AAN    Aarons Holdin~           14.6    446813069 ""          2020 "Diversif~

주가와 관련되어 tidyquant에서 제공하는 함수중에 유용한 것이 tq_index()이다. 이 함수에 매개변수로 미국에서 사용되는 주가지수를 넣어주면 해당 주가지수를 구성하는 주식의 종류가 리턴된다. 미국 주가의 전반적인 상승과 하락을 측정하기 위해 많이 사용되는 다우존스지수(DOW)는 미국 우량기업 30개의 지수이고 S&P 500 지수는 미국 신용평가사 S&P Global이 미국에 상장된 시가총액 상위 500개 기업의 주식들을 모아 지수로 구성하였다. tq_index()에서 검색 가능한 인덱스의 종류는 tq_index_options()로 검색된다.

tq_index_options()
## [1] "DOW"       "DOWGLOBAL" "SP400"     "SP500"     "SP600"
tq_index("DOWGLOBAL")
## # A tibble: 155 x 8
##    symbol  company    identifier sedol  weight sector shares_held local_currency
##    <chr>   <chr>      <chr>      <chr>   <dbl> <chr>        <dbl> <chr>         
##  1 COP     ConocoPhi~ 20825C10   2685~ 0.0124  Energy       13127 USD           
##  2 XOM     Exxon Mob~ 30231G10   2326~ 0.0124  Energy       13563 USD           
##  3 CVX     Chevron C~ 16676410   2838~ 0.0116  Energy        7639 USD           
##  4 SLB     Schlumber~ 80685710   2779~ 0.0102  Energy       27336 USD           
##  5 NTR-CA  Nutrien L~ BDRJLN     BDRJ~ 0.0100  Mater~       11765 CAD           
##  6 BA-GB   BAE Syste~ 026349     0263~ 0.00990 Indus~       95314 GBP           
##  7 HSBA-GB HSBC Hold~ 054052     0540~ 0.00988 Finan~      142581 GBP           
##  8 WMB     Williams ~ 96945710   2967~ 0.00986 Energy       30212 USD           
##  9 UNH     UnitedHea~ 91324P10   2917~ 0.00968 Healt~        1813 USD           
## 10 MRK     Merck & C~ 58933Y10   2778~ 0.00953 Healt~        9949 USD           
## # ... with 145 more rows
tq_index("DOW")
## # A tibble: 30 x 8
##    symbol company    identifier sedol  weight sector  shares_held local_currency
##    <chr>  <chr>      <chr>      <chr>   <dbl> <chr>         <dbl> <chr>         
##  1 UNH    UnitedHea~ 91324P10   29177~ 0.110  Health~     5712801 USD           
##  2 GS     Goldman S~ 38141G10   24079~ 0.0644 Financ~     5712801 USD           
##  3 HD     Home Depo~ 43707610   24342~ 0.0582 Consum~     5712801 USD           
##  4 MSFT   Microsoft~ 59491810   25881~ 0.0553 Inform~     5712801 USD           
##  5 MCD    McDonald'~ 58013510   25507~ 0.0526 Consum~     5712801 USD           
##  6 AMGN   Amgen Inc. 03116210   20236~ 0.0521 Health~     5712801 USD           
##  7 V      Visa Inc.~ 92826C83   B2PZN~ 0.0424 Inform~     5712801 USD           
##  8 CAT    Caterpill~ 14912310   21802~ 0.0390 Indust~     5712801 USD           
##  9 JNJ    Johnson &~ 47816010   24758~ 0.0376 Health~     5712801 USD           
## 10 HON    Honeywell~ 43851610   20204~ 0.0368 Indust~     5712801 USD           
## # ... with 20 more rows

댓글