국민 1인당 1주식 계좌시대가 된 현재.
저금리 기조가 장기간 이어지면서 원금 손실이 가능한 고위험 투자임에도 불구하고 고수익을 쫓는 직접 투자자들이 늘어나고 있다.
이러한 사회경향을 반영하여 개인의 주식 포트폴리오 구성을 데이터 기반으로 추천해주는 프로젝트를 기획하였다.
본 프로젝트는 투자 금액에 맞추어 원하는 종목으로 구성된 포트폴리오를 최적화하는 알고리즘과 웹서비스를 구현한다.
주로 고액 자산가만을 대상으로 하여 접근성이 낮았던 기존 개인 자산관리(PB) 서비스를 소액의 투자금액으로 내가 원하는 시간과 장소에서 데이터 기반의 객관적인 추천을 받을 수 있다는 것이 큰 장점이다.
-
투자금액, 투자기간, 리스크(변동성) 제약, 투자 종목에 따라 맞춤형 포트폴리오 추천
-
투자종목은 직접 선택할 수 있으며, 종목을 선택하는 5가지 전략을 제시
- 모멘텀 1개월: 최근 1개월 수익률이 가장 높은 상위 30개 종목을 선택 (상대모멘텀)
- 모멘텀 3개월: 최근 3개월 수익률이 가장 높은 상위 30개 종목을 선택 (상대모멘텀)
- 듀얼모멘텀: 상대 모멘텀 x 절대 모멘텀
- 급등주: 특정 거래일의 거래량이 이전 20일의 평균 거래량보다 1,000% 이상 급증하는 종목을 선택
- 상승일 빈도: 최근 1년의 데이터를 기준으로, 전일 기준 상승 빈도가 높은 상위 30개 종목을 선택
-
포트폴리오 최적화 방법은 2가지가 있으며, 선택 가능
- Maximize 샤프지수
- 설정한 변동성 내에서 Maximize 수익률
-
소액의 직접투자자도 부담 없이 이용 가능한 개인 맞춤형 추천 서비스
-
시간과 장소 불문하고 편리하게 활용할 수 있는 웹 서비스 제공
- 일, 특정 시간 단위의 스크립트 실행
- 포트폴리오 만들기 시 결과를 api 로 리턴
- 메인웹의 mysql에 데이터를 배치 처리
패키지 목록
pip install PyPortfolioOpt
: cvxpy, numpy, pandas, scipypip install cvxopt
: PyPortfolioOpt 에서 필요로 함.
pip install matplotlib
: cycler, kiwisolver, numpy, pillow, pyparsing, python-dateutil:pip install scikit-learn
pip install finance-datareader
: lxml, pandas, requests, requests-file, tqdmpip install beautifulsoup4
: soupsieve- finance-datareader 에서 필요로 함.
pip install pykrx
: datetime, deprecated, numpy, pandas, requests, xlrdpip install mysql-connector-python sqlalchemy
- mysql-connector-python : protobuf
- sqlalchemy : greenlet
pip install flask-restx
: ansio8601, Flask, jsonschema, pytz, six, werkzeugpip install flask-cors
: flask, six- flask api를 ajax통신하는데 필요로 함.
pip install tensorflow
- lstm 을 이용하는데 사용됨.
docker build --force-rm --no-cache -t aistock-stockdata-api .
docker run --env-file ./.local.env --name aistock-stockdata-api -d -p 26000:5000 -v "%cd%:/app" aistock-stockdata-api
기존에 만든 것이 있었다면 중간에 rm 을 먼저 한 번 해주고 실행한다.
docker rm -f aistock-stockdata-api
docker build --force-rm --no-cache -t aistock-stockdata-api .
docker run --env-file ./.local.env --name aistock-stockdata-api -d -p 26000:5000 -v "%cd%:/app" aistock-stockdata-api
- /update_stock_table.py : 데이터베이스 테이블의 종목 목록을 갱신함