Post List

2018년 2월 9일 금요일

F-Score + Value Investing (HenryQuant Package in R)



F-Score 는 워낙 유명하여,
너무나 많이 사용되는 퀄리티 전략 중 하나입니다.





이번에는 제가 만든 R 패키지인 "HenryQuant" 를 이용하여
미국 전종목에 대한 F-Score를 구하고
거기에 Value 투자를 결합하는 방법을 알아보도록 하겠습니다.


패키지는 github에 공유되어 있는 관계로
devtools를 이용해 다운로드 받을 수 있습니다.
devtools::install_github("hyunyulhenry/HenryQuant")
library(HenryQuant)




그림과 같이 패키지가 정상적으로 설치가 됩니다.
업데이트가 자주 되는 관계로 매번 해당 명령어를 입력하면,
최신버젼의 패키지를 다운로드 합니다.



먼저 알아야 할 함수는 get_US_ticker() 패키지 입니다.

해당 패키지는 미국 NYSE, NASDAQ, AMEX에 상장된
모든 종목들의 티커를 다운로드 합니다.







명령어를 실행하면 자동으로 티커가 다운로드 됩니다.
또한, 실행폴더 내에 ticker_list_US.csv 라는 파일로 저장됩니다.

해당 명령어는 타 함수내에서 자동으로 실행되므로
굳이 실행할 필요는 없습니다.



본격적으로 가장 먼저 실행할 함수는
get_US_fs() 함수입니다.




함수를 실행하면 자동으로 티커를 다운로드 받은 후,
해당 티커를 이용하여 quantmod의 
getQuote와 getFinancials 함수를 통해

valuation 정보와 financial statement 정보를 모두 다운받습니다.

valuation 정보는 PBR, PER, DY를 다운로드하며,
재무제표 정보는 BS, IS, CF 를 모두 다운받습니다.





또한 US_value와 US_fs 라는 폴더를 자동생성하여
종목 별로 [ticker]_value.csv [ticker]_fs.csv 형태로 저장합니다.




AAPL_value.csv 를 열어보면 PER, PBR, DY가 다운되어 있습니다.






AAPL_fs.csv 를 열어보면 BS, IS, CF 의 최근 4개년 데이터가
항목별로 저장되어 있습니다.





또한 value_list.csv 에는
모든 종목들의 valuation 정보가 
티커 순서대로 자동 저장됩니다.


해당 패키지는 다운로드가 중단되어도
처음부터 데이터를 다운받지 않습니다.

US_value 와  US_fs 폴더 내 
저장되지 않은 티커에 대한 정보만을 내려받습니다.

4,500 여개 종목을 다운받는데 2~3시간 정도 소요됩니다.


다음에는 arrange_US_fs() 함수를 통해 재무데이터를 정리해 줍니다.
해당 함수는 list 형태로 각 account별로 정리되므로
저장된 데이터를 받을 변수를 지정해 주어야 합니다.


US_fs = arrange_US_fs()




해당 함수는 get_US_fs() 를 통해 저장된
US_fs 폴더 내 재무데이터를 읽어와
각 항목 별로 정리합니다.

따라서 get_US_fs()를 먼저 실행하여야 제대로 작동합니다.





리스트 형태로 저장된 US_fs 를 확인하면
총 109개 계정으로 나뉘어져 있으며,
총 4502 종목이 모두 저장되어 있습니다.




첫번째 account 인 cash를 확인해 보면
FY0, FY-1, FY-2, FY-3 년도 컬럼이 있으며,
티커 순서별로 저장되어 있음이 확인됩니다.




또한 fs_list.csv에 정리되어 자동 저장됩니다.




데이터 다운로드와 정리가 완료되었으므로,
이제는 F-score를 구할 수 있습니다.

F_Score_US 함수는 저장된 재무데이터를 바탕으로
각 종목들의 F-Score를 구해줍니다.

입력변수로는 arrange_US_fs를 통해 구해진
US_fs 를 입력합니다.


f = F_Score_US(US_fs)



f 변수를 확인해보면 각 종목별 F-score가
저장되어 있음이 확인됩니다.

F-Score 컬럼을 클릭하면 내림차순으로 정리가 되므로,
9점 종목을 투자하는 것도 한 방법입니다.




이번에는 원하는 F-Score 종목 중에서
Valuation 이 매력적인 상위 n 종믁을 선택하는

F_Score_value_US 함수입니다.

해당 함수는 총 3가지 변수가 입력되며

1. name: 정리된 재무데이터 (위에서 US_fs 로 저장)
2. score: 원하는 F-Score, 디폴트로 c=(8,9) 점이 입력됨
3. n: 투자하고자 하는 종목 숫자. 디폴트로 30 이 입력됨



f = F_Score_value_US(US_fs, score=c(8,9), n = 30)




해당 함수는 F_Score_US 함수를 통해 F_Score를 계산하며,
get_US_fs에서 저장된 value_list.csv 데이터를 읽어온 후,
PER, PBR, DY 랭킹을 이용해
상위 n 종목을 반환합니다.


list 형태로 결과를 반환하며

TICKER 리스트에는 선택된 종목의 티커를.
DETAIL에는 F-Score와 PER, PBR. DY를 보여줍니다.


간단하게 정리하면 다음과 같습니다.



devtools::install_github("hyunyulhenry/HenryQuant")
library(HenryQuant)

get_US_fs()
US_fs = arrange_US_fs()
invest = F_Score_value_US(US_fs, score = c(8,9), n = 30)


심플하죠..?!

댓글 5개:

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. 안녕하세요~ 질문이 있습니다!
    get_US_fs()를 실행하면 기업_fs.csv 파일에 아무값도 안들어오고 파일만 생성됩니다ㅠㅠ
    Annual Balancesheet for ~~~이런 문구도 뜨지 않습니다ㅜ

    답글삭제
    답글
    1. 실행해서 업데이트된 버젼 받으셔야 합니다.
      기존 버젼 패키지는 막혀서 빈시트 생성될 겁니다.

      삭제
  3. 질문 한가지만 더 드리겠습니다ㅜㅜ
    US_fs = arrange_US_fs()실행하면 아래와 같은 에러가 뜹니다..!

    Error in bind_rows_(x, .id) :
    Column `Past 1 Yr` can't be converted from numeric to factor

    답글삭제
  4. arrange_US_fs2 함수를 정의해서 na.rm = TRUE 처리를 하면 이런 에러가 뜨는데..무슨 문제인지 알 수 있을까요??ㅠㅠ
    Error in names(fs_list) <- fs_account :
    'names' attribute [75] must be the same length as the vector [74]

    답글삭제