Пример #1
0
    def train_n_invest_twins(self, corp_code, corp_name, no) -> list:
        """겨별 세션과 통합세션에서 예측한 값의 평균을 예측값으로 한다."""
        stocks = Stocks(self.params)
        trains_data = TrainsData(self.params)
        learning = Learning(self.params)
        params_all = GlobalParams('ALL_CORPS')
        learning_all = Learning(params_all)
        invest = MockInvestment(self.params)

        stock_data = stocks.get_stock_data(corp_code)
        data_params, scaler_close, dataX_last = trains_data.get_train_test(
            stock_data)
        tp = learning.learn(corp_code, corp_name, data_params)
        tp_all = learning_all.learn(corp_code, corp_name, data_params)
        ip = invest.invest_n_all(corp_code, dataX_last, data_params,
                                 params_all, scaler_close)
        tp.test_rmse = np.mean([tp.test_rmse, tp_all.test_rmse])
        tp.train_count = tp.train_count + tp_all.train_count
        return self.get_train_invest_result(no, corp_code, corp_name,
                                            stock_data, tp, ip)
Пример #2
0
    def train(self,
              corp_code: str,
              corp_name: str,
              stock_data: pd.DataFrame,
              scaler_close: preprocessing.MinMaxScaler = None,
              invest_only: bool = False) -> TrainParams:
        """입력한 회사에 대해서 학습시킨다"""

        trains_data = TrainsData(self.params)
        learning = Learning(self.params)

        data_params, scaler_close, dataX_last = trains_data.get_train_test(
            stock_data, scaler_close)
        if invest_only:
            tp = learning.get_test_rmse(corp_code, data_params)
        else:
            tp = learning.learn(corp_code, corp_name, data_params)
        tp.scaler_close = scaler_close
        tp.dataX_last = dataX_last
        return tp
Пример #3
0
    def train_n_invests_for_all(self, corps):
        """입력한 회사들에 대해서 학습시키고 모의투자를 실행한다."""
        stocks = Stocks(self.params)
        trains_data = TrainsData(self.params)
        learning = Learning(self.params)
        invest = MockInvestment(self.params)

        list = []
        for index, corp_data in corps.iterrows():
            corp_code = corp_data['종목코드']
            corp_name = corp_data['회사명']
            try:
                stock_data = stocks.get_stock_data(corp_code)
                data_params, scaler_close, dataX_last = trains_data.get_train_test(
                    stock_data)
            except Exception:
                exc_type, exc_value, exc_traceback = sys.exc_info()
                traceback.print_exception(exc_type,
                                          exc_value,
                                          exc_traceback,
                                          file=sys.stdout)
                continue
            list.append({
                'corp_code': corp_code,
                'corp_name': corp_name,
                'scaler_close': scaler_close,
                'dataX_last': dataX_last,
                'data_params': data_params,
                'stock_data': stock_data
            })

        all_data_params = self.gather_data_params(list)
        tp = learning.learn("ALL_CORPS", "ALL_CORPS", all_data_params)

        invest_daily_data = []
        comp_rmses = []
        index = 1
        for item in list:
            corp_code = item['corp_code']
            corp_name = item['corp_data']
            dataX_last = item['dataX_last']
            data_params = item['data_params']
            scaler_close = item['scaler_close']
            stock_data = item['stock_data']
            ip = invest.invest(corp_code, corp_name, tp)

            visualizer = LearningVisualizer(self.params)
            visualizer.draw_predictions(corp_name, scaler_close, data_params,
                                        tp.test_predict, ip.predict_list)

            result, invest_daily = self.get_train_invest_result(
                index, corp_code, corp_name, tp.test_rmse, ip.last_money,
                ip.index_money, tp.train_count, stock_data, data_params,
                scaler_close, ip.last_predict)
            if invest_daily != None:
                invest_daily_data.append(invest_daily)
            comp_rmses.append(result)
            index += 1

        df_comp_rmses = pd.DataFrame(comp_rmses, columns=self.result_columns)
        DataUtils.save_csv(df_comp_rmses, self.get_result_file_path())

        if len(invest_daily_data) > 1:
            try:
                visualizer = InvestVisualizer(self.params)
                return visualizer.draw_invest_daily(invest_daily_data, corps)
            except Exception:
                exc_type, exc_value, exc_traceback = sys.exc_info()
                traceback.print_exception(exc_type,
                                          exc_value,
                                          exc_traceback,
                                          file=sys.stdout)