analyser_hj3415 2.9.3__py3-none-any.whl

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.
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()