MultiFactor 0.2.5__tar.gz → 0.2.6__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.
Files changed (25) hide show
  1. {multifactor-0.2.5 → multifactor-0.2.6}/PKG-INFO +575 -158
  2. {multifactor-0.2.5 → multifactor-0.2.6}/README.md +574 -157
  3. {multifactor-0.2.5 → multifactor-0.2.6}/pyproject.toml +1 -1
  4. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor.egg-info/PKG-INFO +575 -158
  5. {multifactor-0.2.5 → multifactor-0.2.6}/setup.cfg +0 -0
  6. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/__init__.py +0 -0
  7. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/core.py +0 -0
  8. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/momentum.py +0 -0
  9. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/momentum_one.py +0 -0
  10. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/quality.py +0 -0
  11. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/quality_one.py +0 -0
  12. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/score.py +0 -0
  13. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/score_adj_weight.py +0 -0
  14. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/stockinfo.py +0 -0
  15. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/us_core.py +0 -0
  16. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/us_momentum.py +0 -0
  17. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/us_quality.py +0 -0
  18. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/us_stockinfo.py +0 -0
  19. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/us_value.py +0 -0
  20. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/value.py +0 -0
  21. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor/value_one.py +0 -0
  22. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor.egg-info/SOURCES.txt +0 -0
  23. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor.egg-info/dependency_links.txt +0 -0
  24. {multifactor-0.2.5 → multifactor-0.2.6}/src/MultiFactor.egg-info/requires.txt +0 -0
  25. {multifactor-0.2.5 → multifactor-0.2.6}/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.5
3
+ Version: 0.2.6
4
4
  Summary: 멀티팩터 기반 주식 데이터 수집 패키지
5
5
  Author-email: HANHO <hanhoman@gmail.com>
6
6
  Classifier: Programming Language :: Python :: 3
@@ -17,8 +17,8 @@ Requires-Dist: yfinance
17
17
 
18
18
  # MultiFactor 📈
19
19
 
20
- **MultiFactor**는 국내상장주식(코스피/코스닥)을 대상으로 멀티팩터(Multi-Factor) 전략을 손쉽게 적용하고, 팩터별 점수 및 종합 순위를 산출해 주는 파이썬 패키지입니다.
21
- 종목별 주가와 재무 데이터 수집은 `FinanceDataReader`를 기반으로 구동됩니다.
20
+ **MultiFactor**는 국내상장주식(코스피/코스닥)뿐만 아니라 미국주식(NYSE, NASDAQ)을 대상으로 멀티팩터(Multi-Factor) 전략을 손쉽게 적용하고, 팩터별 점수 및 종합 순위를 산출해 주는 파이썬 패키지입니다.
21
+ 종목별 주가와 재무 데이터 수집은 FinanceDataReader yfinance를 기반으로 구동됩니다.
22
22
 
23
23
  <br>
24
24
 
@@ -36,15 +36,14 @@ Requires-Dist: yfinance
36
36
  <br>
37
37
 
38
38
  ## ✨ 주요 기능
39
- * **국내 주식 멀티팩터 데이터 제공:** 가치, 모멘텀, 퀄리티 지표 및 이를 합산한 종합 점수 산출
39
+ * **국내 및 미국 주식 멀티팩터 데이터 제공:** 가치, 모멘텀, 퀄리티 지표 및 이를 합산한 종합 점수 산출
40
40
 
41
41
  | 구분 | 주요 기능 | 함수명 |
42
42
  | -------- | -------- | -------- |
43
- | 종목 정보 수집 | 시가총액 기준 상위 종목들의 기본 정보(종목코드, 종목명, 시가총액, 업종, 최근 종가 등)를 수집합니다. | get_stockinfo() |
43
+ | 종목 정보 수집 | 지정한 시장(KR/US)의 시가총액 기준 상위 종목들의 기본 정보(종목코드, 종목명, 시가총액, 업종, 최근 종가 등)를 수집합니다. | get_stockinfo() |
44
44
  | 멀티팩터 종합점수 | 종목별 멀티팩터 세부 지표 점수와 종합 점수, 그리고 전체 순위를 산출합니다. | get_score() |
45
45
  | 투자스타일별 종합점수 | 3가지 투자 스타일(안정추구, 추세성장, 역발상 등)에 맞춰 가중치가 조정된 멀티팩터 종합 점수를 제공합니다. | get_score_adj_weight() |
46
46
  | 종합점수 그룹화 | 산출된 종합 점수를 바탕으로 전체 종목을 N개의 그룹으로 분류하고, 그룹별 종목명을 출력합니다.| get_Ngroup() |
47
- | 특정 종목 팩터 조회 | 단일 종목에 대한 개별 팩터(모멘텀, 밸류, 퀄리티) 값을 빠르게 조회합니다. | get_momentum_one() <br> get_value_one() <br> get_quality_one() |
48
47
 
49
48
 
50
49
  * **투자 유형별 가중치 조절한 멀티팩터 데이터 제공 :** 투자 스타일에 맞춘 3가지 모델 제공
@@ -73,28 +72,35 @@ Requires-Dist: yfinance
73
72
  ### 1. 패키지 불러오기
74
73
  다음 코드로 멀티팩터 패키지를 불러옵니다.
75
74
  ```python
76
- from MultiFactor import MultiFactorKR
75
+ # 국내주식
76
+ from MultiFactor import MultiFactorKR
77
+
78
+ # 미국주식
79
+ from MultiFactor import MultiFactorUS
77
80
  ```
78
81
 
79
82
  <br>
80
83
 
81
84
  ### 2. 멀티팩터 객체 생성
