또다른 삽질 도전 : 할 수 있나? 퀀트투자

정보/뉴스


인기게시물



또다른 삽질 도전 : 할 수 있나? 퀀트투자

플림 7 2654

안녕하세요.

일전에 주식 자동 매매 프로그램 구현을 도전하다가 좌절하고 한동안 허황된 꿈을 접어두고 있던 직장인입니다.

그러다 이번에는 할 수 있다! 퀀트투자라는 책을 보고 감명을 받아서 자동 종목 선정 프로그램 구현을 시도해봤습니다.


이번에도 퇴근 후, 주말에 부인님의 눈치밥을 먹어가면서 어찌어찌 프로그램을 짜봤는데...

결국에는 또 삽질인 것 같습니다.

삽질한 노력이 안타까워 썰을 한 번 풀어봅니다.


이번에는 파이썬으로 작성했고, 파이썬의 OpenDartReader를 활용해보려고 했으나 그냥 Dart의 '재무정보 일괄 다운로드'를 활용했습니다.


최초 전략은 다음과 같았습니다.


파이썬에서 Dart API를 이용해서 코스피 상장 기업들의 재무정보를 받아오고 이를 계량 수치화하여 최적의 주식을 선정한다.


그런데 Dart API가 생각보다 불안정한 부분도 많고 무엇보다 데이터 요청 횟수의 제한이 있어서 수작업으로 재무정보를 다운로드 받았습니다. (2016 ~ 2019)

https://opendart.fss.or.kr/disclosureinfo/fnltt/dwld/main.do

그리고 어떤 지표를 사용할 것인가, 어떻게 최적의 주식을 선택할 것인가는

강환국님이 쓰신 '할수있다! 퀀트투자'라는 도서의 '밸류 + 퀄리티 + 모멘텀' 콤보를 사용하였습니다.


분석에 활용한 데이터는 'PER', 'PBR', 'PCR', 'PSR', 'NEW_F', 'GPA', 'MOMENTUM' 이었고 이를 위해서

Dart API의 재무정보 다운로드와 파이썬의 pykrx 모듈을 사용하여 raw 데이터를 수집할 수 있었습니다.


이전에 먼저 고난의 길을 걸으셨던 분들처럼 저도 데이터 수집에 상당히 애를 먹었는데,

https://www.clien.net/service/board/use/14494799CLIEN

최대한 간소하게 해보자(데이터 없는 기업은 버려!)는 취지로 러프하게 데이터를 수집했더니

2016년도에는 390여개의 기업 그 이후로 점차 나아져서 2019년 3분기에는 495개 기업의 데이터를 수집할 수 있었습니다.

(2019년을 기준으로 코스닥 시장에 약 799개의 기업이 등록되어 있다고 하니 50% 정도의 기업에서만 데이터를 수집할 수 있었습니다.)


각 지표는 다음과 같이 산출하였습니다.

PER = pykrx의 get_market_fundamental_by_date 함수 이용

PBR = pykrx의 get_market_fundamental_by_date 함수 이용 

PCR = 시가총액(pykrx의 get_market_cap_by_date) / 영업활동 현금흐름

PSR = 시가총액(pykrx의 get_market_cap_by_date)  / 매출액

NEW_F = 당기순이익, 영업활동 현금흐름이 +인가?

GPA = 매출총이익 / 자산총계

MOMENTUM = 재무정보 조회일 기준 1년 전 주가, 재무정보 조회일 주가의 CAGR

CAGR = 재무정보 조회일 주가, 재무정보 조회일 기준 1년 후 주가의 CAGR


이렇게 지표를 선정하고 2016년 1/4분기부터 2019년 4/4분기까지 데이터를 읽어와서 각 분기데이터 별로 순위를 매겼습니다.(rank)

그리고 각 지표 별 순위를 다 더하고 그 순위를 합계한 총합을 또 순위를 내봤습니다!


그러니까 정리하면 각 분기의 기업별 재무지표를 바탕으로 지표 별 순위를 매기고 지표 별 순위를 합쳐서 통합 순위를 매겼고,

이를 1년 후 CAGR과 얼마나 상관관계가 있는지 비교해봤습니다.


그랬더니 통계학적으로 유의미한 결과가 안 나오더군요.

그래서 혹시나 하는 마음에 머신러닝을 이용해보자 하고 Random Forest를 이용하여 예측을 돌려봤습니다....


그런데.. 정말.... 세상살이가 생각대로 되는 것이 하나도 없더군요.

어마어마한 주식시장의 진리를 발견하게 될 줄 알았는데, 그냥 시간만 헛되이 보낸 것 같습니다.

주식 매매 자동화의 꿈은 요원한 것 같네요. ㅜㅜ

7 Comments
플림 2021.07.05 12:00  
@0be3c09f0b1a488c9f4.gif님 맞는 말씀 같습니다. 그런데 가끔씩 나오는 대박 소문에 자꾸 요행수를 찾게 되네요. ㅎㅎㅎ
Altery 2021.07.05 12:00  
퀀트든 자동매매든... 계속 돌리다보면 시장에 대해 더 잘 이해하게 되는것 같습니다. 검색조건 매매조건을 아무리 돌려봐도 결국엔 고위험 고수익. 저위험 저수익으로 귀결되고, 너무도 정확하게 거래비용만큼의 손실이 발생한다는 점... 남들 10년 걸려서 배울 시장의 원리를, 단 10일만에 자동매매 돌려서 터득가능하기도 하구요 ㅎ 만약에 지금 논의되고 있는것처럼 증권거래세 폐지되면...미리 자동매매 연구하신 분들에게는 큰 기회가 찾아올 것입니다.
플림 2021.07.05 12:00  
@Altery님 네, 저도 이번에 프로그램 짜면서 공부하게 된 것이 상당히 많아요. 언젠가는 도움이 되겄쥬.... ㅜㅜ
햇살아이 2021.07.05 12:00  
조합에 문제가 있습니다 일단 퀄리티 모멘텀을 빼시고요 리밸런싱 주기를 줄여보세요 요
플림 2021.07.05 12:00  
@햇살아이님 넵... 아직 초짜라 노하우가 부족하네요. 조금 더 다듬어 보겠습니다.
블랑노랑 2021.07.05 12:00  
저도 도전했었구요. 과거 제글을 보시면 한달만다 성과도 올렸었습니다. 저도 할수잇다 퀀트투자보고 했네요. 하지만 데이터 수집이 너무 힘들어서 그냥 유료서비스인 젠포트를 이용하고 있습니다. 저런 유료 서비스 쓰는게 훨씬 편하구요. 데이터 정재할시간에 하나라도 전략테스트 하는게 도움이 더 많이 됩니다. 저런 유료 백테스팅 툴을 써서 감을 익히시고 실제매매는 그 경험을 바탕으로 하시는걸 추천드립니다
플림 2021.07.05 12:00  
@블랑노랑님 오.. 젠포트라는 것이 있었군요. 좋은 추천 감사드립니다.

제목