analyser_hj3415 3.2.1__py3-none-any.whl → 3.3.0__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.
@@ -7,13 +7,31 @@ from sklearn.preprocessing import StandardScaler
7
7
  import matplotlib.pyplot as plt # Matplotlib 수동 임포트
8
8
  import plotly.graph_objs as go
9
9
  from plotly.offline import plot
10
+ from dataclasses import dataclass
11
+ import os
10
12
 
11
13
  from utils_hj3415 import tools, setup_logger
12
14
  from db_hj3415 import myredis
13
15
 
14
- from analyser_hj3415.analyser import eval
16
+ from analyser_hj3415.analyser import eval, MIs, tsa
17
+
15
18
 
16
19
  mylogger = setup_logger(__name__,'WARNING')
20
+ expire_time = tools.to_int(os.getenv('DEFAULT_EXPIRE_TIME_H', 48)) * 3600
21
+
22
+
23
+ @dataclass
24
+ class ProphetData:
25
+ ticker: str
26
+
27
+ date: datetime.date
28
+ price: float
29
+ yhat: float
30
+ yhat_upper: float
31
+ yhat_lower: float
32
+
33
+ trading_action: str = ''
34
+ score: int = None
17
35
 
18
36
 
19
37
  class MyProphet:
@@ -23,103 +41,214 @@ class MyProphet:
23
41
  self.model = Prophet()
24
42
  self._ticker = ticker
25
43
 
26
- self.raw_data = self._get_raw_data()
27
- self.df_real = self._preprocessing_for_prophet()
28
- self.df_forecast = self._make_forecast()
44
+ self.raw_data = pd.DataFrame()
45
+ self.df_real = pd.DataFrame()
46
+ self.df_forecast = pd.DataFrame()
29
47
 
30
48
  @property
31
49
  def ticker(self) -> str:
50
+ """
51
+ 현재 설정된 티커를 반환합니다.
52
+
53
+ 반환값:
54
+ str: 현재 티커 값.
55
+ """
32
56
  return self._ticker
33
57
 
34
58
  @ticker.setter
35
59
  def ticker(self, ticker: str):
60
+ """
61
+ 티커 값을 변경하고 관련 데이터를 초기화합니다.
62
+
63
+ 매개변수:
64
+ ticker (str): 새로 설정할 티커 값.
65
+ """
36
66
  mylogger.info(f'change ticker : {self.ticker} -> {ticker}')
37
67
  self.scaler = StandardScaler()
38
68
  self.model = Prophet()
39
69
  self._ticker = ticker
40
70
 
41
- self.raw_data = self._get_raw_data()
42
- self.df_real = self._preprocessing_for_prophet()
43
- self.df_forecast = self._make_forecast()
71
+ self.raw_data = pd.DataFrame()
72
+ self.df_real = pd.DataFrame()
73
+ self.df_forecast = pd.DataFrame()
44
74
 
45
- @staticmethod
46
- def is_valid_date(date_string):
47
- try:
48
- # %Y-%m-%d 형식으로 문자열을 datetime 객체로 변환 시도
49
- datetime.strptime(date_string, '%Y-%m-%d')
50
- return True
51
- except ValueError:
52
- # 변환이 실패하면 ValueError가 발생, 형식이 맞지 않음
53
- return False
54
-
55
- def _get_raw_data(self) -> pd.DataFrame:
56
- """
57
- 야후에서 해당 종목의 4년간 주가 raw data를 받아온다.
58
- :return:
75
+ def initializing(self):
59
76
  """
60
- # 오늘 날짜 가져오기
61
- today = datetime.today()
77
+ Prophet 모델 사용을 위한 데이터를 초기화합니다.
62
78
 
63
- # 4년 날짜 계산 (4년 = 365일 * 4)
64
- four_years_ago = today - timedelta(days=365 * 4)
65
-
66
- return yf.download(
67
- tickers=self.ticker,
68
- start=four_years_ago.strftime('%Y-%m-%d'),
69
- end=today.strftime('%Y-%m-%d')
70
- )
71
-
72
- def _preprocessing_for_prophet(self) -> pd.DataFrame:
73
- """
74
- Prophet이 사용할 수 있도록 데이터 준비
75
- ds는 날짜, y는 주가
76
- :return:
79
+ - Yahoo Finance에서 데이터를 가져옵니다.
80
+ - 데이터를 Prophet 형식에 맞게 전처리합니다.
81
+ - Prophet 모델을 사용하여 예측 데이터를 생성합니다.
77
82
  """
