Files
cloudy/src/app.py
T
2024-02-28 10:33:15 +08:00

128 lines
4.4 KiB
Python

import streamlit as st
import yfinance as yf
from ta import volume, trend
st.set_page_config(page_title='Technical Analysis',page_icon='📈', layout='wide')
hide_streamlit_style = """
<style>
.reportview-container {
margin-top: -2em;
}
#MainMenu {
visibility: hidden;
}
.stDeployButton {display:none;}
footer {
visibility: hidden;
}
footer:after {
content:'Data Source: Yahoo Finance';
visibility: visible;
display: block;
position: relative;
#background-color: red;
padding: 5px;
top: 2px;
}
</style>
"""
st.markdown(hide_streamlit_style, unsafe_allow_html=True)
stock = st.sidebar.text_input(label="Ticker",value='AAPL')
def get_data(start):
ticker = yf.Ticker(stock)
try:
df = ticker.history(period='max', start=start)
except:
pass
return df
list_of_indicator_types = ['Volume', 'Trend']
volumn_types = ['Volume','Force Index']
trend_types = ["Simple Moving Average", "Exponential Moving Average"]
indicator_types = st.sidebar.selectbox(label='Indicator Type', options = list_of_indicator_types)
st.sidebar.success('All charts are interactive!')
if indicator_types == 'Volume':
indicator = st.selectbox(label='Indicator', options=volumn_types,key=0)
start = st.text_input(label='Start Year', value = '2018')
start = f'{start}-01-01'
df = get_data(start)
if indicator == 'Volume':
df = df[['Close','Volume']]
price_vs_time = st.line_chart(data= df['Close'], width=500, height=400)
volume_vs_time = st.bar_chart(data=df['Volume'], width=500, height=150)
df = df.to_csv()
st.download_button(label=f'Download Data',data=df,file_name=f'{stock}.csv')
if indicator == 'Force Index':
window_slider_expander = st.expander(label='Force Index Parameters')
window_slider = window_slider_expander.slider(label='Window', value=13, min_value=1, max_value=20)
df[f'fi_{window_slider}'] = volume.force_index(close=df['Close'],volume=df['Volume'], window=window_slider)
df = df[['Close','Volume',f'fi_{window_slider}']]
price_vs_time = st.line_chart(data= df['Close'], width=500, height=400)
fi_vs_time = st.area_chart(data= df[f'fi_{window_slider}'],width=500, height=200)
df = df.to_csv()
st.download_button(label=f'Download Data',data=df,file_name=f'{stock}.csv')
if indicator_types == 'Trend':
indicator = st.selectbox(label='Indicator', options=trend_types, key=1)
start = st.text_input(label='Start Year', value = '2018')
start = f'{start}-01-01'
df = get_data(start)
if indicator == 'Simple Moving Average':
window_slider_expander = st.expander(label='SMA Parameters')
window_slider_1 = window_slider_expander.slider(label='Window 1', value=30, min_value=1, max_value=200)
window_slider_2 = window_slider_expander.slider(label='Window 2', value=100, min_value=1, max_value=200)
df[f'sma{window_slider_1}'] = trend.sma_indicator(close=df['Close'], window=window_slider_1)
df[f'sma{window_slider_2}'] = trend.sma_indicator(close=df['Close'], window=window_slider_2)
df = df[['Close',f'sma{window_slider_1}',f'sma{window_slider_2}']]
sma_vs_time = st.line_chart(data=df, width=500, height=550)
df = df.to_csv()
st.download_button(label=f'Download Data',data=df,file_name=f'{stock}.csv')
if indicator == "Exponential Moving Average":
window_slider_expander = st.expander(label='EMA Parameters')
window_slider_1 = window_slider_expander.slider(label='Window 1', value=30, min_value=1, max_value=200)
window_slider_2 = window_slider_expander.slider(label='Window 2', value=100, min_value=1, max_value=200)
df[f'ema{window_slider_1}'] = trend.ema_indicator(close=df['Close'], window=window_slider_1)
df[f'ema{window_slider_2}'] = trend.ema_indicator(close=df['Close'], window=window_slider_2)
df = df[['Close',f'ema{window_slider_1}',f'ema{window_slider_2}']]
sma_vs_time = st.line_chart(data=df, width=500, height=550)
df = df.to_csv()
st.download_button(label=f'Download Data',data=df,file_name=f'{stock}.csv')