analyser_hj3415 2.9.8__tar.gz → 2.9.9__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- analyser_hj3415-2.9.9/.gitignore +1 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/PKG-INFO +5 -3
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/cli.py +17 -26
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/tsa.py +1 -1
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/pyproject.toml +8 -3
- analyser_hj3415-2.9.8/.DS_Store +0 -0
- analyser_hj3415-2.9.8/analyser_hj3415/.DS_Store +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/README.md +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/__init__.py +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/eval.py +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/workroom/__init__.py +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/workroom/mysklearn.py +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/workroom/mysklearn2.py +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/workroom/score.py +0 -0
- {analyser_hj3415-2.9.8 → analyser_hj3415-2.9.9}/analyser_hj3415/workroom/trash.py +0 -0
@@ -0,0 +1 @@
|
|
1
|
+
/dist/
|
@@ -1,18 +1,20 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: analyser_hj3415
|
3
|
-
Version: 2.9.
|
3
|
+
Version: 2.9.9
|
4
4
|
Summary: Stock analyser and database processing programs
|
5
5
|
Requires-Python: >=3.6
|
6
6
|
Description-Content-Type: text/markdown
|
7
7
|
Requires-Dist: utils-hj3415>=2.9.2
|
8
|
-
Requires-Dist: db-hj3415>=4.
|
8
|
+
Requires-Dist: db-hj3415>=4.1.4
|
9
9
|
Requires-Dist: scikit-learn>=1.5.2
|
10
10
|
Requires-Dist: plotly>=5.24.1
|
11
11
|
Requires-Dist: yfinance>=0.2.44
|
12
12
|
Requires-Dist: prophet>=1.1.6
|
13
13
|
Requires-Dist: kaleido>=0.2.1
|
14
14
|
Requires-Dist: matplotlib>=3.9.2
|
15
|
-
Requires-Dist: tensorflow>=2.
|
15
|
+
Requires-Dist: tensorflow-macos>=2.16.2; platform_machine == 'arm64' and sys_platform == 'darwin'
|
16
|
+
Requires-Dist: tensorflow-metal>=0.5.0; platform_machine == 'arm64' and sys_platform == 'darwin'
|
17
|
+
Requires-Dist: tensorflow>=2.18.0; platform_machine != 'arm64' or sys_platform != 'darwin'
|
16
18
|
|
17
19
|
### analyser-hj3415
|
18
20
|
|
@@ -4,8 +4,7 @@ import pprint
|
|
4
4
|
|
5
5
|
from utils_hj3415 import noti, utils
|
6
6
|
from utils_hj3415.helpers import SettingsManager
|
7
|
-
from db_hj3415 import myredis
|
8
|
-
|
7
|
+
from db_hj3415 import myredis, mypeewee
|
9
8
|
|
10
9
|
class AnalyserSettingsManager(SettingsManager):
|
11
10
|
DEFAULT_SETTINGS = {
|
@@ -34,6 +33,8 @@ class AnalyserSettingsManager(SettingsManager):
|
|
34
33
|
print(f"{title}이 기본값 ({self.DEFAULT_SETTINGS[title]}) 으로 초기화 되었습니다.")
|
35
34
|
|
36
35
|
|
36
|
+
log_cli = mypeewee.LogManager('cli')
|
37
|
+
|
37
38
|
def analyser_manager():
|
38
39
|
settings_manager = AnalyserSettingsManager()
|
39
40
|
expect_earn_from_setting = settings_manager.get_value('EXPECT_EARN')
|
@@ -47,7 +48,6 @@ def analyser_manager():
|
|
47
48
|
# ranking 파서
|
48
49
|
ranking_parser = prophet_subparser.add_parser('ranking', help='prophet 랭킹 책정 및 레디스 저장')
|
49
50
|
ranking_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
50
|
-
ranking_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
51
51
|
|
52
52
|
# lstm 명령어 서브파서
|
53
53
|
lstm_parser = type_subparsers.add_parser('lstm', help='MyLSTM 타입')
|
@@ -56,12 +56,10 @@ def analyser_manager():
|
|
56
56
|
caching_parser = lstm_subparser.add_parser('caching', help='lstm 랭킹 책정 및 레디스 저장')
|
57
57
|
caching_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
58
58
|
caching_parser.add_argument('-t', '--top', type=int, help='prophet ranking 몇위까지 작업을 할지')
|
59
|
-
caching_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
60
59
|
# red - get 파서
|
61
60
|
lstm_get_parser = lstm_subparser.add_parser('get', help='lstm get 책정 및 레디스 저장')
|
62
61
|
lstm_get_parser.add_argument('code', type=str, help='종목코드')
|
63
62
|
lstm_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
64
|
-
lstm_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
65
63
|
|
66
64
|
# red 명령어 서브파서
|
67
65
|
red_parser = type_subparsers.add_parser('red', help='red 타입')
|
@@ -70,13 +68,11 @@ def analyser_manager():
|
|
70
68
|
ranking_parser = red_subparser.add_parser('ranking', help='red 랭킹 책정 및 레디스 저장')
|
71
69
|
ranking_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
|
72
70
|
ranking_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
73
|
-
ranking_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
74
71
|
# red - get 파서
|
75
72
|
red_get_parser = red_subparser.add_parser('get', help='red get 책정 및 레디스 저장')
|
76
73
|
red_get_parser.add_argument('code', type=str, help='종목코드 or all')
|
77
74
|
red_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
|
78
75
|
red_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
79
|
-
red_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
80
76
|
|
81
77
|
# mil 명령어 서브파서
|
82
78
|
mil_parser = type_subparsers.add_parser('mil', help='millennial 타입')
|
@@ -86,7 +82,6 @@ def analyser_manager():
|
|
86
82
|
mil_get_parser.add_argument('code', type=str, help='종목코드 or all')
|
87
83
|
mil_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
|
88
84
|
mil_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
89
|
-
mil_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
90
85
|
|
91
86
|
# blue 명령어 서브파서
|
92
87
|
blue_parser = type_subparsers.add_parser('blue', help='Blue 타입')
|
@@ -96,7 +91,6 @@ def analyser_manager():
|
|
96
91
|
blue_get_parser.add_argument('code', type=str, help='종목코드 or all')
|
97
92
|
blue_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
|
98
93
|
blue_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
99
|
-
blue_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
100
94
|
|
101
95
|
# growth 명령어 서브파서
|
102
96
|
growth_parser = type_subparsers.add_parser('growth', help='Growth 타입')
|
@@ -106,7 +100,6 @@ def analyser_manager():
|
|
106
100
|
growth_get_parser.add_argument('code', type=str, help='종목코드 or all')
|
107
101
|
growth_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
|
108
102
|
growth_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
|
109
|
-
growth_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
|
110
103
|
|
111
104
|
# setting 명령어 서브파서
|
112
105
|
setting_parser = type_subparsers.add_parser('setting', help='Set and Get settings')
|
@@ -158,14 +151,12 @@ def analyser_manager():
|
|
158
151
|
|
159
152
|
# 원래 저장되었던 기대수익률로 다시 복원
|
160
153
|
eval.Red.expect_earn = ee_orig
|
161
|
-
|
162
|
-
noti.telegram_to('manager', f"오늘의 Red({args.code})를 레디스캐시에 저장했습니다.(유효 12시간)")
|
154
|
+
log_cli.save('INFO', f'run >> analyser red get {args.code}')
|
163
155
|
|
164
156
|
elif args.command == 'ranking':
|
157
|
+
log_cli.save('INFO', 'run >> analyser red ranking')
|
165
158
|
result = eval.Red.ranking(expect_earn=args.expect_earn, refresh=args.refresh)
|
166
159
|
print(result)
|
167
|
-
if args.noti:
|
168
|
-
noti.telegram_to('manager', "오늘의 red ranking을 레디스캐시에 저장했습니다.(유효 12시간)")
|
169
160
|
|
170
161
|
elif args.type == 'mil':
|
171
162
|
if args.command == 'get':
|
@@ -181,8 +172,7 @@ def analyser_manager():
|
|
181
172
|
mil = eval.Mil(args.code)
|
182
173
|
print(f"*** Mil - {mil} ***")
|
183
174
|
pprint.pprint(mil.get(args.refresh))
|
184
|
-
|
185
|
-
noti.telegram_to('manager', f"오늘의 Mil({args.code})를 레디스 캐시에 저장했습니다.(유효 12시간)")
|
175
|
+
log_cli.save('INFO', f'run >> analyser mil get {args.code}')
|
186
176
|
|
187
177
|
elif args.type == 'blue':
|
188
178
|
if args.command == 'get':
|
@@ -198,8 +188,7 @@ def analyser_manager():
|
|
198
188
|
blue = eval.Blue(args.code)
|
199
189
|
print(f"*** Blue - {blue} ***")
|
200
190
|
pprint.pprint(blue.get(args.refresh))
|
201
|
-
|
202
|
-
noti.telegram_to('manager', f"오늘의 Blue({args.code})를 레디스 캐시에 저장했습니다.(유효 12시간)")
|
191
|
+
log_cli.save('INFO', f'run >> analyser blue get {args.code}')
|
203
192
|
|
204
193
|
elif args.type == 'growth':
|
205
194
|
if args.command == 'get':
|
@@ -215,16 +204,16 @@ def analyser_manager():
|
|
215
204
|
growth = eval.Growth(args.code)
|
216
205
|
print(f"*** growth - {growth} ***")
|
217
206
|
pprint.pprint(growth.get(args.refresh))
|
218
|
-
|
219
|
-
|
207
|
+
log_cli.save('INFO', f'run >> analyser growth get {args.code}')
|
208
|
+
|
220
209
|
elif args.type == 'prophet':
|
221
210
|
if args.command == 'ranking':
|
222
211
|
myprophet = tsa.MyProphet
|
223
212
|
myprophet.expire_time_h = 72
|
224
213
|
result = myprophet.ranking(refresh=args.refresh)
|
225
214
|
print(result)
|
226
|
-
|
227
|
-
|
215
|
+
log_cli.save('INFO', 'run >> analyser prophet ranking')
|
216
|
+
|
228
217
|
elif args.type == 'lstm':
|
229
218
|
mylstm = tsa.MyLSTM
|
230
219
|
mylstm.expire_time_h = 72
|
@@ -233,13 +222,12 @@ def analyser_manager():
|
|
233
222
|
mylstm.caching_based_on_prophet_ranking(refresh=args.refresh, top=args.top)
|
234
223
|
else:
|
235
224
|
mylstm.caching_based_on_prophet_ranking(refresh=args.refresh)
|
236
|
-
if args.
|
237
|
-
noti.telegram_to('manager', f"오늘의 lstm caching(top={args.top if args.top else 20})을 레디스캐시에 저장했습니다.(유효 {mylstm.expire_time_h}시간)")
|
225
|
+
log_cli.save('INFO', f'run >> analyser lstm caching / top={args.top if args.top else 20})')
|
238
226
|
elif args.command == 'get':
|
239
227
|
assert utils.is_6digit(args.code), "code 인자는 6자리 숫자이어야 합니다."
|
240
228
|
result = mylstm(args.code).get_final_predictions(refresh=args.refresh)
|
241
|
-
|
242
|
-
|
229
|
+
log_cli.save('INFO', f'run >> analyser lstm get {args.code}')
|
230
|
+
|
243
231
|
elif args.type == 'setting':
|
244
232
|
if args.command == 'set':
|
245
233
|
settings_manager.set_value(args.title, args.value)
|
@@ -248,5 +236,8 @@ def analyser_manager():
|
|
248
236
|
print(f"{args.title} 값: {value}")
|
249
237
|
elif args.command == 'print':
|
250
238
|
print(settings_manager.load_settings())
|
239
|
+
|
251
240
|
else:
|
252
241
|
parser.print_help()
|
242
|
+
|
243
|
+
log_cli.close()
|
@@ -5,7 +5,7 @@ build-backend = "flit_core.buildapi"
|
|
5
5
|
|
6
6
|
[project]
|
7
7
|
name = "analyser_hj3415"
|
8
|
-
version = "2.9.
|
8
|
+
version = "2.9.9"
|
9
9
|
description = "Stock analyser and database processing programs"
|
10
10
|
readme = "README.md"
|
11
11
|
requires-python = ">=3.6"
|
@@ -21,14 +21,19 @@ requires-python = ">=3.6"
|
|
21
21
|
#]
|
22
22
|
dependencies = [
|
23
23
|
"utils-hj3415>=2.9.2",
|
24
|
-
"db-hj3415>=4.
|
24
|
+
"db-hj3415>=4.1.4",
|
25
25
|
"scikit-learn>=1.5.2",
|
26
26
|
"plotly>=5.24.1",
|
27
27
|
"yfinance>=0.2.44",
|
28
28
|
"prophet>=1.1.6",
|
29
29
|
"kaleido>=0.2.1", #plotly로 이미지출력위해
|
30
30
|
"matplotlib>=3.9.2",
|
31
|
-
|
31
|
+
# Apple Silicon (ARM, macOS)에서 tensorflow-macos 사용
|
32
|
+
"tensorflow-macos>=2.16.2; platform_machine == 'arm64' and sys_platform == 'darwin'",
|
33
|
+
"tensorflow-metal>=0.5.0; platform_machine == 'arm64' and sys_platform == 'darwin'",
|
34
|
+
# 그 외 환경에서는 일반 tensorflow 사용
|
35
|
+
"tensorflow>=2.18.0; platform_machine != 'arm64' or sys_platform != 'darwin'"
|
36
|
+
|
32
37
|
]
|
33
38
|
|
34
39
|
[project.scripts]
|
analyser_hj3415-2.9.8/.DS_Store
DELETED
Binary file
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|