Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from experiment_runner_for_portfolio import DataLoader, Portfolio | |
| import pickle | |
| from sidebar_portfolio import sidebar | |
| st.set_page_config( | |
| page_title="Portfolio optimization", | |
| page_icon="๐") | |
| st.title("Portfolio Optimization") | |
| sidebar_dict = sidebar() | |
| run = st.sidebar.button('Run portfolio optimization') | |
| dataloader = DataLoader() | |
| portfolio = Portfolio() | |
| if run: | |
| st.header('Price Prediction Results') | |
| dataloader.experiment_data(top_n = sidebar_dict['top_n'], num_scale_steps = sidebar_dict['num_scale_steps'], | |
| scaling_strategy = sidebar_dict['scaling_strategy'], time_step_backward = sidebar_dict['time_step_backward']) | |
| #plot_df, metrics_df, models_dict = experiment(ticker = sidebar_dict['ticker'], num_scale_steps= sidebar_dict['num_scale_steps'], | |
| # scaling_strategy= sidebar_dict['scaling_strategy'], time_step_backward= sidebar_dict['time_step_backward']) | |
| col1_tickers, col2_tickers = st.columns(2) | |
| with col1_tickers: | |
| st.subheader('Valid Tickers:') | |
| st.write(dataloader.valid_tickers) | |
| with col2_tickers: | |
| st.subheader('Invalid Tickers:') | |
| st.write(dataloader.invalid_tickers) | |
| col1_date, col2_date = st.columns(2) | |
| with col1_date: | |
| st.write('Test Min Date:') | |
| st.write(dataloader.global_min_date) | |
| with col2_date: | |
| st.write('Training Max Date:') | |
| st.write(dataloader.global_max_date) | |
| st.subheader('Model Metrics:') | |
| for ticker in dataloader.valid_tickers: | |
| st.write(f'{ticker}:') | |
| st.write('Best model on test data MAPE: ', dataloader.tickers_dict[ticker]['metrics_df'].T.sort_values(by='Test data MAPE', ascending=True).index[0]) | |
| st.write(dataloader.tickers_dict[ticker]['metrics_df']) | |
| st.header('Portfolio Optimization Results') | |
| portfolio.optimize_portfolio(cov_matrix=dataloader.cov_matrix, validation_data=dataloader.validation_data, validation_actual=dataloader.validation_actual, | |
| test_data=dataloader.test_data, test_actual=dataloader.test_actual, target_return=sidebar_dict['target_return'], allow_short=sidebar_dict['allow_short']) | |
| col1_weights, col2_weights = st.columns(2) | |
| with col1_weights: | |
| st.subheader('Selected tickers:') | |
| st.write(dataloader.selected_features) | |
| with col2_weights: | |
| st.subheader('Portfolio weights:') | |
| st.write(portfolio.weights) | |
| col1_results, col2_results = st.columns(2) | |
| with col1_results: | |
| st.write(f"Validation Return Accuracy: {portfolio.val_return_accuracy:.4f}") | |
| st.write(f"Validation Volatility Accuracy: {portfolio.val_volatility_accuracy:.4f}") | |
| st.write(f"Validation Sharpe Ratio Deviation: {portfolio.val_sharpe_deviation:.4f}") | |
| st.write(f"Validation Pred Return Sum: {portfolio.val_sum_pred_returns:.4f}") | |
| st.write(f"Validation Actual Return Sum: {portfolio.val_sum_realized_returns:.4f}") | |
| with col2_results: | |
| st.write(f"Test Return Accuracy: {portfolio.test_return_accuracy:.4f}") | |
| st.write(f"Test Volatility Accuracy: {portfolio.test_volatility_accuracy:.4f}") | |
| st.write(f"Test Sharpe Ratio Deviation: {portfolio.test_sharpe_deviation:.4f}") | |
| st.write(f"Test Pred Return Sum: {portfolio.test_sum_pred_returns:.4f}") | |
| st.write(f"Test Actual Return Sum: {portfolio.test_sum_realized_returns:.4f}") | |