82
- 멀티팩터 객체 생성 시, 수집 대상 종목 수(N)를 반드시 지정해야 합니다. N은 시가총액 상위 순으로 N개까지 종목을 수집함을 의미합니다. N이 커질수록 데이터 수집 시간이 길어지므로, 초기 테스트에는 종목수(N)를 5~50 사이로 지정한 후 차츰 늘려가기를 권장합니다.
85
+ 멀티팩터 객체 생성 수집 대상 종목 수(`N`)를 지정합니다. N이 커질수록 데이터 수집 시간이 길어지므로, 초기 테스트에는 5~50 사이로 지정한 후 차츰 늘려가기를 권장합니다.
83
86
  ```python
84
- mf = MultiFactorKR(N=50) # 시가총액 상위 50개 종목
87
+ # 국내 시가총액 상위 50개 종목
88
+ mf_kr = MultiFactorKR(N=50)
89
+
90
+ # 미국 시가총액 상위 50개 종목
91
+ mf_us = MultiFactorUS(N=50)
85
92
  ```
86
93
  <br>
87
94
 
88
95
  ### 3. 종목 정보 수집
89
- 멀티팩터 객체에서 지정한 종목수(N) 만큼 종목 정보 데이터를 생성합니다. 반환되는 데이터 형식은 데이터프레임(기본값) 또는 딕셔너리로 지정할 수 있습니다.
96
+ 멀티팩터 객체에서 지정한 종목수(N) 만큼 종목 정보 데이터를 생성합니다.
90
97
 
98
+ (1) 국내주식
91
99
  ```python
92
- # 종목 코드 정보 생성 (데이터프레임)
93
- df = mf.get_stockinfo()
94
-
95
- # 종목코드, 종목명, 시가총액 출력 (최초 5건)
100
+ df = mf_kr.get_stockinfo()
96
101
  df[['Code', 'Name', 'Marcap']].head()
97
102
  ```
103
+
98
104
  <table border="1" class="dataframe">
99
105
  <thead>
100
106
  <tr style="text-align: right;">
@@ -139,41 +145,82 @@ df[['Code', 'Name', 'Marcap']].head()
139
145
  </table>
140
146
 
141
147
 
148
+ 2. 미국 주식
142
149
  ```python
143
- # 종목 코드 정보 생성 (딕셔너리)
144
- stock_list = mf.get_stockinfo(dtype='dic') # {'종목코드': '종목명'}
145
- print(stock_list)
150
+ df = mf_us.get_stockinfo()
151
+ df[['Code', 'Name', 'MarketCap']].head()
152
+ ```
146
153
 
147
- # {'005930': '삼성전자', '000660': 'SK하이닉스', '005380': '현대차', ... }
148
- ```
154
+ <table border="1" class="dataframe">
155
+ <thead>
156
+ <tr style="text-align: right;">
157
+ <th></th>
158
+ <th>Code</th>
159
+ <th>Name</th>
160
+ <th>MarketCap</th>
161
+ </tr>
162
+ </thead>
163
+ <tbody>
164
+ <tr>
165
+ <th>0</th>
166
+ <td>NVDA</td>
167
+ <td>NVIDIA</td>
168
+ <td>4819905000000</td>
169
+ </tr>
170
+ <tr>
171
+ <th>1</th>
172
+ <td>GOOGL</td>
173
+ <td>Alphabet Inc. (Class A) Communication</td>
174
+ <td>4064833940000</td>
175
+ </tr>
176
+ <tr>
177
+ <th>2</th>
178
+ <td>GOOG</td>
179
+ <td>Alphabet Inc. (Class C) Communication</td>
180
+ <td>4025518690000</td>
181
+ </tr>
182
+ <tr>
183
+ <th>3</th>
184
+ <td>AAPL</td>
185
+ <td>Apple Inc.</td>
186
+ <td>3867012276000</td>
187
+ </tr>
188
+ <tr>
189
+ <th>4</th>
190
+ <td>MSFT</td>
191
+ <td>Microsoft</td>
192
+ <td>3120694875480</td>
193
+ </tr>
194
+ </tbody>
195
+ </table>
149
196
 
150
- <br>
151
197
 
198
+ <br>
152
199
 
153
- ### 4.멀티팩터 종합 점수 데이터 수집
154
- ```get_score```함수로 멀티팩터 종합점수 데이터를 간단하게 생성할 수 있습니다. 다음 코드는 시가총액 상위 10개 종목의 종합 점수를 추출하여 파이썬 데이터프레임(df)에 저장합니다.
155
200
 
156
- ```python
157
- from MultiFactor import MultiFactorKR
158
- mf = MultiFactorKR(N=10)
159
- df = mf.get_score()
160
- ```
201
+ ### 4. 멀티팩터 종합 점수 데이터 수집
202
+ `get_score` 함수로 멀티팩터 종합점수 데이터를 간단하게 생성할 수 있습니다. 동일한 함수로 한국과 미국 시장 모두 분석이 가능합니다.
161
203
 
162
- 이 데이터프레임 안에는 분석에 필요한 총 23개의 컬럼(열)이 담겨 있습니다. 컬럼은 크게 4개 유형을 구분할 수 있습니다.
204
+ 이 데이터프레임 안에는 분석에 필요한 총 23개의 컬럼(열)이 담겨 있습니다. 컬럼은 크게 4개 유형으로 구분됩니다.
163
205
 
164
- - 종목정보 : 종목코드, 종목명
206
+ - 종목정보 : 종목코드(티커), 종목명
165
207
  - 종합지표 원본 : 모멘텀 주가, 모멘텀 거래량, PER, PBR, 매출 증가율, 영업이익 증가율, 순이익 증가율, ROE
166
- - 종합지표 순위 :종합 지표 원본 데이터를 추출된 N개 종목 내에서의 상대 순위로 환산한 값
208
+ - 종합지표 순위 : 종합 지표 원본 데이터를 추출된 N개 종목 내에서의 상대 순위로 환산한 값
167
209
  - 종합점수/순위 : 종합 지표 순위들의 평균값 및 이를 바탕으로 매긴 최종 순위
168
210
 
211
+ <br>
169
212
 
170
213
  <b>① 종합지표 원본 추출 예시</b>
171
214
 
172
- 종합지표 원본 데이터를 출력하여 결과를 해석합니다.
215
+ (1) 국내주식
173
216
 
174
217
  ```python
