R을 이용한 퀀트 투자 포트폴리오 만들기(개정판)
2021-12-14
Welcome
본 페이지는 R을 이용한 퀀트 투자 포트폴리오 만들기의 웹사이트 입니다. 책의 수정 사항이 있을시 즉시 반영할 예정이며, 책에서 다루지 못했던 추가적인 내용도 지속적으로 업데이트 할 예정입니다.
제로베이스 본 책의 내용을 바탕으로 강의가 진행중이니, 수강을 원하시는 분은 참조하시기 바랍니다.
책 발간 이후 업데이트 내용은 다음과 같습니다.
2021년 12월 14일: 4장 크롤링 이해하기의 크롤링 예제 중 기업공시채널에서 오늘의 공시 불러오기에서 POST 부분의 url이 기존 https://dev-kind.krx.co.kr/disclosure/todaydisclosure.do 에서 https://kind.krx.co.kr/disclosure/todaydisclosure.do 로 변경되었습니다.
2021년 11월 5일: R을 사용하지 모르는 분들을 위해 R 기초 배우기 항목을 추가했습니다.
2021년 11월 1일: 개정판 2쇄에 아래 내용이 모두 적용되었습니다.
2021년 5월 22일: 크롤링 관련 패키지가 업데이트 되면서, 테이블이 데이터프레임 형태가 아닌 티블 형태로 다운로드 됩니다. 이에 따라 6장 재무제표 및 가치지표 크롤링 부분을 수정하였습니다.
2021년 1월 28일: 개정판이 발간되어 아래 내용이 모두 적용되었습니다.
2021년 1월 24일: 네이버증권의 차트가 플래쉬를 사용하지 않음에 따라, 해당 부분을 새롭게 작성했습니다.
2021년 1월 17일: 한국거래소가 사이트를 개편함에 따라 5장 한국거래소의 산업별 현황 및 개별지표 크롤링 부분을 새롭게 작성했습니다.
2020년 1월 17일: 9장 퀀트 전략을 이용한 종목선정 (기본)과 10장 퀀트 전략을 이용한 종목선정 (심화)에서 재무제표를 이용한 전략의 경우, 1~4월에는 최근년도 데이터가 일부 종목에 대해서만 들어옵니다. 따라서 해당 기간에는 전전년도 데이터를 사용해야 하며, 이를 고려하도록 코드를 변경하였습니다.
2020년 9월 26일: 4장 기업공시채널에서 오늘의 공시 불러오기에서 POST 부분의 url이 기존 http://kind.krx.co.kr/disclosure/todaydisclosure.do 에서 https://dev-kind.krx.co.kr/disclosure/todaydisclosure.do 로 변경되었습니다.
2020년 4월 27일: 9장 금융 데이터 수집하기 (심화)에 DART의 Open API를 이용한 데이터 수집하기 챕터를 추가하였습니다. 이를 통해 더욱 다양한 데이터를 수집할 수 있습니다.
2020년 4월 7일: 각 페이지 하단에 질문/답변 기능을 추가하였습니다. 이제 블로그나 이메일, SNS 보다는 웹북에 질문을 남겨주시기 바랍니다.
2020년 3월 22일: 11장 포트폴리오 구성에 실무에서 많이 사용되는 인덱스 포트폴리오 및 인핸스드 인덱스 포트폴리오 구성 방법을 추가하였습니다.
2020년 3월 22일: 8장 데이터 분석 및 시각화하기에서 종목정보 시각화 이전에
ggplot() 기초
챕터를 추가하였습니다. 이로써 기존에 해당 패키지를 모르던 분도 쉽게 배울수 있도록 하였습니다.2020년 3월 15일: 6장 금융 데이터 수집하기 (심화)에 재무제표 및 가치지표 크롤링에서 사용하는 페이지가 크롤러의 접근을 막음에 따라,
user_agent()
를 이용하여 웹브라우저 인자를 추가해 주었습니다.2020년 1월 19일: 5장의 거래소 데이터 정리하기 부분에서
substr()
함수 대신 stringr 패키지의str_sub()
함수를 사용하여 코드를 훨씬 간결하게 표현했습니다. 또한 종목코드 끝이 0이 아닐 경우 우선주인 점을 이용하여 더욱 쉽게 클렌징 처리를 하였습니다.2020년 1월 18일: 야후 파이낸스 웹페이지의 구조가 바뀌어 동적 크롤링을 통해서만 데이터 수집이 가능하게 되었습니다. 이는 본 책에서는 다루지 않으므로, 6장 금융 데이터 수집하기 (심화)에서 해당 부분을 삭제하였습니다.
지은이 소개
이현열
한양대학교에서 경영학을 전공하고, 카이스트 대학원에서 금융공학 석사 학위를 받았다. 졸업 후 증권사에서 주식운용, 자산운용사에서 퀀트 포트폴리오 매니저, 보험사에서 데이터 분석 업무를 거쳐, 현재 핀테크 스타트업에서 퀀트 및 자산배분 리서치 업무를 하고 있다. 평소 꾸준한 SNS와 블로그 활동으로 퀀트 아이디어 및 백테스트 결과 등을 공유하면서 퀀트 투자의 대중화를 위해 노력하고 있다. 한양대학교 재무금융 박사 과정을 수료했으며, 패스트캠퍼스에서 R과 퀀트 투자 강의를 맡고 있다. 지은 책으로는 《스마트베타》(2017)가 있다.
머리말
퀀트 투자 중 팩터에 관한 이론적 내용을 다룬 《SMART BETA(스마트 베타): 감정을 이기는 퀀트 투자》(김병규, 이현열, 워터베어프레스, 2017) 출간 이후 강의와 세미나를 통해많은 분들을 만났고, 공통적인 어려움을 느낄 수 있었습니다. 기관 투자자들이 손쉽게 데이터를 구할 수 있는 것과는 다르게, 일반 투자자들은 퀀트 투자를 하기 위한 데이터를 구하는 시작점부터 어려움을 겪는다는 것이었습니다.
그러나 프로그래밍을 이용하면 일반 투자자들도 얼마든지 금융 데이터 수집 및 처리, 퀀트 모델 개발, 포트폴리오 분석 및 자동화 등이 가능합니다. 이 책을 읽는 독자분들이 스스로 이러한 퀀트 투자 프로세스를 만들 수 있기를 바라는 마음으로 책을 구성했습니다. 또한 실제 전문 투자자들이 사용하는 기술들도 포함했으니 책의 내용을 넘어 더욱 훌륭한 모델을 만드는 데 도움이 되시리라 생각합니다.
이 책에서 데이터 수집을 위해 주로 다루는 크롤링은 웹페이지의 데이터를 가져오는 것입니다. 기존에 책 발간 이후 참고자료로 사용된 페이지 중 형태가 바뀐곳이 많아 개정판을 작성하게 되었습니다. 수정된 내역은 다음과 같습니다.
- 야후 파이낸스의 웹페이지 구조가 바뀌어 크롤링이 사실상 어렵게 되었고, 책 내용에서 제외하였습니다.
- 한국거래소 사이트가 개편되어 해당 부분은 바뀐 페이지에 맞게 새로 작성하였습니다.
- 네이버 증권의 주가 데이터 출처가 변경되어 새로 작성하였습니다.
- 일부 페이지가 크롤러의 접근을 막음에 따라 user_agent() 함수를 사용해 크롤링이 가능해지게 하였습니다.
- 많은 문의가 있었던 DART 크롤링에 대한 내용을 추가했습니다.
- 포트폴리오 구성 부분에 실무에서 많이 사용되는 인덱스 포트폴리오 및 인핸스드 인덱스 포트폴리오 구성 방법을 추가하였습니다.
- ggplot2 패키지의 기본적인 사용법을 추가하였습니다.
- 일부 코드를 수정하여 데이터 처리를 좀 더 쉽게, 종목 선택을 더욱 꼼꼼히 할수 있도록 하였습니다
앞으로도 페이지 변경 등 코드를 수정해야 하거나 추가된 내용이 있을 경우 책의 공식 페이지인 https://hyunyulhenry.github.io/quant_cookbook/ 에 즉각적으로 업데이트 할 예정이며, 질문사항이 있을 경우 페이지에 남겨주시면 답변드리고 있습니다.
어느때보다 주식과 투자에 대한 관심이 뜨거워진 지금, 유행이라는 파도에 휩쓸리는 투자보다는 데이터를 이용한 객관적이고 장기적인 투자로 성공하시길 기원합니다.
2021년 1월
이현열(leebisu@gmail.com)
이 책의 구성
이 책은 API와 크롤링을 통한 금융 데이터 수집, 투자 종목 선택 및 포트폴리오 구성, 백테스트와 성과 분석으로 이루어져 있습니다.
CHAPTER 1 퀀트 투자의 심장: 데이터와 프로그래밍 퀀트 투자란 무엇인지, 왜 프로그래밍이 필요한지, 여러 언어 중 R을 사용해야 하는 이유에 대해 살펴봅니다.
CHAPTER 2 크롤링을 위한 기본 지식 크롤링을 통한 데이터 수집에 앞서 인코딩, 웹의 동작 방식, HTML에 대한 기본 정보와 데이터 처리에 편리한 R 코드를 살펴봅니다.
CHAPTER 3 API를 이용한 데이터 수집
API를 통한 데이터 수집과 getSymbols()
함수의 사용 방법에 대해 살펴봅니다.
CHAPTER 4 크롤링 이해하기 크롤링이 무엇인가에 대해 살펴보며, GET과 POST 방식을 이용한 간단한 예제를 살펴봅니다.
CHAPTER 5 금융 데이터 수집하기 기본 한국거래소에서 제공하는 데이터를 크롤링하는 방법, 섹터의 구성종목을 수집하는 방법에 대해 살펴봅니다.
CHAPTER 6 금융 데이터 수집하기 심화 퀀트 투자의 핵심 자료인 수정주가, 재무제표 및 가치지표를 크롤링하는 방법을 살펴봅니다.
CHAPTER 7 데이터 정리하기 앞에서 수집한 주가, 재무제표, 가치지표를 하나의 파일로 정리하는 방법을 살펴봅니다.
CHAPTER 8 데이터 분석 및 시각화하기 수집한 데이터를 바탕으로 dplyr 패키지를 이용한 데이터 분석 및 ggplot2 패키지를 이용한 데이터 시각화, 인터랙티브 그래프를 나타내는 방법을 살펴봅니다.
CHAPTER 9 퀀트 전략을 이용한 종목 선정 기본 베타에 대한 이해 및 기본적 팩터인 저변동성, 모멘텀, 밸류, 퀄리티를 이용한 종목 선정에 대해 살펴봅니다.
CHAPTER 10 퀀트 전략을 이용한 종목 선정 심화 단순 종목 선정을 넘어 실무에서 사용되는 섹터 중립 포트폴리오 및 이상치 제거와 팩터 결합 방법, 마법공식 및 멀티팩터에 대해 살펴봅니다.
CHAPTER 11 포트폴리오 구성 최적화 패키지를 이용한 포트폴리오 구성에서 가장 대중적으로 사용되는 최소분산 포트폴리오, 최대분산효과 포트폴리오, 위험균형 포트폴리오를 구현합니다. 또한 실무에서 많이 사용되는 인덱스 포트폴리오 및 인핸스드 인덱스 포트폴리오 구성 방법을 살펴봅니다.
CHAPTER 12 포트폴리오 백테스트
Return.portfolio()
함수를 이용한 백테스트 방법에 대해 살펴보겠습니다.
CHAPTER 13 성과 및 위험 평가 포트폴리오의 수익률을 바탕으로 성과 및 위험 평가에 사용되는 각종 지표에 대해 알아보며, 4팩터 회귀분석을 통한 요인 분석을 실행합니다.
이 책에서 다루지 않은 주제
이 책은 R을 기본적으로 사용할 줄 아는 독자를 대상으로 작성되었습니다. 따라서 내용의 효율적 전달을 위해 R과 R Studio 설치, 기초적인 프로그래밍 등의 내용은 생략했습니다. 따라서 프로그래밍을 처음 접하는 독자라면 프로그래밍 기초를 먼저 익히신후 본 책을 읽으시길 추천드립니다.
또한 이 책에서는 프로그램 언어로 R을 이용했기 때문에 Python 혹은 다른 언어를 사용하는 분들에게는 직접적으로 도움이 되지 않을 수 있다고 생각할 수 있습니다. 그러나 투자에 필요한 금융 데이터 수집을 어디서 어떻게 하는지, 종목 선택을 어떻게 하고 포트폴리오를 어떻게 구성하는지에 대한 이론적 내용을 이해한 후 본인들이 사용하는 언어로 구현해보는 것도 좋은 도전이 될 것입니다.
도움이 될 만한 자료들
먼저 팩터 투자와 관련하여 심화된 내용을 알고 싶은 분은 저의 이전 책 및 책에서 인용된 논문을 읽어볼 것을 권합니다. R 프로그래밍과 관련하여 기초부터 tidyverse 패키지까지 이해하는 데 도움이 될만한 책 목록은 다음과 같습니다.
- 《SMART BETA(스마트 베타): 감정을 이기는 퀀트 투자》(김병규, 이현열, 워터베어프레스, 2017)
- 《손에 잡히는 R 프로그래밍》(가렛 그롤먼드, 한빛미디어, 2015)
- 《R Cookbook》(폴 티터, 인사이트, 2012)
- 《R을 활용한 데이터 과학》(해들리 위컴, 개럿 그롤문드, 인사이트, 2019)
- 《Do it! 쉽게 배우는 R 데이터 분석》(김영우, 이지스퍼블리싱, 2017)
- 《ggplot2: R로 분석한 데이터를 멋진 그래픽으로》(해들리 위컴, 프리렉, 2017)
이 책의 지원 페이지
이 책은 R의 bookdown 패키지로 작성되어 웹페이지 및 GitHub 저장소에 공유되어 있습니다. 따라서 책에 포함되어 있는 각종 코드를 웹페이지에 방문하여 얻으실 수 있습니다.
- 웹페이지: https://hyunyulhenry.github.io/quant_cookbook
- GitHub 저장소: https://github.com/hyunyulhenry/quant_cookbook
크롤링 대상 웹페이지의 구조가 바뀌어 코드의 수정이 필요할 경우 즉각적으로 반영할 것이며, 인쇄본에서 다루지 않은 내용도 추가적으로 업데이트될 예정입니다. 또한 bookdown 패키지를 이용하여 책을 집필하고자 하는 분들에게도 많은 도움이 될 것입 니다.
이 외에도 퀀트 투자 혹은 R을 이용한 투자 활용법 등의 내용은 저자의 블로그에 많은글들이 있으니 참조하기 바랍니다.
- Henry’s Quantopia: https://blog.naver.com/leebisu
종목과 관련된 유의사항
팩터 모델을 이용한 종목 선택과 관련된 CHAPTER에서는 해당 조건으로 선택된 종목들이 나열되어 있습니다. 그러나 이는 해당 종목에 대한 매수 추천이 아님을 밝히며, 데이터를 받은 시점의 종목이기에 독자 여러분이 책을 읽는 시점에서 선택된 종목과는 상당한 차이가 있습니다.
또한 이 책에서 다루는 모델을 이용하여 투자를 할 경우, 이로 인한 이익과 손해는 본인에게 귀속됨을 알립니다.
세션정보
본 책에서 사용된 R 버젼 및 각종 정보는 다음과 같습니다.
## R version 4.1.0 (2021-05-18)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 10 x64 (build 19042)
##
## Matrix products: default
##
## locale:
## [1] LC_COLLATE=Korean_Korea.949 LC_CTYPE=Korean_Korea.949
## [3] LC_MONETARY=Korean_Korea.949 LC_NUMERIC=C
## [5] LC_TIME=Korean_Korea.949
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] showtext_0.9-4 showtextdb_3.0 sysfonts_0.8.5
##
## loaded via a namespace (and not attached):
## [1] bookdown_0.23 digest_0.6.27 R6_2.5.1 jsonlite_1.7.2
## [5] magrittr_2.0.1 evaluate_0.14 highr_0.9 stringi_1.7.4
## [9] rlang_0.4.11 rstudioapi_0.13 jquerylib_0.1.4 bslib_0.3.1
## [13] rmarkdown_2.10 tools_4.1.0 stringr_1.4.0 xfun_0.23
## [17] yaml_2.2.1 fastmap_1.1.0 compiler_4.1.0 htmltools_0.5.2
## [21] knitr_1.33 sass_0.4.0