78
- df = self.raw_data[['Close', 'Volume']].reset_index()
79
- df.columns = ['ds', 'y', 'volume'] # Prophet의 형식에 맞게 열 이름 변경
80
-
81
- # ds 열에서 타임존 제거
82
- df['ds'] = df['ds'].dt.tz_localize(None)
83
-
84
- # 추가 변수를 정규화
85
- df['volume_scaled'] = self.scaler.fit_transform(df[['volume']])
86
- mylogger.debug('_preprocessing_for_prophet')
87
- mylogger.debug(df)
88
- return df
89
-
90
- def _make_forecast(self) -> pd.DataFrame:
91
- # 정규화된 'volume_scaled' 변수를 외부 변수로 추가
92
- self.model.add_regressor('volume_scaled')
83
+ def get_raw_data() -> pd.DataFrame:
84
+ """
85
+ Yahoo Finance에서 4년간의 주가 데이터를 가져옵니다.
86
+
87
+ 반환값:
88
+ pd.DataFrame: 가져온 주가 데이터프레임.
89
+ """
90
+ # 오늘 날짜 가져오기
91
+ today = datetime.today()
92
+
93
+ # 4년 전 날짜 계산 (4년 = 365일 * 4)
94
+ four_years_ago = today - timedelta(days=365 * 4)
95
+
96
+ return yf.download(
97
+ tickers=self.ticker,
98
+ start=four_years_ago.strftime('%Y-%m-%d'),
99
+ end=today.strftime('%Y-%m-%d')
100
+ )
101
+
102
+ def preprocessing_for_prophet() -> pd.DataFrame:
103
+ """
104
+ Prophet 모델에서 사용할 수 있도록 데이터를 준비합니다.
105
+
106
+ - 'Close'와 'Volume' 열을 사용.
107
+ - 날짜를 'ds', 종가를 'y', 거래량을 'volume'으로 변경.
108
+ - 거래량 데이터를 정규화하여 'volume_scaled' 열 추가.
109
+
110
+ 반환값:
111
+ pd.DataFrame: Prophet 모델 입력 형식에 맞게 처리된 데이터프레임.
112
+ """
113
+ df = self.raw_data[['Close', 'Volume']].reset_index()
114
+ df.columns = ['ds', 'y', 'volume'] # Prophet의 형식에 맞게 열 이름 변경
115
+
116
+ # ds 열에서 타임존 제거
117
+ df['ds'] = df['ds'].dt.tz_localize(None)
118
+
119
+ # 추가 변수를 정규화
120
+ df['volume_scaled'] = self.scaler.fit_transform(df[['volume']])
121
+ mylogger.debug('_preprocessing_for_prophet')
122
+ mylogger.debug(df)
123
+ return df
124
+
125
+ def make_forecast() -> pd.DataFrame:
126
+ """
127
+ Prophet 모델을 사용하여 향후 180일간 주가를 예측합니다.
128
+
129
+ - 거래량 데이터('volume_scaled')를 추가 변수로 사용.
130
+ - 예측 결과를 데이터프레임으로 반환.
131
+
132
+ 반환값:
133
+ pd.DataFrame: 예측 결과를 포함한 데이터프레임.
134
+ """
135
+ # 정규화된 'volume_scaled' 변수를 외부 변수로 추가
136
+ self.model.add_regressor('volume_scaled')
137
+
138
+ self.model.fit(self.df_real)
139
+
140
+ # 향후 180일 동안의 주가 예측
141
+ future = self.model.make_future_dataframe(periods=180)
142
+ mylogger.debug('_make_forecast_future')
143
+ mylogger.debug(future)
144
+
145
+ # 미래 데이터에 거래량 추가 (평균 거래량을 사용해 정규화)
146
+ future_volume = pd.DataFrame({'volume': [self.raw_data['Volume'].mean()] * len(future)})
147
+ future['volume_scaled'] = self.scaler.transform(future_volume[['volume']])
148
+
149
+ forecast = self.model.predict(future)
150
+ mylogger.debug('_make_forecast')
151
+ mylogger.debug(forecast)
152
+ return forecast
153
+
154
+ print("Initializing data for MyProphet")
93
155
 