218
+ mf_kr = MultiFactorKR(N=10)
219
+ df = mf_kr.get_score()
220
+
175
221
  cols = ['scode', 'sname', 'mom_price', 'mom_vol', 'PER', 'PBR',
176
222
  'revenue_rate', 'oper_income_rate', 'net_income_rate', 'ROE']
223
+
177
224
  df[cols].head()
178
225
  ```
179
226
 
@@ -263,12 +310,114 @@ df[cols].head()
263
310
  </table>
264
311
 
265
312
 
266
-
267
- <b>② 종합지표 순위 추출 예시</b>
313
+ (2) 미국주식
268
314
 
269
315
  ```python
316
+ mf_us = MultiFactorUS(N=10)
317
+ df = mf_us.get_score()
318
+
319
+ cols = ['scode', 'sname', 'mom_price', 'mom_vol', 'PER', 'PBR',
320
+ 'revenue_rate', 'oper_income_rate', 'net_income_rate', 'ROE']
321
+
322
+ df[cols].head()
323
+ ```
324
+ <table border="1" class="dataframe">
325
+ <thead>
326
+ <tr style="text-align: right;">
327
+ <th></th>
328
+ <th>scode</th>
329
+ <th>sname</th>
330
+ <th>mom_price</th>
331
+ <th>mom_vol</th>
332
+ <th>PER</th>
333
+ <th>PBR</th>
334
+ <th>revenue_rate</th>
335
+ <th>oper_income_rate</th>
336
+ <th>net_income_rate</th>
337
+ <th>ROE</th>
338
+ </tr>
339
+ </thead>
340
+ <tbody>
341
+ <tr>
342
+ <th>0</th>
343
+ <td>MSFT</td>
344
+ <td>Microsoft</td>
345
+ <td>7</td>
346
+ <td>17</td>
347
+ <td>26</td>
348
+ <td>8</td>
349
+ <td>17</td>
350
+ <td>0</td>
351
+ <td>60</td>
352
+ <td>34</td>
353
+ </tr>
354
+ <tr>
355
+ <th>1</th>
356
+ <td>NVDA</td>
357
+ <td>Nvidia</td>
358
+ <td>28</td>
359
+ <td>-6</td>
360
+ <td>41</td>
361
+ <td>31</td>
362
+ <td>73</td>
363
+ <td>1</td>
364
+ <td>96</td>
365
+ <td>101</td>
366
+ </tr>
367
+ <tr>
368
+ <th>2</th>
369
+ <td>AVGO</td>
370
+ <td>Broadcom</td>
371
+ <td>42</td>
372
+ <td>-4</td>
373
+ <td>79</td>
374
+ <td>24</td>
375
+ <td>30</td>
376
+ <td>0</td>
377
+ <td>32</td>
378
+ <td>33</td>
379
+ </tr>
380
+ <tr>
381
+ <th>3</th>
382
+ <td>GOOGL</td>
383
+ <td>Alphabet Inc. (Class A)</td>
384
+ <td>31</td>
385
+ <td>-20</td>
386
+ <td>32</td>
387
+ <td>10</td>
388
+ <td>18</td>
389
+ <td>0</td>
390
+ <td>31</td>
391
+ <td>36</td>
392
+ </tr>
393
+ <tr>
394
+ <th>4</th>
395
+ <td>GOOG</td>
396
+ <td>Alphabet Inc. (Class C)</td>
397
+ <td>30</td>
398
+ <td>-22</td>
399
+ <td>31</td>
400
+ <td>10</td>
401
+ <td>18</td>
402
+ <td>0</td>
403
+ <td>31</td>
404
+ <td>36</td>
405
+ </tr>
406
+ </tbody>
407
+ </table>
408
+
409
+ <br>
410
+
411
+ <b>② 종합지표 순위 예시</b>
412
+
413
+ (1) 국내주식
414
+ ```python
415
+ mf_kr = MultiFactorKR(N=10)
416
+ df = mf_kr.get_score()
417
+
270
418
  cols = ['scode', 'sname', '모멘텀_주가', '모멘텀_거래량', '밸류_PER', '밸류_PBR',
271
419
  '퀄리티_ROE', '퀄리티_매출증가', '퀄리티_영업이익증가', '퀄리티_순이익증가']
420
+
272
421
  df[cols].head()
