R과 QUANT투자 - quantmod로 금융데이터 수집하기

2019. 5. 9. 07:02

빅데이터와 AI기술이 발달하면서 '알고리즘 트레이딩'이라는 말을 심심치 않게 들을 수 있다. 금융 데이터를 분석하는 일들은 그 전에도 있었지만, 과거에 사용하지 못했던 많은 데이터를 알고리즘에 학습시켜 수익을 낸다는 것은 멋진 일이다. 물론 말처럼 쉬운 일은 아니지만 말이다. 꼭 알고리즘 트레이딩의 목적이 아니더라도 보고 싶은 금융데이터를 분석하고 인싸이트를 얻는 것 만으로도 충분히 가치가 있는 일이다. 최근에 금융데이터를 쉽게 수집할 수 있는 R패키지를 알게 되었다.

오늘은 R의 quantmod패키지로 금융데이터를 수집하는 방법에 대해서 알아보도록 하겠다.




quantmod는 quantative financial modeling 프레임워크이다. 금융 거래 전략을 분석하고 만들 수 있는 기능을 제공하는 패키지라고 보면 되겠다. API로 데이터를 한땀한땀 수집하는 것보다 강력하고 쉽다.


우선 패키지를 설치해보도록 하자.






quantmod에서 가져올 수 있는 데이터는 크게 4가지 종류이다. 하나는 주식 데이터, 두 번째는 환율 데이터, 세 번째는 원자재 가격이다. 마지막으로 그 외에도 FRED에서 공개한 데이터는 다 가져올 수 있다. FRED는 세인트루이스의 연방준비은행이라고 한다. 차례대로 한 가지씩 알아보도로 하자.


1) 주식데이터 가져오기

quantmod 패키지에서 데이터를 가져오기 위해서는 getSymbols함수를 이용한다. 주식데이터는 야후 파이낸스에서 가져올 수 있다. Symbols에 종목명, src에는 가져올 출처, from은 시작기간, to는 종료기간, auto.assign은 FALSE로 입력하면 된다.



데이터를 가져오면 칼럼명에 종목코드 붙어 있어서 사용하기 어렵다. 칼럼명을 바꿔주고, 수정주가로 그래프를 그려보았다. 그래프는 plot함수를 이용해서, plot(ss_df$Adjusted)라고 입력하면 된다. 아직 업데이트가 안 되서 그런지 19년2월부터 4월까지 자료는 나오지 않았다.

( 삼성전자 수정 주가 그래프 )



종목명은 야후 파이낸스(https://finance.yahoo.com/)에서 검색하면 알 수 있다. 한글로 검색하면 안 된고, 영문명으로 검색해야 종목코드를 보여준다.

( 종목코드 확인)


추천포스트


2) 환율 데이터 가져오기

quantmod를 이용해서 환율데이터도 가져올 수 있다. 환율 데이터는 http://ww.oanda.com에서 가져온다. Symbols에 원하는 통화 코드를 넣으면 된다. 해당하는 통화의 코드를 잘 모르겠다면, OANDA싸이트에서 아래와 같이 통화목록을 살펴보면 알 수 있다.




통화코드를 잘 모르겠다면, OANDA싸이트에서 확인이 가능하다.

( 통화코드 확인하기)



3) 원자재 가격

원자재 가격은 https://fred.stlouisfed.org/를 통해서 가져올 수 있다. 확인하고 싶은 정보를 검색하면 아래와 같이 해당 상품 정보가 나온다. 원유 가격이 궁금해서 oil을 검색하고, Crude Oil Prices: West Texas Intermediate(WTI)의 코드를 확인할 수 있었다. plot함수를 이용해서 동일하게 그래프도 그려 볼 수 있다.



( FRED 코드 확인 )


4) 기타

여기까지 봤다면 어떤 소스의 데이터를 가져오는지 대충 감이 올 것이다. 필자도 아직 가능한 소스를 전부 알지는 못한다. 다만, FRED에는 원자재 가격외에도 M2 통화량 등의 경제지표도 제공하고 있다. 필요한 경제지표가 있다면 FRED 싸이트에서 Korea를 검색해보자.




오늘은 이렇게 R의 quant mod패키지로 금융데이터를 수집하는 방법에 대해서 알아보았다. 한 줄의 코드로 금융데이터를 수집할 수 있어 굉장히 편리하다. tidyquant를 이용하면 금융데이터 외에 재무제표 정보도 가져올 수 있다고 들었다. 다음에는 tidyquant 패키지에 대해서 한 번 알아보도록 하겠다.



오픈API를 사용하면 다양한 재미있는 일들을 해 볼 수 있다. 파이썬을 활용한 오픈API 사용이 궁금하다면 아래 글을 참조해보자.

(참조: 오픈API를 활용한 사례는 어떤 것들이 있을까?)

댓글()