|
import streamlit as st |
|
from datetime import date, timedelta |
|
|
|
import pandas as pd |
|
from plots import ( |
|
beta, |
|
basic_portfolio, |
|
|
|
display_heat_map, |
|
|
|
ER, |
|
buble_interactive |
|
) |
|
|
|
|
|
from ef import( |
|
ef_viz |
|
) |
|
|
|
def load_heading(): |
|
"""The function that displays the heading. |
|
Provides instructions to the user |
|
""" |
|
with st.container(): |
|
st.title('Dataminers') |
|
header = st.subheader('This App performs historical portfolio analysis and future analysis ') |
|
st.subheader('Please read the instructions carefully and enjoy!') |
|
|
|
|
|
|
|
def get_choices(): |
|
"""Prompts the dialog to get the All Choices. |
|
Returns: |
|
An object of choices and an object of combined dataframes. |
|
""" |
|
choices = {} |
|
|
|
tickers = st.sidebar.text_input('Enter 4 stock symbols.', 'GOOG,A,AA,AMD') |
|
|
|
|
|
weights_str = st.sidebar.text_input('Enter The Investment Quantities', '50,30,25,25') |
|
|
|
investment = st.sidebar.number_input('Enter The Initial Investment', min_value=5000, max_value=25000, value=5000) |
|
|
|
|
|
submitted = st.sidebar.button("Submit") |
|
|
|
symbols = [] |
|
reset = False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if submitted: |
|
|
|
tickers_list = tickers.split(",") |
|
weights_list = weights_str.split(",") |
|
|
|
|
|
symbols.extend(tickers_list) |
|
|
|
|
|
weights = [] |
|
for item in weights_list: |
|
weights.append(float(item)) |
|
|
|
if reset: |
|
|
|
tickers = st.sidebar.selectbox('Enter 11 stock symbols.', ('GOOG','D','AAP','BLK')) |
|
|
|
weights_str = st.sidebar.text_input('Enter The Investment Weights', '0.3,0.3 ,0.3') |
|
|
|
st.experimental_singleton.clear() |
|
|
|
|
|
else: |
|
|
|
choices = { |
|
|
|
'symbols': symbols, |
|
'weights': weights, |
|
'investment': investment |
|
|
|
} |
|
|
|
data = pd.read_csv('data_and_sp500.csv') |
|
combined_df = data[tickers_list] |
|
|
|
return { |
|
'choices': choices, |
|
'combined_df': combined_df, |
|
'data': data |
|
} |
|
|
|
|
|
def run(): |
|
"""The main function for running the script.""" |
|
|
|
load_heading() |
|
choices = get_choices() |
|
if choices: |
|
st.success('''** Selected Tickers **''') |
|
buble_interactive(choices['data'],choices['choices']) |
|
st.header('Tickers Beta') |
|
""" |
|
The Capital Asset Pricing Model (CAPM) utilizes a formula to enable the application to calculate |
|
risk, return, and variability of return with respect to a benchmark. The application uses this |
|
benchmark, currently S&P 500 annual rate of return, to calculate the return of a stock using |
|
Figure 2 in Appendix A. Elements such as beta can be calculated using the formula in Appendix |
|
A Figure 1. The beta variable will serve as a variable to be used for calculating the variability of |
|
the stock with respect to the benchmark. This variability factor will prove useful for a variety of |
|
calculations such as understanding market risk and return. If the beta is equal to 1.0, the stock |
|
price is correlated with the market. When beta is smaller than 1.0, the stock is less volatile than |
|
the market. If beta is greater than 1.0, the stock is more volatile than the market. |
|
The CAPM model was run for 9 stocks, using 10-year daily historical data for initial test analysis. |
|
With this initial analysis, beta was calculated to determine the stock’s risk by measuring the |
|
price changes to the benchmark. By using CAPM model, annual expected return and portfolio |
|
return is calculated. The model results can be found in Appendix A. |
|
""" |
|
|
|
ef_viz(choices['data'],choices['choices']) |
|
|
|
beta(choices['data'], choices['choices']) |
|
ER(choices['data'], choices['choices']) |
|
basic_portfolio(choices['combined_df']) |
|
display_heat_map(choices['combined_df']) |
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
run() |
|
|
|
|