273
422
  ```
274
423
  <table border="1" class="dataframe">
@@ -357,10 +506,111 @@ df[cols].head()
357
506
  </table>
358
507
 
359
508
 
509
+ (2) 미국주식
510
+ ```python
511
+ mf_us = MultiFactorUS(N=10)
512
+ df = mf_us.get_score()
513
+
514
+ cols = ['scode', 'sname', '모멘텀_주가', '모멘텀_거래량', '밸류_PER', '밸류_PBR',
515
+ '퀄리티_ROE', '퀄리티_매출증가', '퀄리티_영업이익증가', '퀄리티_순이익증가']
516
+
517
+ df[cols].head()
518
+ ```
519
+ <table border="1" class="dataframe">
520
+ <thead>
521
+ <tr style="text-align: right;">
522
+ <th></th>
523
+ <th>scode</th>
524
+ <th>sname</th>
525
+ <th>모멘텀_주가</th>
526
+ <th>모멘텀_거래량</th>
527
+ <th>밸류_PER</th>
528
+ <th>밸류_PBR</th>
529
+ <th>퀄리티_ROE</th>
530
+ <th>퀄리티_매출증가</th>
531
+ <th>퀄리티_영업이익증가</th>
532
+ <th>퀄리티_순이익증가</th>
533
+ </tr>
534
+ </thead>
535
+ <tbody>
536
+ <tr>
537
+ <th>0</th>
538
+ <td>MSFT</td>
539
+ <td>Microsoft</td>
540
+ <td>90</td>
541
+ <td>10</td>
542
+ <td>20</td>
543
+ <td>40</td>
544
+ <td>50</td>
545
+ <td>60</td>
546
+ <td>20</td>
547
+ <td>20</td>
548
+ </tr>
549
+ <tr>
550
+ <th>1</th>
551
+ <td>NVDA</td>
552
+ <td>Nvidia</td>
553
+ <td>40</td>
554
+ <td>70</td>
555
+ <td>80</td>
556
+ <td>90</td>
557
+ <td>20</td>
558
+ <td>10</td>
559
+ <td>10</td>
560
+ <td>10</td>
561
+ </tr>
562
+ <tr>
563
+ <th>2</th>
564
+ <td>AVGO</td>
565
+ <td>Broadcom</td>
566
+ <td>10</td>
567
+ <td>60</td>
568
+ <td>90</td>
569
+ <td>80</td>
570
+ <td>60</td>
571
+ <td>20</td>
572
+ <td>30</td>
573
+ <td>30</td>
574
+ </tr>
575
+ <tr>
576
+ <th>3</th>
577
+ <td>GOOGL</td>
578
+ <td>Alphabet Inc. (Class A)</td>
579
+ <td>20</td>
580
+ <td>80</td>
581
+ <td>50</td>
582
+ <td>60</td>
583
+ <td>35</td>
584
+ <td>45</td>
585
+ <td>75</td>
586
+ <td>45</td>
587
+ </tr>
588
+ <tr>
589
+ <th>4</th>
590
+ <td>GOOG</td>
591
+ <td>Alphabet Inc. (Class C)</td>
592
+ <td>30</td>
593
+ <td>90</td>
594
+ <td>40</td>
595
+ <td>50</td>
596
+ <td>35</td>
597
+ <td>45</td>
598
+ <td>75</td>
599
+ <td>45</td>
600
+ </tr>
601
+ </tbody>
602
+ </table>
603
+
604
+ <br>
360
605
 
361
606
  <b>③ 종합점수/순위 추출 예시</b>
362
607
 
608
+ (1) 국내주식
609
+
363
610
  ```python
611
+ mf_kr = MultiFactorKR(N=10)
612
+ df = mf_kr.get_score()
613
+
364
614
  cols = ['scode', 'sname', '종합점수', '종합순위', '종합순위_퍼센트']
365
615
  df[cols].head()
366
616
  ```
@@ -420,25 +670,89 @@ df[cols].head()
420
670
  </table>
421
671
 
422
672
 
423
- <br>
673
+ (2) 미국주식
674
+ ```python
675
+ mf_us = MultiFactorUS(N=10)
676
+ df = mf_us.get_score()
424
677
 
425
- ### 5. 투자 스타일별 종합점수 출력
678
+ cols = ['scode', 'sname', '종합점수', '종합순위', '종합순위_퍼센트']
679
+ df[cols].head()
680
+ ```
681
+ <table border="1" class="dataframe">
682
+ <thead>
683
+ <tr style="text-align: right;">
684
+ <th></th>
685
+ <th>scode</th>
686
+ <th>sname</th>
687
+ <th>종합점수</th>
688
+ <th>종합순위</th>
689
+ <th>종합순위_퍼센트</th>
690
+ </tr>
691
+ </thead>
692
+ <tbody>
693
+ <tr>
694
+ <th>0</th>
695
+ <td>MSFT</td>
696
+ <td>Microsoft</td>
697
+ <td>39</td>
698
+ <td>1</td>
699
+ <td>10</td>
700
+ </tr>
701
+ <tr>
702
+ <th>1</th>
703
+ <td>NVDA</td>
704
+ <td>Nvidia</td>
705
+ <td>41</td>
706
+ <td>2</td>
707
+ <td>20</td>
708
+ </tr>
709
+ <tr>
710
+ <th>2</th>
711
+ <td>AVGO</td>
712
+ <td>Broadcom</td>
713
+ <td>48</td>
714
+ <td>3</td>
715
+ <td>30</td>
716
+ </tr>
717
+ <tr>
718
+ <th>3</th>
719
+ <td>GOOGL</td>
720
+ <td>Alphabet Inc. (Class A)</td>
721
+ <td>51</td>
722
+ <td>4</td>
723
+ <td>45</td>
724
+ </tr>
725
+ <tr>
726
+ <th>4</th>
727
+ <td>GOOG</td>
728
+ <td>Alphabet Inc. (Class C)</td>
729
+ <td>51</td>
730
+ <td>4</td>
731
+ <td>45</td>
732
+ </tr>
733
+ </tbody>
734
+ </table>
426
735
 
427
- 3가지로 분류된 투자 유형별로 멀티팩터 종합 점수 데이터를 생성할 수 있습니다.
736
+ <br>
428
737
 
429
- ```python
430
- # 시가총액 상위 100 종목 멀티팩터 종합점수 추출
431
- mf = MultiFactorKR(N=100)
432
- df = mf.get_score()
433
- ```
738
+ ### 5. 투자 스타일별 종합점수 출력
434
739
 
740
+ 3가지로 분류된 투자 유형별로 가중치를 조절한 멀티팩터 점수를 산출합니다. 국내와 미국 시장 모두 동일하게 적용 가능합니다.
435
741
 
436
- 가치 성장 전략 : 밸류 + 퀄리티 조합
742
+ <b>① 가치 성장 전략 : 밸류 + 퀄리티 조합</b>
437
743
 
744
+ (1) 국내주식
438
745
  ```python
