멀티팩터 기반 주식 데이터 수집 패키지
Project description
MultiFactor 📈
MultiFactor는 국내상장주식(코스피/코스닥)을 대상으로 멀티팩터(Multi-Factor) 전략을 손쉽게 적용하고, 팩터별 점수 및 종합 순위를 산출해 주는 파이썬 패키지입니다.
종목별 주가와 재무 데이터 수집은 FinanceDataReader를 기반으로 구동됩니다.
📌 멀티팩터 전략이란?
주식 투자에서 멀티팩터(Multi-Factor) 기법은 주가의 수익률에 영향을 미치는 여러 가지 핵심 요인(팩터)을 동시에 고려하여 종목을 고르고 포트폴리오를 운용하는 데이터에 기반한 정량적 투자 전략입니다.
단순히 '저평가된 주식'만 찾거나 '상승 추세인 주식'만 사는 것이 아니라, 다양한 성공 요소를 결합하여 단일 팩터의 약점을 보완하고 보다 안정적인 초과 수익을 추구합니다. MultiFactor 라이브러리는 다음 3가지 핵심 팩터의 점수를 계산하고 이를 종합점수로 환산한 후 순위화한 결과를 제공합니다.
| 팩터 (Factor) | 핵심 개념 | 주요 지표 |
|---|---|---|
| 모멘텀 (Momentum) | 과거에 우수한 성과를 보인 주식이 미래에도 상승 추세를 이어갈 것이라는 가정 | 주가 상승률, 거래량 |
| 밸류 (Value) | 기업의 내재 가치 대비 저평가된 주식을 발굴 | PER, PBR |
| 퀄리티 (Quality) | 우량한 펀더멘털, 안정적인 수익성, 장기 성장 잠재력을 갖춘 기업에 집중 | 매출성장률, 영업이익성장률, ROE |
✨ 주요 기능
- 국내 주식 멀티팩터 데이터 제공: 가치, 모멘텀, 퀄리티 지표 및 이를 합산한 종합 점수 산출
- 투자 유형별 가중치 조절한 멀티팩터 데이터 제공 : 투자 성향에 맞춘 3가지 모델 제공
- 가치성장: 밸류 + 퀄리티 조합 ("기업의 본질적인 가치와 안정성을 중요하게 생각하며, 장기적인 관점에서 투자")
- 추세성장: 모멘텀 + 밸류 조합 ("시장의 흐름과 성장을 중요하게 생각하고, 주가 상승에 적극적으로 참여")
- 역발상: 밸류 + 모멘텀 조합 ("저평가 종목이 다시 반등하는 시점을 찾아 투자 기회를 포착")
⚙️ 설치 방법 (Installation)
pip install MultiFactor
🚀 빠른 시작 (Quick Start)
1. 패키지 불러오기
다음 코드로 멀티팩터 패키지를 불러옵니다.
from MultiFactor import MultiFactor
2. 멀티팩터 객체 생성
멀티팩터 객체 생성 시, 수집 대상 종목 수(N)를 반드시 지정해야 합니다. (시가총액 상위 N개) N이 커질수록 데이터 수집 시간이 길어지므로, 초기 테스트에는 종목수(N)를 5~10 사이로 지정한 후 차츰 늘려갑니다.
mf = MultiFactor(N=5) # 시가총액 5개 종목
3. 종목 정보 수집
멀티팩터 객체에서 지정한 종목수(N) 만큼 종목 정보 데이터를 생성합니다. 반환되는 데이터 형식은 데이터프레임(기본값) 또는 딕셔너리로 지정할 수 있습니다.
# 종목 코드 정보 생성 (데이터프레임)
df = mf.get_stockinfo()
# 종목코드, 종목명, 시가총액 출력
df[['Code', 'Name', 'Marcap']]
| Code | Name | Marcap | |
|---|---|---|---|
| 0 | 005930 | 삼성전자 | 1147817793075800 |
| 1 | 000660 | SK하이닉스 | 691321294050000 |
| 2 | 005380 | 현대차 | 106883553852000 |
| 3 | 373220 | LG에너지솔루션 | 89037000000000 |
| 4 | 402340 | SK스퀘어 | 77535136505000 |
# 종목 코드 정보 생성 (딕셔너리)
stock_list = mf.get_stockinfo(dtype='dic') # {'종목코드': '종목명'}
stock_list
> {'005930': '삼성전자',
'000660': 'SK하이닉스',
'005380': '현대차',
'373220': 'LG에너지솔루션',
'402340': 'SK스퀘어'}
4.멀티팩터 종합 점수 데이터 수집
get_score함수로 멀티팩터 종합점수 데이터를 간단하게 생성할 수 있습니다.
data_mast = mf.get_score()
data_mast
| scode | sname | mom_price | mom_vol | PER | PBR | revenue_rate | oper_income_rate | net_income_rate | ROE | 모멘텀_주가 | 모멘텀_거래량 | 밸류_PER | 밸류_PBR | 퀄러티_ROE | 퀄러티_매출증가 | 퀄러티_영업이익증가 | 퀄러티_순이익증가 | 종합점수 | 종합순위 | 종합순위_퍼센트 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 4 | 402340 | SK스퀘어 | 118.409589 | -33.543478 | 2.95 | 0.54 | 62.829000 | 88.815930 | 71.543086 | 32.66 | 20.0 | 60.0 | 20.0 | 20.0 | 40.0 | 20.0 | 20.0 | 20.0 | 27.5 | 1.0 | 20.0 |
| 1 | 000660 | SK하이닉스 | 87.120100 | -23.647653 | 11.03 | 3.73 | 34.266572 | 68.399599 | 21.024013 | 44.14 | 40.0 | 20.0 | 60.0 | 100.0 | 20.0 | 40.0 | 40.0 | 60.0 | 47.5 | 2.0 | 40.0 |
| 0 | 005930 | 삼성전자 | 62.531321 | -40.739685 | 17.89 | 1.82 | 9.035030 | 64.997000 | 60.659103 | 10.78 | 60.0 | 80.0 | 80.0 | 60.0 | 60.0 | 60.0 | 60.0 | 40.0 | 62.5 | 3.0 | 60.0 |
| 2 | 005380 | 현대차 | 47.460463 | -42.627980 | 7.65 | 0.61 | 0.250849 | -33.180940 | -53.535829 | 8.36 | 80.0 | 100.0 | 40.0 | 40.0 | 80.0 | 100.0 | 80.0 | 80.0 | 75.0 | 4.0 | 80.0 |
| 3 | 373220 | LG에너지솔루션 | 0.277164 | -24.990839 | 1067.15 | 2.94 | 7.747504 | -292.917727 | -244.096251 | 0.27 | 100.0 | 40.0 | 100.0 | 80.0 | 100.0 | 80.0 | 100.0 | 100.0 | 87.5 | 5.0 | 100.0 |
5. 투자 유형별 데이터 변환 및 그룹 출력
3가지로 분류된 투자 유형별로 멀티팩터 종합 점수 데이터를 생성할 수 있습니다.
# 투자 유형에 따라 팩터 가중치를 조정한 데이터 변환
data_mast_v = mf.get_score_adj_weight(data_mast, weight='가치성장') # 가치성장 (밸류+퀄리티)
data_mast_t = mf.get_score_adj_weight(data_mast, weight='추세성장') # 추세성장 (모멘텀+퀄리티)
data_mast_c = mf.get_score_adj_weight(data_mast, weight='역발상') # 역발상 (모멘텀+밸류)
6. 종합점수별 그룹화 출력
Ngroup에 지정한 그룹수 만큼 종합점수에 따라 종목명을 분류하여 출력합니다. 종목명만 출력하기 때문에 분석 대상이 종목이 많은 경우 유용합니다.
mf.get_Ngroup(data_mast, Ngroup=2) # 상/하위 2개 그룹으로 분류
> 1 : SK스퀘어, SK하이닉스, 삼성전자
> 2 : 현대차, LG에너지솔루션
7. 개별 지표 데이터 수집
특정 팩터의 데이터만 개별적으로 추출할 수 있습니다.
# 개별 팩터 데이터 추출 (인자로 stock_list 딕셔너리 주입)
data_mom = mf.get_momentum(stock_list)
data_val = mf.get_value(stock_list)
data_fin = mf.get_quality(stock_list)
# 추출한 개별 팩터 데이터를 조합하여, 종합 점수 산정
data_mast_custom = mf.get_score_by_data(data_mom, data_val, data_fin)
8. 특정 종목 팩터 값 조회
개별 종목(예: 삼성전자 '005930')의 팩터 점수만 빠르게 확인하고 싶을 때 활용합니다.
mf.get_momentum_one('005930') # 삼성전자의 모멘텀 데이터 (주가모멘텀점수, 거래량모멘텀점수)
| scode | mom_price | mom_vol | |
|---|---|---|---|
| 0 | 005930 | 62.531321 | -40.739685 |
mf.get_value_one('005930') # 삼성전자의 밸류 (PER, PBR)
| scode | PER | PBR | |
|---|---|---|---|
| 0 | 005930 | 17.89 | 1.82 |
mf.get_quality_one('005930') # 삼성전자의 퀄리티 (매출증가율, 영업이익증가율, 순이익증가율, ROE)
| scode | revenue_rate | oper_income_rate | net_income_rate | ROE | |
|---|---|---|---|---|---|
| 0 | 005930 | 9.03503 | 64.997 | 60.659103 | 10.78 |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file multifactor-0.1.5.tar.gz.
File metadata
- Download URL: multifactor-0.1.5.tar.gz
- Upload date:
- Size: 13.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0993fd5378c74cd89a52b08243bbed6cff63f3189a329be8ccfb155ecc084d86
|
|
| MD5 |
9c21a86529d3511926fadc1e52a0276e
|
|
| BLAKE2b-256 |
e374b8c1cfc9068227a300707b7054c1b67b4301061d99756733bd4c9244adf1
|
File details
Details for the file multifactor-0.1.5-py3-none-any.whl.
File metadata
- Download URL: multifactor-0.1.5-py3-none-any.whl
- Upload date:
- Size: 15.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d90734337ae7913220ffeb424b0cf7280f4b83486f0af8935dc3fdacdf7b31b
|
|
| MD5 |
92eda287603277dc44e55c67e94ab5bb
|
|
| BLAKE2b-256 |
aaeb0de3ed0385f6bbe6a3f5fb0ce43fa0dd94501a89991be35d2afd7ed432e2
|