analyser_hj3415 2.6.1__tar.gz → 2.6.3__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/PKG-INFO +1 -1
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/analysers/eval.py +5 -8
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/analysers/score.py +42 -26
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/cli.py +4 -3
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/pyproject.toml +1 -1
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.DS_Store +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.gitattributes +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.gitignore +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.idea/.gitignore +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.idea/analyser-hj3415.iml +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.idea/misc.xml +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.idea/modules.xml +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.idea/vcs.xml +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/LICENSE +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/README.md +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/.DS_Store +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/__init__.py +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/analysers/report.py +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/myredis.py +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/tools.py +0 -0
- {analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/analyser_hj3415/trash.py +0 -0
@@ -84,16 +84,9 @@ def mil(code: str) -> dict:
|
|
84
84
|
'가치지표': {'FCF': fcf_dict, 'PFCF': pfcf_dict, 'PCR': pcr_dict},
|
85
85
|
'date': [각 유효한 값의 년월값 리스트(ex- 2020/09)],
|
86
86
|
}
|
87
|
-
|
88
|
-
- 재무활동현금흐름이 마이너스라는 것은 배당급 지급했거나, 자사주 매입했거나, 부채를 상환한 상태임.
|
89
|
-
- 반대는 채권자로 자금을 조달했거나 신주를 발행했다는 의미
|
90
|
-
<주주수익률> - 재무활동현금흐름/시가총액 => 5%이상인가?
|
91
|
-
|
92
87
|
투하자본수익률(ROIC)가 30%이상인가
|
93
88
|
ROE(자기자본이익률) 20%이상이면 아주 우수 다른 투자이익률과 비교해볼것 10%미만이면 별로...단, 부채비율을 확인해야함.
|
94
89
|
|
95
|
-
이익지표 ...영업현금흐름이 순이익보다 많은가 - 결과값이 음수인가..
|
96
|
-
|
97
90
|
FCF는 영업현금흐름에서 자본적 지출(유·무형투자 비용)을 차감한 순수한 현금력이라 할 수 있다.
|
98
91
|
말 그대로 자유롭게(Free) 사용할 수 있는 여윳돈을 뜻한다.
|
99
92
|
잉여현금흐름이 플러스라면 미래의 투자나 채무상환에 쓸 재원이 늘어난 것이다.
|
@@ -130,7 +123,7 @@ def mil(code: str) -> dict:
|
|
130
123
|
|
131
124
|
try:
|
132
125
|
주주수익률 = round((재무활동현금흐름 / marketcap억 * -100), 2)
|
133
|
-
이익지표 = round((지배주주당기순이익 - 영업활동현금흐름) / marketcap
|
126
|
+
이익지표 = round(((지배주주당기순이익 - 영업활동현금흐름) / marketcap억) * 100, 2)
|
134
127
|
except ZeroDivisionError:
|
135
128
|
주주수익률 = math.nan
|
136
129
|
이익지표 = math.nan
|
@@ -147,6 +140,10 @@ def mil(code: str) -> dict:
|
|
147
140
|
return {
|
148
141
|
'주주수익률': 주주수익률,
|
149
142
|
'이익지표': 이익지표,
|
143
|
+
'재무활동현금흐름': 재무활동현금흐름,
|
144
|
+
'지배주주당기순이익': 지배주주당기순이익,
|
145
|
+
'영업활동현금흐름': 영업활동현금흐름,
|
146
|
+
'시가총액억': marketcap억,
|
150
147
|
'투자수익률': {'ROIC': roic, 'ROE': roe, 'ROE106': roe106},
|
151
148
|
'가치지표': {'FCF': fcf_dict, 'PFCF': pfcf_dict, 'PCR': pcr_dict},
|
152
149
|
'date': tools.set_data(d1, d2, d3, d4, d5),
|
@@ -58,33 +58,49 @@ def red(code: str, expect_earn: float) -> int:
|
|
58
58
|
|
59
59
|
def mil(code: str, expect_earn: float) -> Tuple[int, int, int, int]:
|
60
60
|
"""
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
61
|
+
이익 지표 일반적인 기준 설정
|
62
|
+
|
63
|
+
1. 비율이 10% 이상일 경우 주의:
|
64
|
+
• 이 비율이 10%를 넘을 경우, 이는 기업의 순이익이 현금 흐름과 비교하여 너무 높아졌음을 나타냅니다.
|
65
|
+
• 순이익이 과도하게 부풀려졌을 가능성이 있으며, 회계적인 항목(예: 미수금, 재고자산의 평가차익 등)이나 비현금성 이익이 이익에 크게 기여하고 있을 수 있습니다. 이런 경우, 현금 흐름이 제대로 발생하지 않고 있음에도 순이익만 높게 기록되는 상황이 발생할 수 있어 이익의 질이 낮다고 평가됩니다.
|
66
|
+
• 특히, 비율이 지속적으로 높다면 재무 건전성에 문제가 있을 수 있습니다.
|
67
|
+
2. 비율이 5% 이상 ~ 10% 미만일 때:
|
68
|
+
• 비율이 5% ~ 10% 사이라면, 기업의 이익이 여전히 현금 흐름과 괴리가 있지만, 업종에 따라 일정 부분은 허용될 수 있습니다.
|
69
|
+
• 예를 들어, 기술 기업이나 고성장 산업에서는 초기 투자나 R&D 비용이 많기 때문에 순이익과 현금 흐름의 차이가 다소 발생할 수 있습니다. 이런 경우 비율이 5%를 넘더라도 성장성을 고려한 투자 관점에서 용인될 수 있습니다.
|
70
|
+
• 다만, 일반적인 제조업 등 현금 창출이 중요한 업종에서는 5% 이상의 괴리도 주의 깊게 볼 필요가 있습니다.
|
71
|
+
3. 비율이 5% 미만일 때:
|
72
|
+
• 비율이 5% 미만이라면, 기업의 순이익과 현금 흐름 간의 차이가 크지 않으므로, 이익의 질이 높고 재무 건전성이 양호하다고 평가할 수 있습니다.
|
73
|
+
• 특히 음수일 경우, 영업활동에서 벌어들인 현금이 순이익을 초과한다는 것을 의미하므로, 이는 매우 긍정적인 신호입니다. 기업이 순이익보다도 더 많은 현금을 창출하고 있는 상태로, 이익이 실제 현금 흐름으로 뒷받침되고 있음을 나타냅니다.
|
74
|
+
|
75
|
+
참고할 수 있는 기준
|
76
|
+
1. 경고 신호: 10% 이상
|
77
|
+
• 비율이 10% 이상이라면, 기업의 이익이 실제 현금 흐름과 크게 괴리되어 있음을 의미하며, 이익의 질이 낮고 재무 건전성이 떨어질 가능성이 큽니다. 특히, 이 비율이 지속적으로 높다면, 주의가 필요합니다.
|
78
|
+
2. 주의: 5% ~ 10%
|
79
|
+
• 이 비율은 어느 정도 괴리가 있는 상태이며, 업종 특성에 따라 감안할 수 있지만, 일반적인 기업의 경우 주의를 요합니다.
|
80
|
+
3. 안정적: 5% 미만
|
81
|
+
• 5% 미만은 비교적 안정적인 상태로 평가될 수 있습니다. 이익과 현금 흐름 간의 괴리가 크지 않기 때문에, 기업의 재무 상태와 이익의 질이 건전하다고 볼 수 있습니다.
|
82
|
+
4. 매우 긍정적: 음수
|
83
|
+
• 비율이 음수일 경우, 현금 창출 능력이 매우 우수한 상태입니다. 현금 흐름이 순이익보다 더 크므로, 이는 매우 긍정적인 신호로 평가됩니다.
|
84
|
+
|
85
|
+
사례별 해석
|
86
|
+
|
87
|
+
1. 비율이 15%:
|
88
|
+
• 회사는 순이익이 영업활동현금흐름에 비해 과도하게 높습니다. 이는 비현금성 이익이 많이 포함되어 있거나, 회계적인 처리로 인해 순이익이 부풀려졌을 가능성이 큽니다. 기업의 이익 질에 의문을 가져야 하며, 장기적으로 재무 구조에 문제가 생길 수 있습니다.
|
89
|
+
2. 비율이 7%:
|
90
|
+
• 괴리가 존재하지만, 일부 산업에서는 용인될 수 있는 범위입니다. 다만, 현금 흐름이 안정적인지 추가적인 분석이 필요합니다.
|
91
|
+
3. 비율이 -3%:
|
92
|
+
• 매우 긍정적인 상황입니다. 회사는 순이익보다 더 많은 현금을 벌어들이고 있어, 이익의 질이 매우 높으며, 주주들에게도 더 많은 이익을 돌려줄 가능성이 큽니다.
|
93
|
+
|
94
|
+
기타 고려 사항
|
95
|
+
|
96
|
+
• 업종별 차이: 기술 기업, 스타트업 등은 고정자산 투자나 R&D 비용이 많아 현금 흐름과 이익이 괴리될 수 있습니다. 이 경우 이익의 질이 낮다고 단정할 수는 없으므로 산업 특성을 고려해야 합니다.
|
97
|
+
• 기업의 성장 단계: 빠르게 성장하는 기업일수록 현금 흐름보다 순이익이 클 수 있지만, 시간이 지나면서 현금 창출 능력이 증가할 수 있습니다.
|
98
|
+
• 비현금성 항목 분석: 감가상각, 미수금 등의 비현금성 항목이 이익에 얼마나 영향을 미치는지 분석하여 이익의 질을 파악하는 것이 중요합니다.
|
99
|
+
:param code:
|
100
|
+
:param expect_earn:
|
101
|
+
:return:
|
87
102
|
"""
|
103
|
+
|
88
104
|
mil_dict = eval.mil(code)
|
89
105
|
|
90
106
|
# print(pprint.pformat(mil_dict, width=200))
|
@@ -83,7 +83,7 @@ def analyser_manager():
|
|
83
83
|
if args.type == 'red':
|
84
84
|
if args.command == 'score':
|
85
85
|
# 기대 수익률과 refresh 값 처리
|
86
|
-
expect_earn = args.expect_earn if args.expect_earn is not None else expect_earn_from_setting
|
86
|
+
expect_earn = float(args.expect_earn if args.expect_earn is not None else expect_earn_from_setting)
|
87
87
|
refresh = args.refresh if args.refresh else False
|
88
88
|
|
89
89
|
# print(expect_earn, refresh)
|
@@ -100,8 +100,9 @@ def analyser_manager():
|
|
100
100
|
|
101
101
|
elif args.command == 'ranking':
|
102
102
|
# 기대 수익률과 refresh 값 처리
|
103
|
-
expect_earn = args.expect_earn if args.expect_earn is not None else expect_earn_from_setting
|
103
|
+
expect_earn = float(args.expect_earn if args.expect_earn is not None else expect_earn_from_setting)
|
104
104
|
refresh = args.refresh if args.refresh else False
|
105
|
+
print(expect_earn, refresh)
|
105
106
|
|
106
107
|
# red_ranking 함수 호출
|
107
108
|
result = red_ranking(expect_earn, refresh)
|
@@ -112,7 +113,7 @@ def analyser_manager():
|
|
112
113
|
elif args.type == 'mil':
|
113
114
|
if args.command == 'score':
|
114
115
|
# 기대 수익률과 refresh 값 처리
|
115
|
-
expect_earn = args.expect_earn if args.expect_earn is not None else expect_earn_from_setting
|
116
|
+
expect_earn = float(args.expect_earn if args.expect_earn is not None else expect_earn_from_setting)
|
116
117
|
refresh = args.refresh if args.refresh else False
|
117
118
|
|
118
119
|
if args.code == 'all':
|
@@ -4,7 +4,7 @@ build-backend = "flit_core.buildapi"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "analyser_hj3415"
|
7
|
-
version = "2.6.
|
7
|
+
version = "2.6.3"
|
8
8
|
authors = [{name = "Hyungjin Kim", email = "hj3415@gmail.com"}]
|
9
9
|
description = "Stock analyser and database processing programs"
|
10
10
|
readme = "README.md"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{analyser_hj3415-2.6.1 → analyser_hj3415-2.6.3}/.idea/inspectionProfiles/profiles_settings.xml
RENAMED
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
|