94
- self.model.fit(self.df_real)
156
+ self.scaler = StandardScaler()
157
+ self.model = Prophet()
95
158
 
96
- # 향후 180일 동안의 주가 예측
97
- future = self.model.make_future_dataframe(periods=180)
98
- mylogger.debug('_make_forecast_future')
99
- mylogger.debug(future)
159
+ self.raw_data = get_raw_data()
160
+ self.df_real = preprocessing_for_prophet()
161
+ self.df_forecast = make_forecast()
100
162
 
101
- # 미래 데이터에 거래량 추가 (평균 거래량을 사용해 정규화)
102
- future_volume = pd.DataFrame({'volume': [self.raw_data['Volume'].mean()] * len(future)})
103
- future['volume_scaled'] = self.scaler.transform(future_volume[['volume']])
163
+ def generate_data(self, refresh: bool) -> ProphetData:
164
+ """
165
+ ProphetData 객체를 생성하거나 캐시된 데이터를 반환합니다.
104
166
 
105
- forecast = self.model.predict(future)
106
- mylogger.debug('_make_forecast')
107
- mylogger.debug(forecast)
108
- return forecast
167
+ 매개변수:
168
+ refresh (bool): 데이터를 새로 생성할지 여부.
109
169
 
110
- def get_yhat(self) -> dict:
111
- """
112
- 최근 날짜의 예측데이터를 반환한다.
113
- :return: {'ds':..., 'yhat':.., 'yhat_lower':.., 'yhat_upper':..,}
170
+ 반환값:
171
+ ProphetData: 생성된 ProphetData 객체.
114
172
  """
115
- df = self.df_forecast
116
- last_real_date = self.df_real.iloc[-1]['ds']
117
- mylogger.info(last_real_date)
118
- yhat_dict = df[df['ds']==last_real_date].iloc[0][['ds', 'yhat_lower', 'yhat_upper', 'yhat']].to_dict()
119
- mylogger.info(yhat_dict)
120
- return yhat_dict
173
+ print("**** Start generate_data... ****")
174
+ redis_name = f'{self.ticker}_myprophet_data'
175
+
176
+ print(
177
+ f"redisname: '{redis_name}' / refresh : {refresh} / expire_time : {expire_time / 3600}h")
178
+
179
+ def fetch_generate_prophet_data() -> ProphetData:
180
+ def scoring(price: float, yhat_lower: float, yhat_upper: float, method: str = 'sigmoid') -> Tuple[str, int]:
181
+ """
182
+ 주어진 가격과 임계값을 기준으로 매매 행동('buy', 'sell', 'hold')과 점수를 결정합니다.
183
+
184
+ 매개변수:
185
+ price (float): 자산의 현재 가격.
186
+ yhat_lower (float): 가격 예측의 하한 임계값.
187
+ yhat_upper (float): 가격 예측의 상한 임계값.
188
+ method (str, optional): 점수를 계산하는 방법 ('sigmoid' 또는 'log'). 기본값은 'sigmoid'.
189
+
190
+ 반환값:
191
+ Tuple[str, int]: 매매 행동('buy', 'sell', 'hold')과 관련 점수로 이루어진 튜플.
192
+
193
+ 예외:
194
+ ValueError: 지원되지 않는 점수 계산 방법이 제공된 경우 발생.
195
+ """
196
+
197
+ def calculate_score(deviation: float, method_in: str) -> int:
198
+ if method_in == 'sigmoid':
199
+ return tools.to_int(eval.Tools.sigmoid_score(deviation))
200
+ elif method_in == 'log':
201
+ return tools.to_int(eval.Tools.log_score(deviation))
202
+ else:
203
+ raise ValueError(f"Unsupported scoring method: {method}")
204
+
205
+ buying_deviation = eval.Tools.cal_deviation(price, yhat_lower)
206
+ buying_score = calculate_score(buying_deviation, method)
207
+ if price >= yhat_lower:
208
+ buying_score = -buying_score
209
+
210
+ selling_deviation = eval.Tools.cal_deviation(price, yhat_upper)
211
+ selling_score = calculate_score(selling_deviation, method)
212
+ if price <= yhat_upper:
213
+ selling_score = -selling_score
214
+
215
+ if buying_score > 0:
216
+ return 'buy', buying_score
217
+ elif selling_score > 0:
218
+ return 'sell', selling_score
219
+ else:
220
+ return 'hold', 0
221
+
222
+ self.initializing()
223
+ latest_row = self.df_real.iloc[-1]
224
+ latest_yhat = \
225
+ self.df_forecast.loc[self.df_forecast['ds'] == latest_row['ds'], ['ds', 'yhat_lower', 'yhat_upper', 'yhat']].iloc[
226
+ 0].to_dict()
227
+
228
+ data = ProphetData(
229
+ ticker=self.ticker,
230
+ date=latest_row['ds'].date(),
231
+ price=latest_row['y'],
232
+ yhat=latest_yhat['yhat'],
233
+ yhat_lower=latest_yhat['yhat_lower'],
234
+ yhat_upper=latest_yhat['yhat_upper'],
235
+ )
236
+
237
+ data.trading_action, data.score = scoring(data.price, data.yhat_lower, data.yhat_upper)
238
+ return data
239
+
240
+
241
+ prophet_data = myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_generate_prophet_data, timer=expire_time)
242
+
243
+ return prophet_data
121
244
 
122
245
  def visualization(self):
246
+ """
247
+ Prophet 모델의 예측 결과를 시각화합니다.
248
+
249
+ - Matplotlib를 사용하여 예측 결과 및 추세/계절성을 그래프로 출력.
250
+ """
251
+ self.initializing()
123
252
  # 예측 결과 출력
124
253
  print(self.df_forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail())
125
254
  # 예측 결과 시각화 (Matplotlib 사용)
@@ -130,10 +259,19 @@ class MyProphet:
130
259
 
131
260
  def export(self, to="html") -> Optional[str]:
132
261
  """
