MultiFactor 0.2.6__tar.gz → 0.2.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {multifactor-0.2.6 → multifactor-0.2.8}/PKG-INFO +9 -9
- {multifactor-0.2.6 → multifactor-0.2.8}/README.md +8 -8
- {multifactor-0.2.6 → multifactor-0.2.8}/pyproject.toml +1 -1
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/us_stockinfo.py +28 -2
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor.egg-info/PKG-INFO +9 -9
- {multifactor-0.2.6 → multifactor-0.2.8}/setup.cfg +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/__init__.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/core.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/momentum.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/momentum_one.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/quality.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/quality_one.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/score.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/score_adj_weight.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/stockinfo.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/us_core.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/us_momentum.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/us_quality.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/us_value.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/value.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor/value_one.py +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor.egg-info/SOURCES.txt +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor.egg-info/dependency_links.txt +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor.egg-info/requires.txt +0 -0
- {multifactor-0.2.6 → multifactor-0.2.8}/src/MultiFactor.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MultiFactor
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: 멀티팩터 기반 주식 데이터 수집 패키지
|
|
5
5
|
Author-email: HANHO <hanhoman@gmail.com>
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -748,7 +748,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
748
748
|
df = mf_kr.get_score()
|
|
749
749
|
|
|
750
750
|
# 가치성장 전략 적용
|
|
751
|
-
df =
|
|
751
|
+
df = mf_kr.get_score_adj_weight(df, weight='가치성장')
|
|
752
752
|
|
|
753
753
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
754
754
|
```
|
|
@@ -810,7 +810,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
810
810
|
df = mf_us.get_score()
|
|
811
811
|
|
|
812
812
|
# 가치성장 전략 적용
|
|
813
|
-
df =
|
|
813
|
+
df = mf_us.get_score_adj_weight(df, weight='가치성장')
|
|
814
814
|
|
|
815
815
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
816
816
|
```
|
|
@@ -875,7 +875,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
875
875
|
df = mf_kr.get_score()
|
|
876
876
|
|
|
877
877
|
# 추세성장 전략 적용
|
|
878
|
-
df =
|
|
878
|
+
df = mf_kr.get_score_adj_weight(df, weight='추세성장')
|
|
879
879
|
|
|
880
880
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
881
881
|
```
|
|
@@ -938,7 +938,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
938
938
|
df = mf_us.get_score()
|
|
939
939
|
|
|
940
940
|
# 추세성장 전략 적용
|
|
941
|
-
df =
|
|
941
|
+
df = mf_us.get_score_adj_weight(df, weight='추세성장')
|
|
942
942
|
|
|
943
943
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
944
944
|
```
|
|
@@ -1003,7 +1003,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
1003
1003
|
df = mf_kr.get_score()
|
|
1004
1004
|
|
|
1005
1005
|
# 역발상 전략 적용
|
|
1006
|
-
df =
|
|
1006
|
+
df = mf_kr.get_score_adj_weight(df, weight='역발상')
|
|
1007
1007
|
|
|
1008
1008
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
1009
1009
|
```
|
|
@@ -1063,7 +1063,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
1063
1063
|
df = mf_us.get_score()
|
|
1064
1064
|
|
|
1065
1065
|
# 역발상 전략 적용
|
|
1066
|
-
df =
|
|
1066
|
+
df = mf_us.get_score_adj_weight(df, weight='역발상')
|
|
1067
1067
|
|
|
1068
1068
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
1069
1069
|
```
|
|
@@ -1128,7 +1128,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
1128
1128
|
df = mf_kr.get_score()
|
|
1129
1129
|
|
|
1130
1130
|
# 종합점수 상위 순 10개 그룹으로 분류
|
|
1131
|
-
|
|
1131
|
+
mf_kr.get_Ngroup(df, Ngroup=10)
|
|
1132
1132
|
|
|
1133
1133
|
# [출력 결과]
|
|
1134
1134
|
# 1 : SK스퀘어, SK하이닉스, 삼성E&A, HD현대, 에이피알, 한국금융지주, 삼성전자, LG이노텍, 키움증권, LS ELECTRIC
|
|
@@ -1151,7 +1151,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
1151
1151
|
df = mf_us.get_score()
|
|
1152
1152
|
|
|
1153
1153
|
# 종합점수 상위 순 10개 그룹으로 분류
|
|
1154
|
-
|
|
1154
|
+
mf_us.get_Ngroup(df, Ngroup=10)
|
|
1155
1155
|
|
|
1156
1156
|
# [출력 결과]
|
|
1157
1157
|
#1 : Micron Technology, Morgan Stanley, Goldman Sachs, BlackRock, Citigroup, Nvidia, AppLovin, Microsoft, Dell Technologies, Charles Schwab Corporation
|
|
@@ -731,7 +731,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
731
731
|
df = mf_kr.get_score()
|
|
732
732
|
|
|
733
733
|
# 가치성장 전략 적용
|
|
734
|
-
df =
|
|
734
|
+
df = mf_kr.get_score_adj_weight(df, weight='가치성장')
|
|
735
735
|
|
|
736
736
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
737
737
|
```
|
|
@@ -793,7 +793,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
793
793
|
df = mf_us.get_score()
|
|
794
794
|
|
|
795
795
|
# 가치성장 전략 적용
|
|
796
|
-
df =
|
|
796
|
+
df = mf_us.get_score_adj_weight(df, weight='가치성장')
|
|
797
797
|
|
|
798
798
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
799
799
|
```
|
|
@@ -858,7 +858,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
858
858
|
df = mf_kr.get_score()
|
|
859
859
|
|
|
860
860
|
# 추세성장 전략 적용
|
|
861
|
-
df =
|
|
861
|
+
df = mf_kr.get_score_adj_weight(df, weight='추세성장')
|
|
862
862
|
|
|
863
863
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
864
864
|
```
|
|
@@ -921,7 +921,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
921
921
|
df = mf_us.get_score()
|
|
922
922
|
|
|
923
923
|
# 추세성장 전략 적용
|
|
924
|
-
df =
|
|
924
|
+
df = mf_us.get_score_adj_weight(df, weight='추세성장')
|
|
925
925
|
|
|
926
926
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
927
927
|
```
|
|
@@ -986,7 +986,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
986
986
|
df = mf_kr.get_score()
|
|
987
987
|
|
|
988
988
|
# 역발상 전략 적용
|
|
989
|
-
df =
|
|
989
|
+
df = mf_kr.get_score_adj_weight(df, weight='역발상')
|
|
990
990
|
|
|
991
991
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
992
992
|
```
|
|
@@ -1046,7 +1046,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
1046
1046
|
df = mf_us.get_score()
|
|
1047
1047
|
|
|
1048
1048
|
# 역발상 전략 적용
|
|
1049
|
-
df =
|
|
1049
|
+
df = mf_us.get_score_adj_weight(df, weight='역발상')
|
|
1050
1050
|
|
|
1051
1051
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
1052
1052
|
```
|
|
@@ -1111,7 +1111,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
1111
1111
|
df = mf_kr.get_score()
|
|
1112
1112
|
|
|
1113
1113
|
# 종합점수 상위 순 10개 그룹으로 분류
|
|
1114
|
-
|
|
1114
|
+
mf_kr.get_Ngroup(df, Ngroup=10)
|
|
1115
1115
|
|
|
1116
1116
|
# [출력 결과]
|
|
1117
1117
|
# 1 : SK스퀘어, SK하이닉스, 삼성E&A, HD현대, 에이피알, 한국금융지주, 삼성전자, LG이노텍, 키움증권, LS ELECTRIC
|
|
@@ -1134,7 +1134,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
1134
1134
|
df = mf_us.get_score()
|
|
1135
1135
|
|
|
1136
1136
|
# 종합점수 상위 순 10개 그룹으로 분류
|
|
1137
|
-
|
|
1137
|
+
mf_us.get_Ngroup(df, Ngroup=10)
|
|
1138
1138
|
|
|
1139
1139
|
# [출력 결과]
|
|
1140
1140
|
#1 : Micron Technology, Morgan Stanley, Goldman Sachs, BlackRock, Citigroup, Nvidia, AppLovin, Microsoft, Dell Technologies, Charles Schwab Corporation
|
|
@@ -3,6 +3,30 @@ import FinanceDataReader as fdr
|
|
|
3
3
|
import pandas as pd
|
|
4
4
|
import numpy as np
|
|
5
5
|
|
|
6
|
+
def clean_us_symbol(symbol):
|
|
7
|
+
"""
|
|
8
|
+
미국 주식 심볼 표준화 (yfinance 호환 및 데이터 병합 일관성을 위해)
|
|
9
|
+
예: BRK.B, BRK/B, BRKB -> BRK-B
|
|
10
|
+
BF.B, BF/B, BFB -> BF-B
|
|
11
|
+
"""
|
|
12
|
+
if not isinstance(symbol, str):
|
|
13
|
+
return symbol
|
|
14
|
+
symbol = symbol.strip().upper()
|
|
15
|
+
symbol = symbol.replace('/', '-').replace('.', '-')
|
|
16
|
+
|
|
17
|
+
# yfinance에서 하이픈(-) 구분자를 사용하는 대표적인 클래스 주식의 루트 심볼 목록
|
|
18
|
+
# 구분자 없이 붙어있는 경우(예: BRKB, BFB)만 선별적으로 변환하여
|
|
19
|
+
# ALB(알베말), APA(APA Corp), BA(보잉), FOXA(폭스), NWSA(뉴스콥) 등의 오탐지를 방지합니다.
|
|
20
|
+
hyphen_roots = {'BRK', 'BF', 'LEN', 'STZ', 'HEI', 'JW', 'MOG'}
|
|
21
|
+
|
|
22
|
+
for root in hyphen_roots:
|
|
23
|
+
if symbol == f"{root}A":
|
|
24
|
+
return f"{root}-A"
|
|
25
|
+
elif symbol == f"{root}B":
|
|
26
|
+
return f"{root}-B"
|
|
27
|
+
|
|
28
|
+
return symbol
|
|
29
|
+
|
|
6
30
|
def get_us_stockinfo(N=500):
|
|
7
31
|
"""
|
|
8
32
|
미국 종목정보 추출 (GitHub 시가총액 데이터 + FDR 상세정보 병합)
|
|
@@ -12,6 +36,7 @@ def get_us_stockinfo(N=500):
|
|
|
12
36
|
try:
|
|
13
37
|
# 1. GitHub에서 최신 S&P 500 데이터 로드 (시가총액 등 순위용)
|
|
14
38
|
df = pd.read_csv(url)
|
|
39
|
+
df['symbol'] = df['symbol'].astype(str).apply(clean_us_symbol)
|
|
15
40
|
|
|
16
41
|
# 2. FDR에서 KR/US 전체 상장 종목 정보 로드 (명칭 일관성 유지)
|
|
17
42
|
df_sp500 = fdr.StockListing('S&P500')
|
|
@@ -20,6 +45,7 @@ def get_us_stockinfo(N=500):
|
|
|
20
45
|
|
|
21
46
|
# 3. FDR 데이터 병합 및 중복 제거
|
|
22
47
|
fdr_stocks = pd.concat([df_sp500, df_nasdaq, df_nyse])
|
|
48
|
+
fdr_stocks['Symbol'] = fdr_stocks['Symbol'].astype(str).apply(clean_us_symbol)
|
|
23
49
|
fdr_stocks = fdr_stocks.drop_duplicates(subset='Symbol')
|
|
24
50
|
|
|
25
51
|
# 4. Symbol 기준으로 조인하여 FDR의 Name을 사용
|
|
@@ -56,9 +82,9 @@ def get_us_stockinfo(N=500):
|
|
|
56
82
|
if 'Symbol' in df.columns:
|
|
57
83
|
df = df.rename(columns={'Symbol': 'Code'})
|
|
58
84
|
|
|
59
|
-
# 7. 종목코드 클렌징 (yfinance 호환을 위해
|
|
85
|
+
# 7. 종목코드 클렌징 (yfinance 호환을 위해 표준화 적용)
|
|
60
86
|
if 'Code' in df.columns:
|
|
61
|
-
df['Code'] = df['Code'].str.
|
|
87
|
+
df['Code'] = df['Code'].astype(str).apply(clean_us_symbol)
|
|
62
88
|
|
|
63
89
|
# 8. 상위 N개 추출 및 인덱스 초기화
|
|
64
90
|
df = df.head(N).reset_index(drop=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MultiFactor
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.8
|
|
4
4
|
Summary: 멀티팩터 기반 주식 데이터 수집 패키지
|
|
5
5
|
Author-email: HANHO <hanhoman@gmail.com>
|
|
6
6
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -748,7 +748,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
748
748
|
df = mf_kr.get_score()
|
|
749
749
|
|
|
750
750
|
# 가치성장 전략 적용
|
|
751
|
-
df =
|
|
751
|
+
df = mf_kr.get_score_adj_weight(df, weight='가치성장')
|
|
752
752
|
|
|
753
753
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
754
754
|
```
|
|
@@ -810,7 +810,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
810
810
|
df = mf_us.get_score()
|
|
811
811
|
|
|
812
812
|
# 가치성장 전략 적용
|
|
813
|
-
df =
|
|
813
|
+
df = mf_us.get_score_adj_weight(df, weight='가치성장')
|
|
814
814
|
|
|
815
815
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
816
816
|
```
|
|
@@ -875,7 +875,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
875
875
|
df = mf_kr.get_score()
|
|
876
876
|
|
|
877
877
|
# 추세성장 전략 적용
|
|
878
|
-
df =
|
|
878
|
+
df = mf_kr.get_score_adj_weight(df, weight='추세성장')
|
|
879
879
|
|
|
880
880
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
881
881
|
```
|
|
@@ -938,7 +938,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
938
938
|
df = mf_us.get_score()
|
|
939
939
|
|
|
940
940
|
# 추세성장 전략 적용
|
|
941
|
-
df =
|
|
941
|
+
df = mf_us.get_score_adj_weight(df, weight='추세성장')
|
|
942
942
|
|
|
943
943
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
944
944
|
```
|
|
@@ -1003,7 +1003,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
1003
1003
|
df = mf_kr.get_score()
|
|
1004
1004
|
|
|
1005
1005
|
# 역발상 전략 적용
|
|
1006
|
-
df =
|
|
1006
|
+
df = mf_kr.get_score_adj_weight(df, weight='역발상')
|
|
1007
1007
|
|
|
1008
1008
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
1009
1009
|
```
|
|
@@ -1063,7 +1063,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
1063
1063
|
df = mf_us.get_score()
|
|
1064
1064
|
|
|
1065
1065
|
# 역발상 전략 적용
|
|
1066
|
-
df =
|
|
1066
|
+
df = mf_us.get_score_adj_weight(df, weight='역발상')
|
|
1067
1067
|
|
|
1068
1068
|
df[['scode', 'sname', '종합점수', '종합순위']].head()
|
|
1069
1069
|
```
|
|
@@ -1128,7 +1128,7 @@ mf_kr = MultiFactorKR(N=100)
|
|
|
1128
1128
|
df = mf_kr.get_score()
|
|
1129
1129
|
|
|
1130
1130
|
# 종합점수 상위 순 10개 그룹으로 분류
|
|
1131
|
-
|
|
1131
|
+
mf_kr.get_Ngroup(df, Ngroup=10)
|
|
1132
1132
|
|
|
1133
1133
|
# [출력 결과]
|
|
1134
1134
|
# 1 : SK스퀘어, SK하이닉스, 삼성E&A, HD현대, 에이피알, 한국금융지주, 삼성전자, LG이노텍, 키움증권, LS ELECTRIC
|
|
@@ -1151,7 +1151,7 @@ mf_us = MultiFactorUS(N=100)
|
|
|
1151
1151
|
df = mf_us.get_score()
|
|
1152
1152
|
|
|
1153
1153
|
# 종합점수 상위 순 10개 그룹으로 분류
|
|
1154
|
-
|
|
1154
|
+
mf_us.get_Ngroup(df, Ngroup=10)
|
|
1155
1155
|
|
|
1156
1156
|
# [출력 결과]
|
|
1157
1157
|
#1 : Micron Technology, Morgan Stanley, Goldman Sachs, BlackRock, Citigroup, Nvidia, AppLovin, Microsoft, Dell Technologies, Charles Schwab Corporation
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|