746
+ # 시가총액 상위 100종목
747
+ mf_kr = MultiFactorKR(N=100)
748
+ df = mf_kr.get_score()
749
+
750
+ # 가치성장 전략 적용
439
751
  df = mf.get_score_adj_weight(df, weight='가치성장')
752
+
440
753
  df[['scode', 'sname', '종합점수', '종합순위']].head()
441
754
  ```
755
+
442
756
  <table border="1" class="dataframe">
443
757
  <thead>
444
758
  <tr style="text-align: right;">
@@ -489,12 +803,83 @@ df[['scode', 'sname', '종합점수', '종합순위']].head()
489
803
  </table>
490
804
 
491
805
 
492
- 추세 성장 전략 : 모멘텀 + 퀄리티 조합
806
+ (2) 미국주식
807
+ ```python
808
+ # 시가총액 상위 100종목
809
+ mf_us = MultiFactorUS(N=100)
810
+ df = mf_us.get_score()
811
+
812
+ # 가치성장 전략 적용
813
+ df = mf.get_score_adj_weight(df, weight='가치성장')
814
+
815
+ df[['scode', 'sname', '종합점수', '종합순위']].head()
816
+ ```
817
+ <table border="1" class="dataframe">
818
+ <thead>
819
+ <tr style="text-align: right;">
820
+ <th></th>
821
+ <th>scode</th>
822
+ <th>sname</th>
823
+ <th>종합점수</th>
824
+ <th>종합순위</th>
825
+ </tr>
826
+ </thead>
827
+ <tbody>
828
+ <tr>
829
+ <th>0</th>
830
+ <td>MU</td>
831
+ <td>Micron Technology</td>
832
+ <td>19</td>
833
+ <td>1</td>
834
+ </tr>
835
+ <tr>
836
+ <th>1</th>
837
+ <td>MS</td>
838
+ <td>Morgan Stanley</td>
839
+ <td>30</td>
840
+ <td>2</td>
841
+ </tr>
842
+ <tr>
843
+ <th>2</th>
844
+ <td>BLK</td>
845
+ <td>BlackRock</td>
846
+ <td>30</td>
847
+ <td>3</td>
848
+ </tr>
849
+ <tr>
850
+ <th>3</th>
851
+ <td>NVDA</td>
852
+ <td>Nvidia</td>
853
+ <td>32</td>
854
+ <td>4</td>
855
+ </tr>
856
+ <tr>
857
+ <th>4</th>
858
+ <td>SCHW</td>
859
+ <td>Charles Schwab Corporation</td>
860
+ <td>33</td>
861
+ <td>5</td>
862
+ </tr>
863
+ </tbody>
864
+ </table>
865
+
866
+ <br>
867
+
868
+ <b>② 추세 성장 전략 : 모멘텀 + 퀄리티 조합</b>
493
869
 
870
+
871
+ (1) 국내주식
494
872
  ```python
873
+ # 시가총액 상위 100종목
874
+ mf_kr = MultiFactorKR(N=100)
875
+ df = mf_kr.get_score()
876
+
877
+ # 추세성장 전략 적용
495
878
  df = mf.get_score_adj_weight(df, weight='추세성장')
496
- df[['scode', 'sname', '종합점수', '종합순위']].head()
879
+
880
+ df[['scode', 'sname', '종합점수', '종합순위']].head()
497
881
  ```
882
+
498
883
  <table border="1" class="dataframe">
499
884
  <thead>
500
885
  <tr style="text-align: right;">
@@ -545,11 +930,17 @@ df[['scode', 'sname', '종합점수', '종합순위']].head()
545
930
  </table>
546
931
 
547
932
 
548
- ③ 역발상 전략 : 밸류 + 모멘텀 조합
549
933
 
934
+ (2) 미국주식
550
935
  ```python
