주식을 시작하고 나서 종목 선정을 위해 재무제표나 차트를 보는게 너무 귀찮아서 적정가 측정이나, 위험 정도 여부 등등을 자동으로 체크할 수 있다면 좋겠다고 생각했다. 그러던 차에 ‘퀀트’라는 단어가 눈에 띄었고, 예전에 알고리즘으로 주식투자 하는 직업에 대해 이야기 들었던 것이 기억이 났다.

퀀트에 대해 찾아보니 이미 많은 사람들이 주식에 활용하고 있었고, 무료 툴들도 많았다. 다른 사람들이 만들어 놓은 툴을 사용해도 되지만 직접 만들어서 하는 것도 재밌을 것 같아서 파이썬으로 개발을 해보기로 했다.


퀀트란?

quant 퀀트라는 단어 자체는 계량적인(quantitative)라는 단어에서 나왔다. 예전에는 주로 수학적인 근거를 기반으로 투자 모델을 만들어서 투자에 활용하는 직업을 가르키는 용어였던 것 같은데, 지금은 하나의 투자기법으로도 많이 쓰이는 것 같다. 넓게 보면 알고리즘 트레이딩까지 퀀트의 범위에 포함될 수 있다고 생각하는데, 여기서 다룰 퀀트는 계량적인 수치를 바탕으로 종목을 고르는 방법이라고 보면 된다.

판다스(Pandas)

파이썬의 기본 문법과 자료구조만 가지고 데이터 분석을 하기는 무리가 있기 때문에 파이썬용 데이터 분석 모듈인 판다스를 사용할 것이다. 판다스의 기능은 정말 많겠지만 일단 기본적인 자료구조만 짚고 넘어간다.

Series

series는 순서있는 dictionary라고 생각하면 편하다.

>>> Pandas.Series([500, 100, 140], index=['카카오', '삼성전자', '현대'])
카카오     500
삼성전자    100
현대      140
dtype: int64

위와같은 형태로 데이터를 저장할 수 있다.

DataFrame

dataframe은 2차원 series라고 할 수 있다.

>>> Pandas.DataFrame({'가격':[500,100,140], 'PER':[0.5,1.2,0.2]}, index=['카카오', '삼성전자', '현대'])
       가격  PER
카카오   500  0.5
삼성전자  100  1.2
현대    140  0.2

위와 같은 형태로 데이터를 저장할 수 있다.

특정 데이터만 뽑아오는 것도 쉽게 할 수 있다. 예를 들면,

df = Pandas.DataFrame({'가격':[500,100,140], 'PER':[0.5,1.2,0.2]}, index=['카카오', '삼성전자', '현대'])
df[df['가격' >= 300]]
       가격  PER
카카오   500  0.5

이렇게 하면 가격이 300이상인 데이터만 들고올 수 있다. 또, sort_values()rank() 함수로 쉽게 정렬과 랭크 구하는걸 할 수 있다.

데이터 크롤링

어떤 알고리즘을 돌리던 간에 일단 재무제표 데이터, 가격 데이터 등 데이터가 필요하다. 가공되어 있는 유료 데이터들이 있는 것으로 알고있지만 데이터 크롤링 코드로 충분히 우리가 원하는 데이터를 뽑아올 수 있다. 데이터를 뽑는 방법은 다음 장에서 자세히 알아본다.

알고리즘

추후 작성 예정

백테스트

추후 작성 예정