analyser_hj3415 2.9.3__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Binary file
File without changes
analyser_hj3415/cli.py ADDED
@@ -0,0 +1,234 @@
1
+ import argparse
2
+ import os
3
+ import pprint
4
+
5
+ from utils_hj3415 import noti, utils
6
+ from utils_hj3415.helpers import SettingsManager
7
+ from db_hj3415 import myredis
8
+
9
+
10
+ class AnalyserSettingsManager(SettingsManager):
11
+ DEFAULT_SETTINGS = {
12
+ 'EXPECT_EARN': 0.06,
13
+ 'RED_RANKING_EXPECT_EARN': 0.06,
14
+ }
15
+ TITLES = DEFAULT_SETTINGS.keys()
16
+
17
+ def __init__(self):
18
+ settings_file = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'settings.json')
19
+ super().__init__(settings_file)
20
+
21
+ def set_value(self, title: str, value: str):
22
+ assert title in self.TITLES, f"title 인자는 {self.TITLES} 중에 있어야 합니다."
23
+ self.settings_dict[title] = value
24
+ self.save_settings()
25
+ print(f"{title}: {value}가 저장되었습니다")
26
+
27
+ def get_value(self, title: str):
28
+ assert title in self.TITLES, f"title 인자는 {self.TITLES} 중에 있어야 합니다."
29
+ return self.settings_dict.get(title, self.DEFAULT_SETTINGS[title])
30
+
31
+ def reset_value(self, title: str):
32
+ assert title in self.TITLES, f"title 인자는 {self.TITLES} 중에 있어야 합니다."
33
+ self.set_value(title, self.DEFAULT_SETTINGS[title])
34
+ print(f"{title}이 기본값 ({self.DEFAULT_SETTINGS[title]}) 으로 초기화 되었습니다.")
35
+
36
+
37
+ def analyser_manager():
38
+ settings_manager = AnalyserSettingsManager()
39
+ expect_earn_from_setting = settings_manager.get_value('EXPECT_EARN')
40
+
41
+ parser = argparse.ArgumentParser(description="Analyser Commands")
42
+ type_subparsers = parser.add_subparsers(dest='type', help='분석 타입')
43
+
44
+ # prophet 명령어 서브파서
45
+ prophet_parser = type_subparsers.add_parser('prophet', help='MyProphet 타입')
46
+ prophet_subparser = prophet_parser.add_subparsers(dest='command', help='prophet 관련된 명령')
47
+ # ranking 파서
48
+ ranking_parser = prophet_subparser.add_parser('ranking', help='prophet 랭킹 책정 및 레디스 저장')
49
+ ranking_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
50
+ ranking_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
51
+
52
+ # lstm 명령어 서브파서
53
+ lstm_parser = type_subparsers.add_parser('lstm', help='MyLSTM 타입')
54
+ lstm_subparser = lstm_parser.add_subparsers(dest='command', help='lstm 관련된 명령')
55
+ # caching 파서
56
+ caching_parser = lstm_subparser.add_parser('caching', help='lstm 랭킹 책정 및 레디스 저장')
57
+ caching_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
58
+ caching_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
59
+
60
+ # red 명령어 서브파서
61
+ red_parser = type_subparsers.add_parser('red', help='red 타입')
62
+ red_subparser = red_parser.add_subparsers(dest='command', help='red 관련된 명령')
63
+ # red - ranking 파서
64
+ ranking_parser = red_subparser.add_parser('ranking', help='red 랭킹 책정 및 레디스 저장')
65
+ ranking_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
66
+ ranking_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
67
+ ranking_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
68
+ # red - get 파서
69
+ red_get_parser = red_subparser.add_parser('get', help='red get 책정 및 레디스 저장')
70
+ red_get_parser.add_argument('code', type=str, help='종목코드 or all')
71
+ red_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
72
+ red_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
73
+ red_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
74
+
75
+ # mil 명령어 서브파서
76
+ mil_parser = type_subparsers.add_parser('mil', help='millennial 타입')
77
+ mil_subparser = mil_parser.add_subparsers(dest='command', help='mil 관련된 명령')
78
+ # mil - get 파서
79
+ mil_get_parser = mil_subparser.add_parser('get', help='mil get 책정 및 레디스 저장')
80
+ mil_get_parser.add_argument('code', type=str, help='종목코드 or all')
81
+ mil_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
82
+ mil_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
83
+ mil_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
84
+
85
+ # blue 명령어 서브파서
86
+ blue_parser = type_subparsers.add_parser('blue', help='Blue 타입')
87
+ blue_subparser = blue_parser.add_subparsers(dest='command', help='blue 관련된 명령')
88
+ # blue - get 파서
89
+ blue_get_parser = blue_subparser.add_parser('get', help='blue get 책정 및 레디스 저장')
90
+ blue_get_parser.add_argument('code', type=str, help='종목코드 or all')
91
+ blue_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
92
+ blue_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
93
+ blue_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
94
+
95
+ # growth 명령어 서브파서
96
+ growth_parser = type_subparsers.add_parser('growth', help='Growth 타입')
97
+ growth_subparser = growth_parser.add_subparsers(dest='command', help='growth 관련된 명령')
98
+ # growth - get 파서
99
+ growth_get_parser = growth_subparser.add_parser('get', help='growth get 책정 및 레디스 저장')
100
+ growth_get_parser.add_argument('code', type=str, help='종목코드 or all')
101
+ growth_get_parser.add_argument('-e', '--expect_earn', type=float, help='기대수익률 (실수 값 입력)')
102
+ growth_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
103
+ growth_get_parser.add_argument('-n', '--noti', action='store_true', help='작업 완료 후 메시지 전송 여부')
104
+
105
+ # setting 명령어 서브파서
106
+ setting_parser = type_subparsers.add_parser('setting', help='Set and Get settings')
107
+ setting_subparser = setting_parser.add_subparsers(dest='command', help='setting 관련된 명령')
108
+ # setting - set 파서
109
+ set_parser = setting_subparser.add_parser('set', help='세팅값 저장')
110
+ set_parser.add_argument('title', choices=AnalyserSettingsManager.TITLES, help='타이틀')
111
+ set_parser.add_argument('value', help='세팅값')
112
+ # setting - get 파서
113
+ get_parser = setting_subparser.add_parser('get', help='타이틀 세팅값 불러오기')
114
+ get_parser.add_argument('title', choices=AnalyserSettingsManager.TITLES, help='타이틀')
115
+ # setting - print 파서
116
+ setting_subparser.add_parser('print', help='전체 세팅값 출력')
117
+
118
+ args = parser.parse_args()
119
+
120
+ from analyser_hj3415 import eval, tsa
121
+
122
+ if args.type == 'red':
123
+ if args.command == 'get':
124
+ if args.code == 'all':
125
+ # 저장된 기대수익률을 불러서 임시저장
126
+ ee_orig = eval.Red.expect_earn
127
+
128
+ red = eval.Red('005930')
129
+ if args.expect_earn:
130
+ eval.Red.expect_earn = float(args.expect_earn)
131
+
132
+ print("**** Red - all codes ****")
133
+ for i, code in enumerate(myredis.Corps.list_all_codes()):
134
+ red.code = code
135
+ print(f"*** {i} / {red} ***")
136
+ pprint.pprint(red.get(args.refresh, verbose=False))
137
+
138
+ # 원래 저장되었던 기대수익률로 다시 복원
139
+ eval.Red.expect_earn = ee_orig
140
+ else:
141
+ assert utils.is_6digit(args.code), "code 인자는 6자리 숫자이어야 합니다."
142
+ # 저장된 기대수익률을 불러서 임시저장
143
+ ee_orig = eval.Red.expect_earn
144
+
145
+ red = eval.Red(args.code)
146
+ if args.expect_earn:
147
+ args.refresh = True
148
+ eval.Red.expect_earn = float(args.expect_earn)
149
+
150
+ print(f"*** Red - {red} ***")
151
+ pprint.pprint(red.get(args.refresh))
152
+
153
+ # 원래 저장되었던 기대수익률로 다시 복원
154
+ eval.Red.expect_earn = ee_orig
155
+ if args.noti:
156
+ noti.telegram_to('manager', f"오늘의 Red({args.code})를 레디스캐시에 저장했습니다.(유효 12시간)")
157
+
158
+ elif args.command == 'ranking':
159
+ result = eval.Red.ranking(expect_earn=args.expect_earn, refresh=args.refresh)
160
+ print(result)
161
+ if args.noti:
162
+ noti.telegram_to('manager', "오늘의 red ranking을 레디스캐시에 저장했습니다.(유효 12시간)")
163
+
164
+ elif args.type == 'mil':
165
+ if args.command == 'get':
166
+ if args.code == 'all':
167
+ mil = eval.Mil('005930')
168
+ print("**** Mil - all codes ****")
169
+ for i, code in enumerate(myredis.Corps.list_all_codes()):
170
+ mil.code = code
171
+ print(f"*** {i} / {mil} ***")
172
+ pprint.pprint(mil.get(args.refresh, verbose=False))
173
+ else:
174
+ assert utils.is_6digit(args.code), "code 인자는 6자리 숫자이어야 합니다."
175
+ mil = eval.Mil(args.code)
176
+ print(f"*** Mil - {mil} ***")
177
+ pprint.pprint(mil.get(args.refresh))
178
+ if args.noti:
179
+ noti.telegram_to('manager', f"오늘의 Mil({args.code})를 레디스 캐시에 저장했습니다.(유효 12시간)")
180
+
181
+ elif args.type == 'blue':
182
+ if args.command == 'get':
183
+ if args.code == 'all':
184
+ blue = eval.Blue('005930')
185
+ print("**** Blue - all codes ****")
186
+ for i, code in enumerate(myredis.Corps.list_all_codes()):
187
+ blue.code = code
188
+ print(f"*** {i} / {blue} ***")
189
+ pprint.pprint(blue.get(args.refresh, verbose=False))
190
+ else:
191
+ assert utils.is_6digit(args.code), "code 인자는 6자리 숫자이어야 합니다."
192
+ blue = eval.Blue(args.code)
193
+ print(f"*** Blue - {blue} ***")
194
+ pprint.pprint(blue.get(args.refresh))
195
+ if args.noti:
196
+ noti.telegram_to('manager', f"오늘의 Blue({args.code})를 레디스 캐시에 저장했습니다.(유효 12시간)")
197
+
198
+ elif args.type == 'growth':
199
+ if args.command == 'get':
200
+ if args.code == 'all':
201
+ growth = eval.Growth('005930')
202
+ print("**** Growth - all codes ****")
203
+ for i, code in enumerate(myredis.Corps.list_all_codes()):
204
+ growth.code = code
205
+ print(f"*** {i} / {growth} ***")
206
+ pprint.pprint(growth.get(args.refresh, verbose=False))
207
+ else:
208
+ assert utils.is_6digit(args.code), "code 인자는 6자리 숫자이어야 합니다."
209
+ growth = eval.Growth(args.code)
210
+ print(f"*** growth - {growth} ***")
211
+ pprint.pprint(growth.get(args.refresh))
212
+ if args.noti:
213
+ noti.telegram_to('manager', f"오늘의 Growth({args.code})를 레디스 캐시에 저장했습니다.(유효 12시간)")
214
+ elif args.type == 'prophet':
215
+ if args.command == 'ranking':
216
+ result = tsa.MyProphet.ranking(refresh=args.refresh)
217
+ print(result)
218
+ if args.noti:
219
+ noti.telegram_to('manager', "오늘의 prophet ranking을 레디스캐시에 저장했습니다.(유효 24시간)")
220
+ elif args.type == 'lstm':
221
+ if args.command == 'caching':
222
+ result = tsa.MyLSTM('005930').caching_based_on_prophet_ranking(refresh=args.refresh)
223
+ if args.noti:
224
+ noti.telegram_to('manager', "오늘의 lstm caching을 레디스캐시에 저장했습니다.(유효 24시간)")
225
+ elif args.type == 'setting':
226
+ if args.command == 'set':
227
+ settings_manager.set_value(args.title, args.value)
228
+ elif args.command == 'get':
229
+ value = settings_manager.get_value(args.title)
230
+ print(f"{args.title} 값: {value}")
231
+ elif args.command == 'print':
232
+ print(settings_manager.load_settings())
233
+ else:
234
+ parser.print_help()