551
- df = mf.get_score_adj_weight(df, weight='역발상')
552
- df[['scode', 'sname', '종합점수', '종합순위']].head()
936
+ # 시가총액 상위 100종목
937
+ mf_us = MultiFactorUS(N=100)
938
+ df = mf_us.get_score()
939
+
940
+ # 추세성장 전략 적용
941
+ df = mf.get_score_adj_weight(df, weight='추세성장')
942
+
943
+ df[['scode', 'sname', '종합점수', '종합순위']].head()
553
944
  ```
554
945
  <table border="1" class="dataframe">
555
946
  <thead>
@@ -564,190 +955,216 @@ df[['scode', 'sname', '종합점수', '종합순위']].head()
564
955
  <tbody>
565
956
  <tr>
566
957
  <th>0</th>
567
- <td>000880</td>
568
- <td>한화</td>
569
- <td>16</td>
958
+ <td>APP</td>
959
+ <td>AppLovin</td>
960
+ <td>14</td>
570
961
  <td>1</td>
571
962
  </tr>
572
963
  <tr>
573
964
  <th>1</th>
574
- <td>039490</td>
575
- <td>키움증권</td>
576
- <td>19</td>
965
+ <td>NVDA</td>
966
+ <td>Nvidia</td>
967
+ <td>16</td>
577
968
  <td>2</td>
578
969
  </tr>
579
970
  <tr>
580
971
  <th>2</th>
581
- <td>006800</td>
582
- <td>미래에셋증권</td>
583
- <td>19</td>
972
+ <td>MU</td>
973
+ <td>Micron Technology</td>
974
+ <td>21</td>
584
975
  <td>3</td>
585
976
  </tr>
586
977
  <tr>
587
978
  <th>3</th>
588
- <td>047040</td>
589
- <td>대우건설</td>
590
- <td>20</td>
979
+ <td>PLTR</td>
980
+ <td>Palantir Technologies</td>
981
+ <td>23</td>
591
982
  <td>4</td>
592
983
  </tr>
593
984
  <tr>
594
985
  <th>4</th>
595
- <td>071050</td>
596
- <td>한국금융지주</td>
597
- <td>22</td>
598
- <td>6</td>
986
+ <td>ORCL</td>
987
+ <td>Oracle Corporation</td>
988
+ <td>26</td>
989
+ <td>5</td>
599
990
  </tr>
600
991
  </tbody>
601
992
  </table>
602
993
 
603
994
  <br>
604
995
 
605
- ### 6. 종합점수별 그룹화 출력
606
- get_Ngroup() 함수를 사용하면 전체 종목을 원하는 개수의 그룹으로 깔끔하게 묶어 요약할 수 있습니다.
996
+ <b>③ 역발상 전략 : 밸류 + 모멘텀 조합</b>
607
997
 
608
- ```python
609
- mf = MultiFactorKR(N=100)
610
- df = mf.get_score()
611
- mf.get_Ngroup(df, Ngroup=10) # 종합점수 상위 순 10개 그룹으로 분류
612
-
613
- # [출력 결과]
614
- # 1 : SK스퀘어, SK하이닉스, 삼성E&A, HD현대, 에이피알, 한국금융지주, 삼성전자, LG이노텍, 키움증권, LS ELECTRIC
615
- # 2 : 효성중공업, NH투자증권, 이수페타시스, 삼성물산, 삼성증권, HD현대일렉트릭, LG씨엔에스, LS, HD한국조선해양, 현대건설
616
- # 3 : 코오롱티슈진, 한화, 고려아연, 하나금융지주, JB금융지주, 미래에셋증권, KB금융, 삼천당제약, 기업은행, 엘앤에프
617
- # 4 : DB손해보험, 기아, 한전기술, 셀트리온, 우리금융지주, 펩트론, BNK금융지주, 대우건설, 한국항공우주, 현대글로비스
618
- # 5 : 삼성생명, 신한지주, HD현대중공업, 한화에어로스페이스, 현대모비스, 한화솔루션, 현대차, 삼양식품, 삼성카드, 에이비엘바이오
619
- # 6 : SK바이오팜, LG유플러스, 한미약품, S-Oil, GS, KT, 한화오션, 삼성화재, 두산, 삼성전기
620
- # 7 : SK텔레콤, 카카오뱅크, 한국전력, 한국타이어앤테크놀로지, HMM, 삼성중공업, 포스코인터내셔널, SK, 현대로템, 카카오페이
621
- # 8 : 대한항공, 현대오토에버, CJ, LIG넥스원, 삼성SDI, HD건설기계, HD현대마린솔루션, 두산에너빌리티, 크래프톤, 하이브
622
- # 9 : HLB, 삼성에스디에스, KT&G, 아모레퍼시픽, 유한양행, 한화시스템, SK이노베이션, LG전자, 삼성에피스홀딩스, NAVER
623
- # 10 : LG, 레인보우로보틱스, 한미반도체, POSCO홀딩스, LG에너지솔루션, 카카오, LG화학, 삼성바이오로직스, 한진칼, 포스코퓨처엠
624
- ```
625
-
626
- <br>
627
-
628
- ### 7. 개별 지표 데이터 수집
629
- 특정 팩터의 데이터만 개별적으로 추출할 수 있습니다.
630
998
 
999
+ (1) 국내주식
631
1000
  ```python
632
- # 개별 팩터 데이터 추출 (인자로 stock_list 딕셔너리 주입)
633
- data_mom = mf.get_momentum(stock_list)
634
- data_val = mf.get_value(stock_list)
635
- data_fin = mf.get_quality(stock_list)
1001
+ # 시가총액 상위 100종목
1002
+ mf_kr = MultiFactorKR(N=100)
1003
+ df = mf_kr.get_score()
636
1004
 
