def get_predictions_input(config_filename, adjClose, datearray): params = get_params(config_filename) first_history_index = params['first_history_index'] num_periods_history = params['num_periods_history'] increments = params['increments'] print(" ... generating examples ...") Xpredict, Ypredict, dates_predict, companies_predict = generateExamples3layerGen(datearray, adjClose, first_history_index, num_periods_history, increments, output_incr='monthly') print(" ... examples generated ...") return Xpredict, Ypredict, dates_predict, companies_predict
def one_model_prediction(imodel, first_history_index, datearray, adjClose, symbols, num_stocks, verbose=False): # -------------------------------------------------- # build DL model # -------------------------------------------------- config_filename = imodel.replace('.hdf','.txt') print("\n ... config_filename = ", config_filename) #print(".", end='') model = build_model(config_filename) # collect meta data for weighting ensemble_symbols params = get_params(config_filename) #num_stocks = params['num_stocks'] num_periods_history = params['num_periods_history'] increments = params['increments'] symbols_predict = symbols Xpredict, Ypredict, dates_predict, companies_predict = generateExamples3layerGen(datearray, adjClose, first_history_index, num_periods_history, increments, output_incr='monthly') dates_predict = np.array(dates_predict) companies_predict = np.array(companies_predict) # -------------------------------------------------- # make predictions monthly for backtesting # - there might be some bias since entire preiod # has data used for training # -------------------------------------------------- try: model.load_weights(imodel) except: pass dates_predict = np.array(dates_predict) companies_predict = np.array(companies_predict) inum_stocks = num_stocks cumu_system = [10000.0] cumu_BH = [10000.0] plotdates = [dates_predict[0]] _forecast_mean = [] _forecast_median = [] _forecast_stdev = [] for i, idate in enumerate(dates_predict[1:]): if idate != dates[-1] and companies_predict[i] < companies_predict[i-1]: # show predictions for (single) last date _Xtrain = Xpredict[dates_predict == idate] _dates = np.array(dates_predict[dates_predict == idate]) _companies = np.array(companies_predict[dates_predict == idate]) #print("forecast shape = ", model.predict(_Xtrain).shape) _forecast = model.predict(_Xtrain)[:, 0] _symbols = np.array(symbols_predict) indices = _forecast.argsort() sorted_forecast = _forecast[indices] sorted_symbols = _symbols[indices] try: _Ytrain = Ypredict[dates_predict == idate] sorted_Ytrain = _Ytrain[indices] BH_gain = sorted_Ytrain.mean() except: BH_gain = 0.0 avg_gain = sorted_Ytrain[-inum_stocks:].mean() _forecast_mean.append(_forecast.mean()) _forecast_median.append(np.median(_forecast)) _forecast_stdev.append(_forecast.std()) if verbose: print(" ... date, system_gain, B&H_gain = ", idate, format(avg_gain, '3.1%'), format(BH_gain, '3.1%'), sorted_symbols[-inum_stocks:]) cumu_system.append(cumu_system[-1] * (1.+avg_gain)) cumu_BH.append(cumu_BH[-1] * (1.+BH_gain)) plotdates.append(idate) print(" ... system, B&H = ", format(cumu_system[-1], '10,.0f'), format(cumu_BH[-1], '10,.0f')) return cumu_system, cumu_BH, sorted_symbols, plotdates