133
- prophet과 plotly로 그래프를 그려서 html을 문자열로 반환
134
- :param to: html, png, file
135
- :return:
262
+ 예측 결과를 시각화하여 다양한 형식으로 내보냅니다.
263
+
264
+ 매개변수:
265
+ refresh (bool): 데이터를 새로 생성할지 여부.
266
+ to (str): 내보낼 형식 ('html', 'png', 'file').
267
+
268
+ 반환값:
269
+ Optional[str]: HTML 문자열로 반환하거나 PNG/HTML 파일로 저장합니다.
270
+
271
+ 예외:
272
+ Exception: 지원되지 않는 형식의 경우 예외 발생.
136
273
  """
274
+ self.initializing()
137
275
  # Plotly를 사용한 시각화
138
276
  fig = go.Figure()
139
277
 
@@ -176,62 +314,56 @@ class MyProphet:
176
314
  else:
177
315
  Exception("to 인자가 맞지 않습니다.")
178
316
 
179
- def scoring(self) -> Tuple[str, int]:
317
+ def is_prophet_up(self, refresh: bool) -> bool:
180
318
  """
181
- Calculate and return a trading action and associated score based on recent market data and forecasted values.
182
-
183
- The method computes deviations between the recent price and predefined forecasted bounds (`yhat_lower` and `yhat_upper`)
184
- to determine whether to buy, sell, or hold a financial instrument. The calculation involves generating a deviation score
185
- that is transformed using a sigmoid function. The scores are then adjusted based on the position of the recent price relative
186
- to the forecasted bounds. Logging is used extensively throughout the method to record the values and decisions for debugging
187
- and traceability purposes.
319
+ Prophet 예측이 상승 추세인지 여부를 확인합니다.
188
320
 
189
- Returns:
190
- A tuple containing a string indicating the recommended trading action ('buy', 'sell', 'hold')
191
- and an integer score associated with that action.
321
+ 매개변수:
322
+ refresh (bool): 데이터를 새로 생성할지 여부.
192
323
 