637
- # 추출한 개별 팩터 데이터를 조합하여, 종합 점수 산정
638
- data_mast_custom = mf.get_score_by_data(data_mom, data_val, data_fin)
639
- ```
640
-
641
- <br>
642
-
643
-
644
- ### 8. 특정 종목 팩터 값 조회
645
- 개별 종목(예: 삼성전자 '005930')의 팩터 점수만 빠르게 확인하고 싶을 때 활용합니다.
1005
+ # 역발상 전략 적용
1006
+ df = mf.get_score_adj_weight(df, weight='역발상')
646
1007
 
647
- ```python
648
- # 삼성전자의 모멘텀 데이터
649
- mf.get_momentum_one('005930')
1008
+ df[['scode', 'sname', '종합점수', '종합순위']].head()
650
1009
  ```
651
1010
  <table border="1" class="dataframe">
652
1011
  <thead>
653
1012
  <tr style="text-align: right;">
654
1013
  <th></th>
655
1014
  <th>scode</th>
656
- <th>mom_price</th>
657
- <th>mom_vol</th>
1015
+ <th>sname</th>
1016
+ <th>종합점수</th>
1017
+ <th>종합순위</th>
658
1018
  </tr>
659
1019
  </thead>
660
1020
  <tbody>
661
1021
  <tr>
662
1022
  <th>0</th>
663
- <td>005930</td>
664
- <td>62.531321</td>
665
- <td>-40.739685</td>
1023
+ <td>000880</td>
1024
+ <td>한화</td>
1025
+ <td>16</td>
1026
+ <td>1</td>
666
1027
  </tr>
667
- </tbody>
668
- </table>
669
-
670
- ```python
671
- # 삼성전자의 밸류 데이터
672
- mf.get_value_one('005930')
673
- ```
674
- <table border="1" class="dataframe">
675
- <thead>
676
- <tr style="text-align: right;">
677
- <th></th>
678
- <th>scode</th>
679
- <th>PER</th>
680
- <th>PBR</th>
1028
+ <tr>
1029
+ <th>1</th>
1030
+ <td>039490</td>
1031
+ <td>키움증권</td>
1032
+ <td>19</td>
1033
+ <td>2</td>
681
1034
  </tr>
682
- </thead>
683
- <tbody>
684
1035
  <tr>
685
- <th>0</th>
686
- <td>005930</td>
687
- <td>17.89</td>
688
- <td>1.82</td>
1036
+ <th>2</th>
1037
+ <td>006800</td>
1038
+ <td>미래에셋증권</td>
1039
+ <td>19</td>
1040
+ <td>3</td>
1041
+ </tr>
1042
+ <tr>
1043
+ <th>3</th>
1044
+ <td>047040</td>
1045
+ <td>대우건설</td>
1046
+ <td>20</td>
1047
+ <td>4</td>
1048
+ </tr>
1049
+ <tr>
1050
+ <th>4</th>
1051
+ <td>071050</td>
1052
+ <td>한국금융지주</td>
1053
+ <td>22</td>
1054
+ <td>6</td>
689
1055
  </tr>
690
1056
  </tbody>
691
1057
  </table>
692
1058
 
1059
+ (2) 미국주식
693
1060
  ```python
694
- # 삼성전자의 퀄리티 데이터
695
- mf.get_quality_one('005930')
1061
+ # 시가총액 상위 100종목
1062
+ mf_us = MultiFactorUS(N=100)
1063
+ df = mf_us.get_score()
1064
+
1065
+ # 역발상 전략 적용
1066
+ df = mf.get_score_adj_weight(df, weight='역발상')
1067
+
1068
+ df[['scode', 'sname', '종합점수', '종합순위']].head()
696
1069
  ```
697
1070
  <table border="1" class="dataframe">
698
1071
  <thead>
699
1072
  <tr style="text-align: right;">
700
1073
  <th></th>
701
1074
  <th>scode</th>
702
- <th>revenue_rate</th>
703
- <th>oper_income_rate</th>
704
- <th>net_income_rate</th>
705
- <th>ROE</th>
1075
+ <th>sname</th>
1076
+ <th>종합점수</th>
1077
+ <th>종합순위</th>
706
1078
  </tr>
707
1079
  </thead>
708
1080
  <tbody>
709
1081
  <tr>
710
1082
  <th>0</th>
711
- <td>005930</td>
712
- <td>9.03503</td>
713
- <td>64.997</td>
714
- <td>60.659103</td>
715
- <td>10.78</td>
1083
+ <td>GS</td>
1084
+ <td>Goldman Sachs</td>
1085
+ <td>17</td>
1086
+ <td>1</td>
1087
+ </tr>
1088
+ <tr>
1089
+ <th>1</th>
1090
+ <td>BAC</td>
1091
+ <td>Bank of America</td>
1092
+ <td>19</td>
1093
+ <td>2</td>
1094
+ </tr>
1095
+ <tr>
1096
+ <th>2</th>
1097
+ <td>MS</td>
1098
+ <td>Morgan Stanley</td>
1099
+ <td>20</td>
1100
+ <td>3</td>
1101
+ </tr>
1102
+ <tr>
1103
+ <th>3</th>
1104
+ <td>C</td>
1105
+ <td>Citigroup</td>
1106
+ <td>20</td>
1107
+ <td>4</td>
1108
+ </tr>
1109
+ <tr>
1110
+ <th>4</th>
1111
+ <td>WFC</td>
1112
+ <td>Wells Fargo</td>
1113
+ <td>22</td>
1114
+ <td>5</td>
716
1115
  </tr>
717
1116
  </tbody>
718
1117
  </table>
719
1118
 
720
1119
  <br>
721
1120
 
722
- ## 🌎 미국 주식 분석 (US Stocks) 🇺🇸
723
-
724
- **MultiFactorUS** 클래스를 사용하면 미국 주식(S&P 500, NASDAQ, NYSE 등)에 대해서도 국내 주식과 동일한 인터페이스로 멀티팩터 분석을 수행할 수 있습니다. 미국 주식 분석은 `yfinance` 라이브러리를 기반으로 구동됩니다.
1121
+ ### 6. 종합점수별 그룹화 출력
1122
+ `get_Ngroup()` 함수를 사용하면 전체 종목을 원하는 개수의 그룹으로 깔끔하게 묶어 요약할 수 있습니다.
725
1123
 
726
- ### 1. 미국 주식 분석 시작하기
1124
+ (1) 국내주식
727
1125
  ```python
728
- from MultiFactor import MultiFactorUS
1126
+ # 시가총액 상위 100종목
1127
+ mf_kr = MultiFactorKR(N=100)
1128
+ df = mf_kr.get_score()
729
1129
 
730
- # 미국 시가총액 상위 100종목 분석 객체 생성 (기본값 500)
731
- mf_us = MultiFactorUS(N=100)
1130
+ # 종합점수 상위 순 10그룹으로 분류
1131
+ mf.get_Ngroup(df, Ngroup=10)
732
1132
 
