Post List

2019년 5월 24일 금요일

R Shiny를 이용한 포트폴리오 대시보드 만들기 (실시간 수익률 및 비중)



R에서 제공하는 '샤이니'를 이용할 경우, 간단한 코딩을 이용하여 나만의 웹페이지를 만들 수 있으며, 이를 응용하면 실시간 포트폴리오 대시보드를 만들수도 있습니다.




그 예제로써 '동적자산배분' 포트폴리오의 실시간 및 역사적 수익률과 비중을 샤이니로 만들어 배포하겠습니다. Github 주소는 다음과 같으며, 샤이니를 이용하여 웹페이지를 만드는 법은 모르셔도 됩니다. (저 또한 열심히 구글링 해가면 만들었기 때문에 어렵지 않게 만드실 수 있을 겁니다.)



해당 웹페이지를 로딩하는 방법은, 먼저 R에서 shiny 패키지를 설치한 후, 다음 명령어를 통해 간단히 실행이 가능합니다.

shiny::runGitHub('GDAA', 'hyunyulhenry')


깃허브에서 GDAA repository의 app.R 파일을 자동으로 읽어봐 웹페이지를 보여줍니다.




기본적으로 viewer 창에서 페이지가 로딩되며, 붉은색 탭을 클릭하여 인터넷 창에서 실행이 가능합니다.



크롬 창에서 페이지가 열린 모습입니다. 우측 하단을 보시면 진행률이 보이며, 이는 야후 API에서 ETF 가격을 가져오는 진행률 입니다. 해당 작업이 마무리 된 후, 자동으로 백테스트가 실시된 후 이에 해당하는 각종 그래프들이 출력됩니다.

첫번째 페이지는 Cumulative Return, Weight, Raw Data 페이지로 이루어져 있으며, 이 중 가장 중요한 페이지는 첫번째인 Cumulative Return 페이지 입니다.




메인 페이지는 총 4개 항목으로 구성되어 있습니다. 첫번째 그래프는 포트폴리오의 누적 수익률, 두번째 그래프는 연도별 수익률, 세번째 테이블은 일간 수익률, 네번째 테이블은 연도별 수익률 입니다.



해당 페이지 상단에는 시작시점과 종료시점을 선택할 수 있는 항목이 있습니다. 원하는 시점을 클릭하여 선택하거나, 혹은 직접 숫자로 입력할 경우 해당 시점에 해당하는 포트폴리오 수익률만을 보여주게 됩니다. 이를 통해 MTD, YTD 수익률을 손쉽게 확인할 수 있습니다. (하단의 일간수익률 테이블 역시 해당 시점 데이터로 바뀌게 됩니다.)



Weight 페이지는 총 3가지 데이터로 구성되어 있습니다. 첫번째 그래프는 현재 시점에서 추천 포트폴리오, 두번째 그래프와 세번째 테이블은 역사적 비중입니다.



해당 페이지 역시 시작과 종료시점을 선택할 수 있는 탭이 존재하며, 이를 통해 원하는 시점만의 그래프 및 테이블을 뽑아낼 수 있습니다.




Raw Data 탭에는 백테스트에 사용된 ETF의 일간 수정주가가 나타나며, 하단의 Download Data를 클릭할 경우, 해당 데이터를 csv 파일로 다운로드 받을 수 있습니다.


Description과 About Henry 페이지는 단순 텍스트이므로, 설명은 넘어가도록 하겠습니다.


또한 해당 코드를 https://www.shinyapps.io/ 에 업로드 할 경우, 굳이 R 프로그램을 켜지 않고도, 심지어 휴대폰을 통해서도 코드를 실행할 수 있습니다. 해당 페이지에 계정을 만든 후 R Studio 내에서 손쉽게 업로드가 가능합니다. (Github 코드를 ui.R과 server.R 코드로 쪼갠 후 업로드 하셔야 합니다.)

shiny에서 부여받은 url을 통해 공유하고 싶지만, 무료 계정의 경우 부여받은 트래픽 한도가 너무 작아, 아마 블로그에 글 쓰는 순간 하루도 안되서 한도가 다 찰듯 하여.... 돈 많이 벌어서 유료계정 산 후 공유할게요....






업로드가 완성되면, R을 켜지않고 생성된 url에 접속하는 것만으로도 해당 웹페이지를 동일하게 로딩할 수 있습니다. 페이지 내의 백테스팅 코드 역시 샤이니 서버 내에서 돌아가므로, R이 설치되지 않은 컴퓨터에서도 해당 페이지가 출력됩니다.





코드가 나의 디바이스가 아닌 서버에서 돌아가므로, 심지어 휴대폰이나 태블릿PC 에서도 동일한 웹페이지가 구현됩니다. 위는 태블릿PC로 shiny url에 접속한 화면이며, PC로 실행한 것과 동일한 결과를 보여줍니다.

본인의 포트폴리오 내역 혹은 각종 정보를 대쉬보드 형태로 만든 후 shiny에 업로드하면, 언제 어디서나 간편하게 이를 확인할 수 있습니다.

댓글 3개:

  1. 문의 한가지 드립니다. HANDA Partners에서공개한 Fama-French Factor (한국)은 정기적으로 Update되는지요? 3월 이후 자료가 Update가 없어서 문의드립니다. 감사합니다.

    답글삭제
  2. 안녕하세요. 현재 R 포트폴리오 책을 통해서 학습하고 있는 대학교 1학년 학생입니다.
    다름이 아니라, 궁금한점이 있어서 이렇게 댓글 남겨봅니다.
    혹시, 이를 제 주식 계좌와 연결할 수 있는 방법에는 어떤게 있는지 여쭈어봐도 괜찮을까요?
    감사합니다.

    답글삭제
    답글
    1. 연구중이긴 한데 아직 R에 주식계좌 연결은 안되고 파이썬에서만 가능합니다
      파이썬에서 연결한후 결과물 던지고, 그거 다시 실시간으로 샤이니로 가져오는 식은 가능합니다.

      삭제