퀀트투자 백테스트 - 현실적인 백테스트 방법 - 2
본문 바로가기
파이썬(Python)/퀀트투자

퀀트투자 백테스트 - 현실적인 백테스트 방법 - 2

by 만초손겸수익 2021. 11. 5.

본 포스트는 퀀트투자를 위한 개인적인 백테스트 기록이며, 테스트 과정이 올바르게 진행되었다는 어떠한 증명도 할 수 없음을 알려드립니다. 본 포스트를 참고하셔서 투자를 하는 행위는 삼가하여 주시기 바랍니다.

퀀트투자 프로그램을 사용하지 않고, 보통사람이 할 수 있는 가장 현실적인 퀀트투자 방법 2번째 포스트다.

첫 번째 포스트는 누구나 할 수 있지만, 아주 시간이 오래 걸리는 방법이다. 아래 링크를 참고하길 바란다.

퀀트투자 백테스트 - 현실적인 백테스트 방법 - 1


두 번째 방법은 진입장벽이 약간 있는 방법이다.

파이썬이라는 언어를 공부하고 사용해야 한다. 하지만, 결코 어렵지 않다. 시간만 조금 투자하면 누구나 쉽게 배우고, 활용도가 높은 프로그램이 '파이썬'이다.

혹시나 관심이 있는 사람이 지금 포스트를 보고 있을 경우를 대비해서 파이썬 설치 방법을 아래 링크에 남겨 놓는다.

2020.11.12 - [취미로 하는 파이썬/시작 - 아나콘다,파이참 설치] - 파이썬 시작하기 1 - 아나콘다 쉽게 설치하기

파이썬 시작하기 1 - 아나콘다 쉽게 설치하기

www.anaconda.com/products/individual Anaconda | Individual Edition Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single mac..

dotsnlines.tistory.com


그럼 파이썬을 사용해서 어떻게 데이터를 얻고, 자동으로 백테스트를 할 수 있는지 대략적으로 기록 하겠다.

  1. 참고로 나는 IT 비전공자이다. 당연히 직딩이고, 육아를 병행하고 있는 한 가정의 가장이다. 즉, 아주 바쁜사람이라는 얘기다.
  2. 파이썬은 혼자 공부한지 2년이 채 되지 않았다. 그 전에 제대로 된 프로그래밍 수업도 들어본 적이 없다. 금융지식도 정식으로 배운게 아니라 도서관에서 혼자서 많은 책만 열심히 읽었다. 한 마디로 허접하다는 얘기다.

1번과 2번을 종합하면, 제대로 된 지식도 없는 나이많은 바쁜 사람이 이렇게 투자와 파이썬이라는 IT 기술이 접목된 포스트를 허접하게 쓰고 있다는 얘기다. 즉, "야! 너도 할 수 있어"가 결론이다.


파이썬에 대한 지식이 전무한 사람은 우선 기초적인 사항만이라도 공부하시기를 추천 드리지만, 굳이 그렇게 하지 않아도 된다.

나는 퀀트투자 블로그를 쓰는 중간 중간에 내가 만든 허접한 코드를 공개할 것이다. 그냥 따라하면 된다.

하지만, 왠만하면 질문은 하지 말기를 바란다. 위에 1번 처럼 나는 아주 바쁜사람이다. 질문을 하면 내가 어떻게든 답변을 해야 하니 스트레스를 받을 것이고, 그럼 직장과 가정에 무리가 갈 수 있기 때문이다.


잡설은 그만하고 이제 본론으로 들어가 보겠다.

1. 퀀트투자 백테스트를 하기 위한 데이터는 어떻게 구할 것인가?

  • 퀀트투자와 관련된 초반 포스트에서 적어놓았듯이 데이터를 구하기가 상당히 어렵다.
  • 그래서 나는 내가 할 수 있는 범위에서 백테스트를 진행하기로 했다.
  • KRX에서 데이터를 다운로드 받을 수 있고, pykrx 라이브러리를 사용하면 좀 더 쉽고, 자동으로 데이터를 구할 수 있다.

2. 백테스트는 어떻게 할 것인가?

  • 일단 나의 투자 철학은 단타와는 거리가 있다. 그리고 게으른 투자를 지향한다.
  • 리밸런싱 기간은 1년으로 설정하고, PBR, PER, DIV, DPS 등의 수치를 정렬하거나 조합하는 방식으로 최대 수익방법을 찾는다.
  • 구할 수 있는 데이터가 한정적이고, 내 능력이 제한적이라 할 수 있는 범위에서 백테스트에 대한 오류를 차차 수정해가며 전략을 향상한다.
  • 추후 백테스트 경험이 많아지면, 금융데이터를 구매해서 좀 더 다양하게 백테스트를 진행할 예정이다.

아래는 백테스트를 할 날짜를 리스트로 만드는 코드다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pykrx import stock
 
class MakeDateList:
 
    def __init__(self, month, day, start_y, end_y):
        self.m = month # 투자 월
        self.d = day #투자 일
        self.sy = start_y #백테스트 투자 시작 년도
        self.ey = end_y
 
    def make_date_list(self):
        date_list = []
        for y in range(self.sy, self.ey):
            day = str(y) + str(self.m) + str(self.d)
            b_day = stock.get_nearest_business_day_in_a_week(date=day) #휴일이면 근처의 영업일로 변경
            date_list.append(b_day)
        return date_list
cs


보면 알겠지만, 하나도 어렵지 않다.
(혹시 어렵게 보인다면, 내 파이썬 코딩능력이 향상된 것으로 알고 감사하게 생각하겠다.)

주식투자는 매일 할 수 있는게 아니다. 보통 휴일이 아닌 주중에 할 수 있다. 하지만, 17년치 데이터의 날짜를 일일이 찾아보며, 영업일만 따로 만들기에는 너무나 시간소모적인 비효율적 작업이다.

그래서 위와 같은 코드를 사용해서 영업일로 투자가 이루어지는 List를 만든 것이다.

예를들어 내가 매년 1월 4일에 20종목을 샀다가 그 다음 해에 산 종목을 팔고 다시 20 종목을 선별해서 매수한다. 이 과정을 리밸런싱이라고 부른다. 하지만, 매년 1월 4일이 항상 영업일은 아니다. 그래서 영업일이 아닌 경우 1월 3일이나 1월 2일로 자동으로 바꿔서 저장하는 기능을 한다.


위의 코드와 같이 한 단위를 라이브러리 또는 모듈이라 부른다.

투자 날짜를 정하는 모듈 외에도 PBR, PER 등의 데이터를 가져오거나, 종목 코드, 종목명을 가져오는 모듈들을 만든다. 드리고 필터링 해서 20개만 골라내는 모듈도 만든다.

이런 모듈들을 여러게 만들어서 합치면 백테스트 봇이 만들어진다.

이렇게 파이썬을 이용하면 다양한 방법으로 쉽고 빠르게 백테스트가 가능하다. 그리고 실제 투자할 때 종목선정을 하기도 쉽고 휴먼에러도 최소화 할 수 있다.

728x90
반응형

댓글