733
- # 멀티팩터 종합 점수 및 순위 계산
734
- df_us = mf_us.get_score()
1133
+ # [출력 결과]
1134
+ # 1 : SK스퀘어, SK하이닉스, 삼성E&A, HD현대, 에이피알, 한국금융지주, 삼성전자, LG이노텍, 키움증권, LS ELECTRIC
1135
+ # 2 : 효성중공업, NH투자증권, 이수페타시스, 삼성물산, 삼성증권, HD현대일렉트릭, LG씨엔에스, LS, HD한국조선해양, 현대건설
1136
+ # 3 : 코오롱티슈진, 한화, 고려아연, 하나금융지주, JB금융지주, 미래에셋증권, KB금융, 삼천당제약, 기업은행, 엘앤에프
1137
+ # 4 : DB손해보험, 기아, 한전기술, 셀트리온, 우리금융지주, 펩트론, BNK금융지주, 대우건설, 한국항공우주, 현대글로비스
1138
+ # 5 : 삼성생명, 신한지주, HD현대중공업, 한화에어로스페이스, 현대모비스, 한화솔루션, 현대차, 삼양식품, 삼성카드, 에이비엘바이오
1139
+ # 6 : SK바이오팜, LG유플러스, 한미약품, S-Oil, GS, KT, 한화오션, 삼성화재, 두산, 삼성전기
1140
+ # 7 : SK텔레콤, 카카오뱅크, 한국전력, 한국타이어앤테크놀로지, HMM, 삼성중공업, 포스코인터내셔널, SK, 현대로템, 카카오페이
1141
+ # 8 : 대한항공, 현대오토에버, CJ, LIG넥스원, 삼성SDI, HD건설기계, HD현대마린솔루션, 두산에너빌리티, 크래프톤, 하이브
1142
+ # 9 : HLB, 삼성에스디에스, KT&G, 아모레퍼시픽, 유한양행, 한화시스템, SK이노베이션, LG전자, 삼성에피스홀딩스, NAVER
1143
+ # 10 : LG, 레인보우로보틱스, 한미반도체, POSCO홀딩스, LG에너지솔루션, 카카오, LG화학, 삼성바이오로직스, 한진칼, 포스코퓨처엠
735
1144
  ```
736
1145
 
737
- ### 2. 주요 특징
738
- * **실시간 데이터**: `yfinance`를 활용하여 미국 시장의 최신 주가 및 재무 지표를 수집합니다.
739
- * **티커 호환성**: `BRK-B`와 같이 슬래시나 마침표가 포함된 특수 티커들을 내부적으로 자동 변환하여 데이터 수집 오류를 최소화합니다.
740
- * **동일한 환경**: 국내 주식과 동일한 함수명(`get_score`, `get_Ngroup` 등)을 사용하므로 기존 코드를 쉽게 재사용할 수 있습니다.
741
1146
 
742
- ### 3. 스타일별 가중치 및 그룹화 활용
1147
+ (2) 미국주식
743
1148
  ```python
744
- # '추세성장' 스타일 가중치 적용
745
- df_adj = mf_us.get_score_adj_weight(df_us, weight='추세성장')
1149
+ # 시가총액 상위 100종목
1150
+ mf_us = MultiFactorUS(N=100)
1151
+ df = mf_us.get_score()
746
1152
 
747
- # 종합 순위에 따라 10개 그룹으로 분류 및 종목 출력
748
- mf_us.get_Ngroup(df_adj, Ngroup=10)
749
- ```
1153
+ # 종합점수 상위 10개 그룹으로 분류
1154
+ mf.get_Ngroup(df, Ngroup=10)
750
1155
 
1156
+ # [출력 결과]
1157
+ #1 : Micron Technology, Morgan Stanley, Goldman Sachs, BlackRock, Citigroup, Nvidia, AppLovin, Microsoft, Dell Technologies, Charles Schwab Corporation
1158
+ #2 : Sandisk, Oracle Corporation, Bank of America, JPMorgan Chase, Netflix, Western Digital, Palantir Technologies, Lilly (Eli), Arista Networks, Broadcom
1159
+ #3 : Newmont, Prologis, Amphenol, Lam Research, Apple Inc., Merck & Co., IBM, Wells Fargo, AbbVie, Chubb Limited
1160
+ #4 : KLA Corporation, Analog Devices, McDonald's, Booking Holdings, Philip Morris International, Bristol Myers Squibb, Alphabet Inc. (Class A), Alphabet Inc. (Class C), Amgen, Meta Platforms
1161
+ #5 : Gilead Sciences, Union Pacific Corporation, PepsiCo, Mastercard, Advanced Micro Devices, Uber, GE Aerospace, NextEra Energy, Progressive Corporation, Johnson & Johnson
1162
+ #6 : Seagate Technology, Vertiv, Visa Inc., nan, American Express, S&P Global, Applied Materials, Stryker Corporation, Lowe's, Texas Instruments
1163
+ #7 : TJX Companies, Amazon, Cisco, Caterpillar Inc., Verizon, Corning Inc., Eaton Corporation, Thermo Fisher Scientific, Boeing, AT&T
1164
+ #8 : Salesforce, Costco, Capital One, Intuitive Surgical, Pfizer, Intel, GE Vernova, Lockheed Martin, Abbott Laboratories, T-Mobile US
1165
+ #9 : Walt Disney Company (The), Coca-Cola Company (The), RTX Corporation, Parker Hannifin, Danaher Corporation, Deere & Company, Procter & Gamble, ConocoPhillips, Accenture, Linde plc
1166
+ #10 : Palo Alto Networks, Qualcomm, Welltower, ExxonMobil, Home Depot (The), Walmart, Honeywell, Chevron Corporation, UnitedHealth Group, Tesla, Inc.
1167
+ ```
751
1168
  <br>
752
1169
 
753
1170
  ## ⚠️ 투자자 유의사항 (Disclaimer)