def rebalance_porfolio(date, asset, companies_data): # date_string = datetime.datetime.strftime(date, "%Y-%m-%d") print("=" * 50) print("Rebalancing Portfolio For Current Date: ", date) print("=" * 50) # Load Trained Model lstm = LstmModel(name="Test2", load=True) # Save Values In Dict companies_rtv = dict() companies_prices = dict() # Predict One-Week Price # Calculate Return-To-Volatility # Save The Result For Different Companies day_in, day_want, step = 50, 10, 2 for company, data in companies_data.items(): # Predictions From LSTM idx = data[data['Date'] == date].index.item() _input = data.iloc[idx - day_in:idx + day_want - step + 1, 1:data.shape[1]] predictions = pd.DataFrame(lstm.predict(_input), index=pd.date_range(start=date, periods=10)) # Calculate Return-To-Volatility rtv = calculate_rtv(predictions) companies_rtv[company] = rtv # Get Price List companies_prices[company] = data.iloc[idx, 5] # Sort The Results Descending & Choose Top 10 Companies filtered_list = list(filter(lambda x: x[1] >= 0, companies_rtv.items())) sorted_list = sorted(filtered_list, key=lambda x: x[1], reverse=True) companies_rtv_filter = {t[0]: t[1] for t in sorted_list[:10]} # Build Portfolio rtv_sum = sum(companies_rtv_filter.values()) portfolio_pct = { key: (value / rtv_sum) for key, value in companies_rtv_filter.items() } portfolio = { company: ((asset * pct) / companies_prices[company]) for company, pct in portfolio_pct.items() } print("Company Prices: ", companies_prices) print("Companies Return-To-Volatility: ", companies_rtv) print("Filtered 10 Companies: ", companies_rtv_filter) print("Portfolio Percentage: ", portfolio_pct) print("Portfolio: ", portfolio) return portfolio, portfolio_pct
def dummy_porfolio(date, asset, companies_data): lstm = LstmModel(name="Test2", load=True) day_in, day_want, step = 50, 10, 2 for company, data in companies_data.items(): # Predictions From LSTM idx = data[data['Date'] == date].index.item() print(data.iloc[idx - day_in:idx + day_want - step + 1, 0:data.shape[1]]) _input = data.iloc[idx - day_in:idx + day_want - step + 1, 1:data.shape[1]] predictions = pd.DataFrame(lstm.predict(_input), index=pd.date_range(start=date, periods=10)) break return {}, {}
def rebalance_porfolio(date, asset, companies_data): # date_string = datetime.datetime.strftime(date, "%Y-%m-%d") print("=" * 50) print("Rebalancing Portfolio For Current Date: ", date) print("=" * 50) # Load Trained Model lstm = LstmModel(name="Old1", load=True) # Save Values In Dict companies_rtv = dict() companies_prices = dict() # Predict One-Week Price # Calculate Return-To-Volatility # Save The Result For Different Companies day_in, day_out, num_features = lstm.load_settings() for company, data in companies_data.items(): # Current Date's Index try: idx = data[data['Date'] == date].index.values[0] except IndexError: # When Company Data Is Empty On That Date continue # Predictions From LSTM _input = data.iloc[idx - day_in:idx]['Adj Close'].values _input = np.reshape(_input, (_input.shape[0], 1)) predictions = pd.DataFrame(lstm.predict(company=company, _input=_input), index=pd.date_range(start=date, periods=day_out)) # Calculate Return-To-Volatility rtv = calculate_rtv(predictions) companies_rtv[company] = rtv # Get Adj Closing Price List companies_prices[company] = data.iloc[idx, 4] # Sort The Results Descending & Choose Top 10 Companies filtered_list = list(filter(lambda x: x[1] > 0, companies_rtv.items())) sorted_list = sorted(filtered_list, key=lambda x: x[1], reverse=True) companies_rtv_filter = {t[0]: t[1] for t in sorted_list[:10]} # Build Portfolio rtv_sum = sum(companies_rtv_filter.values()) portfolio_pct = { key: (value / rtv_sum) for key, value in companies_rtv_filter.items() } portfolio = { company: ((asset * pct) / companies_prices[company]) for company, pct in portfolio_pct.items() } print("Company Prices: ", companies_prices) print("Companies Return-To-Volatility: ", companies_rtv) print("Filtered 10 Companies: ", companies_rtv_filter) print("Portfolio Percentage: ", portfolio_pct) print("Portfolio: ", portfolio) return portfolio, portfolio_pct