안녕하세요, 저는 퀀트 투자를 좋아하는 quantai입니다. data of the quant, by the quant, for the quant에 방문해 주셔서 감사합니다. 퀀트투자에 관한 정보를 공유하고자 블로그를 개설하였습니다. 아직 투자에 입문한 지 얼마 되지 않아 조금씩 배우는 입장이지만 데이터를 이해하고 활용하는 일에는 자신이 있기에 저만의 투자 데이터를 구축하고 분석하면 퀀트투자에 대해서 성공가능성이 있다고 판단하였습니다. 또한 투자를 하는게 게임하는것처럼 재미가 있습니다. 퀀트투자에 대한 정보를 공유하지만 저의 투자수익률증명이라던지 특정종목을 추천하는 행위 등은 없을 것입니다. 저는 이 블로그를 통해서 여러분들과 상호작용하며 서로의 투자가 win-win이 되었으면 합니다.
저의 퀀트투자현황, 그리고 개발환경
저는 현재 미국주식에대하여(국내주식의 경우 앞으로 조심스럽게 접근할 생각입니다) 백테스팅결과와 최종적으로는 개인적인 의견을 더하여 분할투자하는 방식을 사용하고 있습니다. 매일매일 데이터를 모으고, 그 데이터를 기반으로 해서 백테스팅을 하고 있습니다. (제가 생각하는 중요한 데이터들의 과거 데이터는 구할 수가 없어서, 스크래핑등으로 매일매일 새로운 데이터를 축적하고 있습니다.
크게 2가지 모델을 백테스팅하고 있는데 다음과 같습니다.(실제로 조건이나, 쓰이는 데이터, 데이터 정규화등등으로 테스트하는 모델은 수십 가지 이상)
조건기반모델
복수의 미리 설정한 조건에 모두 부합하는 리스트 중, N지표 기준으로 정렬하여 상위 N개 종목을 선정
머신러닝모델
tensor flow로 머신러닝모델을 만들어 상위 N개 종목을 선정. 이 블로그를 통해 머신러닝 모델을 만드는 코드는 추가로 설명하려고 합니다.
백테스팅 평가방법
현재는 일정기간의 지수데이터 또는 모델링할 때 쓰이는 전체기업리스트에 분산투자했을 시 얻을 수 있는 평균수익률과 비교해서 모델이 좋고 나쁜지를 평가하고 선별합니다.
리밸런싱전략(Rebalancing strategy)
현재 리밸런싱을 위한 고정기간은 따로 정하지 않았으며 실제투자 중인 기업들에 대하여 백테스팅에 사용된 지표를 자동으로 감시하고 있으며 지표의 변화(아래 그림처럼 알림을 받기도 하고 전체 history가 구글시트상에서도 확인 가능하다.)를 고려하여 리밸런싱이 필요하다고 느끼면 Rebalancing을 고려하고 있습니다. 또한 상당히 주관적인 생각이 개입하여 매도(손익실현 또는 손절매목적)를 하기도 합니다. 참고로 현재 미래에셋과 하이투자증권은 미국주식에 대해서 수수료 무료 이벤트 중이므로 Rebalancing의 수수료 부담은 없네요.
백테스팅에 사용되는 데이터(기업리스트)
아래와 같은 필터링(지금 생각으로서는 1년에 한 번 정도 아래 기준에 맞춰서 기업리스트를 수동으로 추가/삭제 )을 사용하는 전략을 사용하고 있습니다. 각각의 필터와 사용하는 이유를 설명하겠습니다.
- 시가총액 상위 N% 기업
- 시가총액은 시장의 신뢰도와 성장성을 반영하는 지표로, 시가총액상위리스트는 시장에서 주목받고 있는 우량한 종목들을 추출할 수 있다고 생각한다.
- 소형주의 데이터에서 발생하는 outlier를 줄임으로써 백테스팅에 사용되는 데이터의 quality를 향상할 수 있다고 생각한다. (기본적으로 소형주는 high risk high return 이라고 보며 투자성향에 달려있다고 생각한다. 하지만 기본적으로 거의 모든 백테스팅 툴에서는 소형주는 과대적합(Overfitting) 되었을 가능성이 크다고 본다. )
- 시가총액으로 필터링했을 때 다른 feature들이 특정 방향으로 기울지 않는다.(상대적으로) ROE로 필터링할 경우 ROE와 상관관계가 높은 다른 feature들도 특정 방향으로 쏠림 현상이 발생합니다. 예를 들어, ROE가 높은 종목은 일반적으로 PER가 낮은 경향이 있다고 가정하면 ROE로 필터링하면 PER도 낮은 종목으로만 구성된 데이터셋이 만들어집니다. 이는 백테스팅 결과의 왜곡을 유발할 수 있습니다. 즉 시가총액으로 필터링하면 다른 feature들의 분포를 왜곡하지 않고 데이터셋을 만들 수 있다. 그 결과 백테스팅 결과가 보다 안정적이 되고 과적합이 방지될 것으로 기대한다.
- ADR 주식은 제외
- 시장의 변동성을 줄일 수 있다. ADR 주식은 원본 주식의 가격 변동에 따라 움직이지만, 환율 변동 및 해당국가의 시장상황등에도 영향을 받는다. 따라서, ADR 주식은 원본 주식에 비해 시장 변동성이 높을 수 있다. 즉 시장 변동성에 따른 위험을 줄일 수 있다고 생각한다.
- 금융주는 제외
- 일반적인 기업과는 데이터의 성질이 달라 백테스팅의 quality를 저하시킬 위험이 있다고 생각한다.
- 금융주는 경기 변동에 민감한 종목들이다. 경기가 좋을 때는 금융주가 크게 오를 수 있지만, 경기가 나쁠 때는 크게 하락할 수 있다. 따라서, 금융주를 제외하면, 시장 변동성에 따른 위험을 줄일 수 있다고 생각한다.
개발 환경(no cost를 지향)
- bard와 chatgpt(코딩 속도를 200% 향상해 주었다.)
- 구글 시트, 구글 앱스스크립트(javascript기반) 아직까지는 구글시트에 모든 데이터를 저장/이용하고 있고 큰 문제가 없다.
- python
- 맥북
- jupyter notebook & colab
- 여러 조건을 등록하여 자동으로 report를 생성한다.(현재진행 중)
- 원래 계획은 colab을 이용항 report생성이었지만 colab을 이용할 백그라운드 실행은 colab plus+에서만 제공하는 것으로 보인다. 그래서 jupyter notebook를 이용하여 rerpot를 만들도록 계획을 변경하였습니다.
- 또한 조건이 같더라도 매일 사용가능한 데이터가 달라져서 같은 조건이라도 매일 돌려주려고 한다(예를 들어 20일 후 주가를 목적변수로 사용하는데 20일 후 주가가 아직 안나온 데이터의경우, 그 데이터를 백테스팅에 사용하지못하지만, 몇일지나면 20일후 주가 데이터가 확보하며 백테스팅에 사용가능하다.)
- 그 외 (chrome&checker plus for gmail)
- 크롬의 extension checker plus for gmail을 설치하였고, 종목의 fundamental 혹은 기술적 지표등의 변화가 있을 경우 자동으로 gmail로 푸시를 받습니다.
- google alert에 관심 있는 키워드를 등록하여 마찬가지로 checker plus for gmail을 통해 푸시를 받습니다.
실제사용하는 퀀트 데이터종류에 대해
현재 아래와 같은 항목을 백테스팅에 사용하기 위해 데이터를 축적하고 있습니다. 공개하고 싶지 않은 항목은 비공개로 표시하였습니다.
- roe, per, forward per, roc ma (비공개1) (비공개2) (비공개3) (비공개4) hedgeFund (비공개5) (비공개6) (비공개7) mcad rsi cci adx (비공개8) (비공개9) (비공개10) (비공개11) (비공개12) (비공개13) (비공개14) (비공개15) 1영업일주가변화 5영업일주가변화 10영업일주가변화 20영업일주가변화 40영업일주가변화 80영업일주가변화 120영업일주가변화 240영업일주가변화 240to20주가변화 120to10주가변화 240to20andInverse20주가변화 120to10andInverse10주가변화 기타 등등
- 목적변수용(3영업일후주가, 5영업일후주가, 10영업일후주가, 20영업일후주가 40영업일후주가, 80영업일후주가, 120영업일후주가, 240영업일후주가) (실제로는 N 일후 주가가 그대로 사용되는 것은 아니며 증시의 전체적인 상승/하락등에 영향을 받지 않도록 가공하여 목적변수를 만든다)
- 계속해서 새로 습득한 정보와 데이터분석에 기반하여 가설을 세우고 그 가설을 증명하기 위한 데이터를 계속해서 증가시키고 있습니다.
- 상관관계가 큰 데이터들은 아래와 같은 방법을 적용시키기도 하며. 상관관계가 커서 비효율적이라고 생각하면 데이터 축적자체를 하지 않는 결정을 하기도 합니다.
- 변수 제거: 상관관계가 높은 변수를 모델에서 제거.
- 변수 결합: 상관관계가 높은 변수들을 결합하여 새로운 변수를 생성
위에 언급한 데이터중 실제로는 사용하지 않는 데이터종류도 있으며, 데이터 그대로 사용되기보다는 가공하여 사용되는 경우도 있다.
일부 데이터는 다수의 해외 사이트에 대하여 스크래핑을 통하여 얻고 있다.
(추가글) 실제 최초 블로그 게시후에도 축적하는 데이터(feature) 수가 계속하여 증가하고있다.(반면에 잘 사용하지 않는 feature도 늘어나고 있다.) 어떤 데이터를 축적하는지를 공개하는것은 나의 전략과 알고리즘을 노출하는것이기 때문에 공개를 원하진 않는다. 다만 축적하는 데이터 중에서도 특이한점을 공유하자면 데이터 직접입력도 수행한다는것이다. API나스크래핑이 아닌 데이터를 직접 입력하는 경우는 주로 기업성장성에 인과관계(causality)가 충분히 있다고 판단되며 다른 데이터와 상관관계가 적고 1년에 한번정도 갱신이 필요할 정도로 변화하지 않는 feature일 경우이다.
최고의 퀀트 스크리닝 데이터
bank of America에서 최고/최악의 퀀트 평가기준이란 리포트를 만들었다고 합니다. (참고영상 19분 부터보시면 될 듯) 참고로 1위 5위가 ROE였고 3위가 1년간 주가상승률에 1달간 주가하락률을 더한 수치이입니다. 어디까지나 참고자료이며 직접 백테스팅을 하는것을 추천드립니다. (백테스팅 기간은 정확히 기억나지 않네요. 영상에 있을 듯)
https://youtu.be/bRRIk33Kscs?si=NgWXVLPCOr74xLb01
앞으로의 계획
- 미국주식에 관하여 계속하여 백테스팅을 진행하여 다양한 전략을 테스트하며 얻은 결과를 실제투자에 활용할 생각이다.
- 국내주식에 대해서 백테스팅하기 위한 데이터를 모을 예정이다.
- 계속해서 이 블로그를 통해 저의 시행착오와 새로운 정보를 공유하려고 한다.
- 백테스팅과는 별도로 포워드테스팅(자동매수매도 모의투자)를 진행하려고 한다.
잘 부탁드립니다.
'퀀트투자 A to Z' 카테고리의 다른 글
QQQ 실시간 주가 예측 모델을 이용한 데이트레이딩 도전기: 게임처럼 느껴지는 전략과 모델 테스트 (0) | 2023.10.01 |
---|---|
데이트레이딩과 볼린저밴드: 확률적 투자 전략의 매력적인 세계 (0) | 2023.10.01 |
포워드테스팅으로 백테스팅의 오류를 잡아라: 퀀트 트레이딩의 비밀 병기 (1) | 2023.10.01 |
[미국주식 투자 수익률 계산] 정확하게 측정하기 (0) | 2023.10.01 |
구글 앱스 스크립트로 주식정보 알림받기(gmail, 텔레그램 봇) (1) | 2023.08.31 |