193
- Raises:
194
- KeyError: If required keys are missing in the `yhat_dict` or `last_real_data` dictionary-like structures.
324
+ 반환값:
325
+ bool: 상승 추세 여부.
195
326
  """
196
- last_real_data = self.df_real.iloc[-1]
197
- recent_price = last_real_data['y']
198
- recent_date = datetime.strftime(last_real_data['ds'], '%Y-%m-%d')
199
- yhat_dict = self.get_yhat()
200
- mylogger.info(f'recent_price: {recent_price}, yhat_dict: {yhat_dict}')
201
-
202
- yhat_lower = tools.to_int(yhat_dict['yhat_lower'])
203
- yhat_upper = tools.to_int(yhat_dict['yhat_upper'])
204
- #yhat = tools.to_int(yhat_dict['yhat'])
205
-
206
- buying_deviation = eval.Tools.cal_deviation(recent_price, yhat_lower)
207
-
208
- buying_score = tools.to_int(eval.Tools.sigmoid_score(buying_deviation))
209
- # score = tools.to_int(Tools.log_score(deviation))
327
+ print("**** Caching is_prophet_up ... ****")
328
+ redis_name = f'{self.ticker}_is_prophet_up'
329
+ print(f"redisname: '{redis_name}' / expire_time : {expire_time / 3600}h")
210
330
 
211
- if recent_price >= yhat_lower:
212
- buying_score = -buying_score
331
+ def fetch_is_prophet_up():
332
+ self.initializing()
333
+ yhat_dict = self.df_forecast.set_index('ds')['yhat'].to_dict()
334
+ return tsa.common.is_up_by_OLS(yhat_dict)
213
335
 
214
- selling_deviation = eval.Tools.cal_deviation(recent_price, yhat_upper)
336
+ return myredis.Base.fetch_and_cache_data(redis_name, refresh, fetch_is_prophet_up, timer=expire_time)
215
337
 
216
- selling_score = tools.to_int(eval.Tools.sigmoid_score(selling_deviation))
217
- # score = tools.to_int(Tools.log_score(deviation))
338
+ @staticmethod
339
+ def is_valid_date(date_string):
340
+ """
341
+ 주어진 문자열이 'YYYY-MM-DD' 형식의 유효한 날짜인지 확인합니다.
218
342
 
219
- if recent_price <= yhat_upper:
220
- selling_score = -selling_score
343
+ 매개변수:
344
+ date_string (str): 확인할 날짜 문자열.
221
345
 
