본문 바로가기
파이썬으로 종목 스크리너 만들기

뇌동매매 금지 - 1. 파이썬 종목 스크리닝을 위한 준비

by 유티끌 2022. 9. 12.

사실 요새 많은 사람들이 주식을 하고 있는데,
제 개인적으로 너무 뉴스 소문, 그냥 그 날 느낌적 느낌 에 따라 뇌동매매가 너무 활발하게 이루어지다보니 이익볼 것도 못 보고, 손실만 크게 보는 상황이 반복되고 있었습니다.

이것을 막아보기 위해 제대로 공부를 시작하자라고 생각했고, 이런저런 책들을 사서 보고 있었습니다.

그러는 중 퀀트 투자를 알게 되었고, 각종 지표를 통해서 정량적인 투자를 하는 것에 대해 매력을 느끼게 되었죠.

그럼 원하는 조건에 부합하는 종목을 찾아서 시작을 해야할텐데, 문제는 주식의 종목갯수가 너무 많고, 그 중에 내가 원하는 주식을 찾는 것 부터가 너무 많은 시간이 소모된다는 것이었습니다...


파이썬을 이용한 종목 스크리닝

예전부터 프로그램을 통한 종목 확인 및 매매방법이 있다는 말을 듣긴 했는데, 너무 어려울 것 같기도하고, 트레이딩 중심의 방법이라고 느꼈었는데, 트레이딩을 제외하더라도 각각의 종목들에 대한 펀더멘탈적인 정보들을 한 눈에 확인하고, 필터링하면 종목에 대해 조사하는 시간을 확 줄일 수 있을 것 같다고 느꼈습니다.

네이버 증권에서만 봐도, 각각의 종목의 재무정보들은 보기쉽게 올려주지만, 사실 2천개가 넘어가는 주식 중에 어떠한 종목이 펀더멘탈 지표로봤을때 다른 종목들보다 좋은지 는 보여주지 않습니다. 이것만 알 수 있어도 편하겠다! 라고 생각을 했죠.

물론 뇌동매매는 어느쪽이냐 하면 트레이딩쪽에 가깝고..어떠한 타이밍이나 외부요인들에 민감하긴 한데, 그래도 정보를 가지고 해당 정보에 확신을 가지고 구매하는 종목이라면, 의미없거나 성급한 매매들도 줄어들지 않을까 하고 생각하기 시작했습니다.

시중의 프로그램을 사용해보는 것은...?

이러한 고민들을 집사람에게 얘기해보았고, 돈주고 프로그램 써보는 것이 어떠냐고 물어봤더니 헛 돈 날릴 생각 하지마라 라는 피드백을 받았고...ㅎ...ㅎㅎㅎ..

시중에는 퀀트킹이나 젠포트? 와 같은 프로그램이 있는 것 같은데, 제가 맥북을 사용하고 있는데 이녀석들을 다 윈도우 전용이라는 점에서 발목이 잡히더라구요. 이것때문에 AWS EC2생성해서 하긴... 수익도 못냈다가는 그냥 헛 돈만 날릴 것 같기도 하고 ㅎㅎ.. (뭔가 한 달에 커피 몇 잔 덜 사마시면 되는데 뭐가 그리 아까운건지..)

올라떼 라는, 얼마전에 두물머리에서 출시한 스크리닝&백테스트 서비스는 아직은 무료이고 웹기반 서비스라는 점에서 마음에 들었지만, 무료인 상태에서는 이용제한이 있기도 해서 조금 아쉬운 점이 있었습니다. 조건도 많이 있었지만 퀀트킹보다 세세하게 조합을 짤 수 있는 건 아닌 것 같았습니다., 유명한 지표들을 기준으로 계산을 낼 수도 있어보였...는데, 일단 제가 어느정도 수익이 나서 주식 공부&스크리닝을 해보니 충분히 효과적이었다는 것을 집사람에게 말해서 검증을 해야 유료프로그램도 쓸 수 있을 것 같아서 ㅎㅎ..

어차피 나처럼 직접 구현해서 스크리닝해볼까 하고 고민하던 분들은 이전부터도 있었다.

직접 파이썬이나 R을 이용해서 주식 데이터를 수집하고 가공해서 투자의 참고용 지표로 활용하고자 하는 분들은 구글링을 조금만 해보면 많이 나오기도 하고, 시중에 서적으로도 판매하고 있습니다.
하여... 나는 파이썬 공부 겸 해서 이런저런 자료들을 최대한 짜깁기를 해서 만들어 볼까합니다.


준비사항

저는 직접 파이썬을 이용해서 작성할 꺼라서, 아래는 필수로 있어야겠습니다.

..파이참은 필수가 아니지만, 저는 파이참이 편해서 파이참으로 사용했습니다.
그리고, OPEN Dart의 API Key가 필요합니다. Dart는 금융감독원의 전자공시시스템인데, 여기서 주요 재무재표 정보들을 API로 얻어올 수 있습니다. (호출 제한횟수 있음)
그 외에도 주요 라이브러리로 pykrx, OpenDartReader, FinanceDataReader를 사용합니다.
정말 만드신 분들 찬양해야한다고 생각합니다. 감사합니다.

requirements.txt

그 외에도 사용한 모든 라이브러리 내용들은 아래와 같습니다.

beautifulsoup4==4.10.0
certifi==2021.10.8
charset-normalizer==2.0.12
DateTime==4.4
decorator==5.1.1
Deprecated==1.2.13
et-xmlfile==1.1.0
finance-datareader==0.9.32
idna==3.3
lxml==4.8.0
numpy==1.22.3
OpenDartReader==0.1.6
openpyxl==3.0.9
pandas==1.4.1
pykrx==1.0.32
python-dateutil==2.8.2
pytz==2021.3
requests==2.27.1
requests-file==1.5.1
self==2020.12.3
six==1.16.0
soupsieve==2.3.1
tqdm==4.63.0
urllib3==1.26.8
wrapt==1.14.0
xlrd==2.0.1
zope.interface==5.4.0

tree

프로젝트의 디렉토리 구성은 아래처럼 될 것 같네요.

├── config
│   ├── __init__.py
│   └── api_key.py
├── docs_cache
│   └── opendartreader_corp_codes_20220505.pkl
├── export_data
│   ├── __init__.py
│   └── export_to_excel.py
├── extract_data
│   ├── __init__.py
│   ├── basic_factor_data
│   │   ├── __init__.py
│   │   └── korean_market_factor_data.py
│   ├── extract.py
│   └── krx_condition.py
├── filter_data
│   ├── __init__.py
│   └── filter_by_condition.py
├── main.py
└── requirements.txt

각각의 성격을 가진 모듈을 세분화 해서 작업합니다.
예컨데 korean_market_factor_data.py 는 한국거래소의 정보들만 뽑아 오고, 그것을 토대로 extract.py 에서는 해당 정보들의 각종 재무재표들을 OPENDart에서 읽어와서 조합합니다.
이렇게 조합한 것들에 대해 임의의 조건을 걸어 필터링을 하는 행위를 filter_by_condition.py 모듈에서 진행하고, 가공된 데이터와 가공되지 않은 원본 데이터들을 엑셀시트로 해서 하나의 엑셀 파일로 만들어 볼겁니다. export_to_excel.py


이 시리즈에 시간날 때 마다 꾸준히 기재해볼 생각이고, 참고했던 블로그나 사이트들도 가능하다면 전부 링크을 달아둘 생각입니다.

준비작업 끝!

반응형

댓글