222
- mylogger.info(f"{self.ticker} date: {recent_date} 가격: {recent_price}"
223
- f" yhat_lower:{yhat_lower} yhat_upper:{yhat_upper}"
224
- f" buying_score:{buying_score} selling_score:{selling_score}")
346
+ 반환값:
347
+ bool: 유효한 날짜 형식이면 True, 그렇지 않으면 False.
348
+ """
349
+ try:
350
+ # %Y-%m-%d 형식으로 문자열을 datetime 객체로 변환 시도
351
+ datetime.strptime(date_string, '%Y-%m-%d')
352
+ return True
353
+ except ValueError:
354
+ # 변환이 실패하면 ValueError가 발생, 형식이 맞지 않음
355
+ return False
225
356
 
226
- if buying_score > 0:
227
- return 'buy', buying_score
228
- elif selling_score > 0:
229
- return 'sell', selling_score
230
- else:
231
- return 'hold', 0
232
357
 
233
358
 
234
359
  class CorpProphet(MyProphet):
360
+ """
361
+ 기업 코드를 기반으로 주가를 예측하는 Prophet 모델 클래스.
362
+
363
+ 속성:
364
+ code (str): 기업 코드.
365
+ name (str): 기업명.
366
+ """
235
367
  def __init__(self, code: str):
236
368
  assert tools.is_6digit(code), f'Invalid value : {code}'
237
369
  self._code = code
@@ -251,11 +383,16 @@ class CorpProphet(MyProphet):
251
383
 
252
384
 
253
385
  class MIProphet(MyProphet):
386
+ """
387
+ 특정 MI(Market Indicator) 타입에 따라 주가를 예측하는 Prophet 모델 클래스.
388
+
389
+ 속성:
390
+ mi_type (str): MI 타입.
391
+ """
254
392
  def __init__(self, mi_type: str):
255
- from analyser_hj3415.analyser.tsa import MIs
256
- assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
393
+ assert mi_type in MIs._fields, f"Invalid MI type ({MIs._fields})"
257
394
  self._mi_type = mi_type
258
- super().__init__(ticker=MIs[mi_type])
395
+ super().__init__(ticker=getattr(MIs, mi_type))
259
396
 
260
397
  @property
261
398
  def mi_type(self) -> str:
@@ -263,7 +400,6 @@ class MIProphet(MyProphet):
263
400
 
264
401
  @mi_type.setter
265
402
  def mi_type(self, mi_type: str):
266
- from analyser_hj3415.analyser.tsa import MIs
267
- assert mi_type in MIs.keys(), f"Invalid MI type ({MIs.keys()})"
403
+ assert mi_type in MIs._fields, f"Invalid MI type ({MIs._fields})"
268
404
  self._mi_type = mi_type
269
- self.ticker = MIs[mi_type]
405
+ self.ticker = getattr(MIs, mi_type)
analyser_hj3415/cli.py CHANGED
@@ -2,12 +2,11 @@ import argparse
2
2
  import pprint
3
3
 
4
4
  from utils_hj3415 import tools
5
- from analyser_hj3415.analyser import eval, tsa, compile
5
+ from analyser_hj3415.analyser import eval, tsa, compile, MIs
6
6
  from db_hj3415 import myredis, mymongo
7
7
 
8
8
 
9
9
  def analyser_manager():
10
- from analyser_hj3415.analyser.tsa import MIs
11
10
  parser = argparse.ArgumentParser(description="Analyser Commands")
12
11
  type_subparsers = parser.add_subparsers(dest='type', help='분석 타입')
13
12
 
@@ -19,7 +18,7 @@ def analyser_manager():
19
18
  ranking_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
20
19
  # prophet - score 파서
21
20
  prophet_get_parser = prophet_subparser.add_parser('score', help='prophet score 계산')
22
- prophet_get_parser.add_argument('target', type=str, help=f'종목코드 or {list(MIs.keys())}')
21
+ prophet_get_parser.add_argument('target', type=str, help=f'종목코드 or {list(MIs._fields)}')
23
22
  prophet_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
24
23
 
25
24
  # lstm 명령어 서브파서
@@ -28,10 +27,11 @@ def analyser_manager():
28
27
  # lstm - caching 파서
29
28
  caching_parser = lstm_subparser.add_parser('caching', help='lstm 랭킹 책정 및 레디스 저장')
30
29
  caching_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
30
+ caching_parser.add_argument('-mi', '--market_index', action='store_true', help='Market index도 캐싱할지')
31
31
  caching_parser.add_argument('-t', '--top', type=int, help='prophet ranking 몇위까지 작업을 할지')
32
32
  # lstm - predict 파서
33
33
  lstm_get_parser = lstm_subparser.add_parser('predict', help='lstm get final prediction 시행')
34
- lstm_get_parser.add_argument('target', type=str, help=f'종목코드 or {list(MIs.keys())}')
34
+ lstm_get_parser.add_argument('target', type=str, help=f'종목코드 or {list(MIs._fields)}')
35
35
  lstm_get_parser.add_argument('-n', '--num', type=int, default=5, help='ensemble training 횟수 설정')
36
36
  lstm_get_parser.add_argument('-r', '--refresh', action='store_true', help='래디스 캐시를 사용하지 않고 강제로 재계산 할지')
37
37
 
@@ -177,13 +177,14 @@ def analyser_manager():
177
177
  print(e)
178
178
  mymongo.Logs.save('cli', 'ERROR', f'analyser prophet ranking 실행중 에러 - {e}')
179
179
  elif args.command == 'score':
180
- if args.target in MIs.keys():
181
- myprophet = tsa.MIProphet(args.target)
180
+ mi_type = str(args.target).upper()
181
+ if mi_type in MIs._fields:
182
+ myprophet = tsa.MIProphet(mi_type)
182
183
  elif tools.is_6digit(args.target):
183
184
  myprophet = tsa.CorpProphet(args.target)
184
185
  else:
185
186
  raise Exception("Invalid target")
186
- print(myprophet.scoring())
187
+ print(myprophet.generate_data(refresh=args.refresh).score)
187
188
  # mymongo.Logs.save('cli','INFO', f'run >> analyser prophet get {args.target}')
188
189
 
189
190
  elif args.type == 'lstm':
@@ -194,18 +195,19 @@ def analyser_manager():
194
195
  compile.CorpCompile.analyse_lstm_topn(refresh=args.refresh, top=args.top)
195
196
  else:
196
197
  compile.CorpCompile.analyse_lstm_topn(refresh=args.refresh)
197
- compile.MICompile.analyser_lstm_all_mi(refresh=args.refresh)
198
+ if args.market_index:
199
+ compile.MICompile.analyser_lstm_all_mi(refresh=args.refresh)
198
200
  except Exception as e:
199
201
  print(e)
200
202
  mymongo.Logs.save('cli','ERROR', f'analyser lstm caching 실행중 에러 - {e}')
201
203
  elif args.command == 'predict':
202
- if args.target in MIs.keys():
203
- mylstm = tsa.MILSTM(args.target)
204
+ mi_type = str(args.target).upper()
205
+ if mi_type in MIs._fields:
206
+ mylstm = tsa.MILSTM(mi_type)
204
207
  elif tools.is_6digit(args.target):
205
208
  mylstm = tsa.CorpLSTM(args.target)
206
209
  else:
207
210
  raise Exception("Invalid target")
208
- mylstm.initializing()
209
211
  future_data, grade = mylstm.get_final_predictions(refresh=args.refresh, num=args.num)
210
212
  print(future_data)
211
213
  print(grade)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: analyser_hj3415
3
- Version: 3.2.1
3
+ Version: 3.3.0
4
4
  Summary: Stock analyser and database processing programs
5
5
  Requires-Python: >=3.6
6
6
  Description-Content-Type: text/markdown
@@ -0,0 +1,23 @@
1
+ analyser_hj3415/__init__.py,sha256=jqHEUoBeihYOMaS0bPOe3nRVXBufZ0clxc6M6jxPY0o,320
2
+ analyser_hj3415/cli.py,sha256=rn9feZcUpgIXM8JX0OsNCKy9oZauMnEcNKR38sSQfds,12017
3
+ analyser_hj3415/analyser/__init__.py,sha256=N0XyBfWJNpDS_6JYziKETWePO_jtFB1m7E8Qbwt1w0Q,1096
4
+ analyser_hj3415/analyser/compile.py,sha256=_zOxWfBSLGv2QuKqL2LR-OS97JzXvkZfSSrpuRLU48c,8037
5
+ analyser_hj3415/analyser/eval/__init__.py,sha256=IP1d0Q3nOCAD3zK1qxrC685MkJQfUh-qaXc7xptTxk8,80
6
+ analyser_hj3415/analyser/eval/blue.py,sha256=p9_ddqLMJGq5HSn6NApuLhrX29qD--AASig9F71eb8I,10952
7
+ analyser_hj3415/analyser/eval/common.py,sha256=sNXapoofShA43ww_SLjXmIjkrAr1AhAcezdaN_X_3Us,11443
8
+ analyser_hj3415/analyser/eval/growth.py,sha256=CXAMxGUcjC75RRS6sDhC_Ol5p-y2L7Wl4LR3a04ouxM,6525
9
+ analyser_hj3415/analyser/eval/mil.py,sha256=mFMiFCuCBvlQrhQcM5hMg8U4zF32TS1GnUmk8fPd950,15178
10
+ analyser_hj3415/analyser/eval/red.py,sha256=8aJPpiVzLOZtt6kILCzqcfL8BrEVgIld1iI3StGvg8A,12193
11
+ analyser_hj3415/analyser/tsa/__init__.py,sha256=pg20ZQRABedTdaIoOr5t043RNKtJ7ji_WmnZrD1IhPg,147
12
+ analyser_hj3415/analyser/tsa/common.py,sha256=OnsZ_cFYmNzmk0tV5qSqVW-5jJyrwMWHguWdS2Z6fvY,979
13
+ analyser_hj3415/analyser/tsa/lstm.py,sha256=P8peqg6ZUpCSNKupjFlyba3xbPZoYtpd2UihXib_4Do,28548
14
+ analyser_hj3415/analyser/tsa/prophet.py,sha256=50tyvTZSfo3UcLuXMsgzr3ibsh5QHCv5SiQqKjM9igg,14658
15
+ analyser_hj3415/workroom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
+ analyser_hj3415/workroom/mysklearn.py,sha256=wJXKz5MqqTzADdG2mqRMMzc_G9RzwYjj5_j4gyOopxQ,2030
17
+ analyser_hj3415/workroom/mysklearn2.py,sha256=1lIy6EWEQHkOzDS-av8U0zQH6DuCLKWMI73dnJx5KRs,1495
18
+ analyser_hj3415/workroom/score.py,sha256=P6nHBJYmyhigGtT4qna4BmNtvt4B93b7SKyzdstJK24,17376
19
+ analyser_hj3415/workroom/trash.py,sha256=zF-W0piqkGr66UP6-iybo9EXh2gO0RP6R1FnIpsGkl8,12262
20
+ analyser_hj3415-3.3.0.dist-info/entry_points.txt,sha256=ZfjPnJuH8SzvhE9vftIPMBIofsc65IAWYOhqOC_L5ck,65
21
+ analyser_hj3415-3.3.0.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
22
+ analyser_hj3415-3.3.0.dist-info/METADATA,sha256=oQXcQ45N87lL1UNCjceZWvAsgbzOKoL2m06iIM3cOvE,6777
23
+ analyser_hj3415-3.3.0.dist-info/RECORD,,
@@ -1,22 +0,0 @@
1
- analyser_hj3415/__init__.py,sha256=f2E9Neh7Nzkhvdj7HWWlgxZK2sB95rBtaIgWEHzxK9E,450
2
- analyser_hj3415/cli.py,sha256=iNyZz77BNe_aPcqiJrhWhjvxJZJQfmWQev8dM9xu2H8,11824
3
- analyser_hj3415/analyser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- analyser_hj3415/analyser/compile.py,sha256=INd9XI-V21Q48HQkk8oUke7k_mE4kIbqorahiaPeKaQ,7720
5
- analyser_hj3415/analyser/eval/__init__.py,sha256=IP1d0Q3nOCAD3zK1qxrC685MkJQfUh-qaXc7xptTxk8,80
6
- analyser_hj3415/analyser/eval/blue.py,sha256=fq_eln7-EdwICNQ2sMXAfZKXGhQ29EaJwsGvn7xA29U,7632
7
- analyser_hj3415/analyser/eval/common.py,sha256=wcWJg_jNgr02i1U62oZGgLt2iscdle9X-u4aMnZl89Q,14127
8
- analyser_hj3415/analyser/eval/growth.py,sha256=OXuBuPzVw3q6kpelNigiX7xvJNUP1gv26DNetc4aews,3315
9
- analyser_hj3415/analyser/eval/mil.py,sha256=wN1jPu5zLJjoDk3kL7piL-4jWhpsAMeQpsTZll0a2dw,10568
10
- analyser_hj3415/analyser/eval/red.py,sha256=rJbidKlo2s2EJHBGn4HDbfCDcEGP5Rst8iQeJ6jlzNA,10988
11
- analyser_hj3415/analyser/tsa/__init__.py,sha256=0XIpMgYIiyDrSE3sp9S0J0gXwW4cpk6nQmxSjC3KkY4,371
12
- analyser_hj3415/analyser/tsa/lstm.py,sha256=22Rd1PTBeDAvITb1zw65Y51lLB76w6MyWXNKku6RzjM,29975
13
- analyser_hj3415/analyser/tsa/prophet.py,sha256=jHaOufe7FAJanPXgPh0YxvQ4OiATJue_7cDyfHnq1hc,10156
14
- analyser_hj3415/workroom/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- analyser_hj3415/workroom/mysklearn.py,sha256=wJXKz5MqqTzADdG2mqRMMzc_G9RzwYjj5_j4gyOopxQ,2030
16
- analyser_hj3415/workroom/mysklearn2.py,sha256=1lIy6EWEQHkOzDS-av8U0zQH6DuCLKWMI73dnJx5KRs,1495
17
- analyser_hj3415/workroom/score.py,sha256=P6nHBJYmyhigGtT4qna4BmNtvt4B93b7SKyzdstJK24,17376
18
- analyser_hj3415/workroom/trash.py,sha256=zF-W0piqkGr66UP6-iybo9EXh2gO0RP6R1FnIpsGkl8,12262
19
- analyser_hj3415-3.2.1.dist-info/entry_points.txt,sha256=ZfjPnJuH8SzvhE9vftIPMBIofsc65IAWYOhqOC_L5ck,65
20
- analyser_hj3415-3.2.1.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
21
- analyser_hj3415-3.2.1.dist-info/METADATA,sha256=ysCQEllcgKTZjSHajJ6lx0iyGfS_DI5MUACiPRpnwew,6777
22
- analyser_hj3415-3.2.1.dist-info/RECORD,,