winwithakash's picture
Upload app.py
19efd8e
raw
history blame contribute delete
No virus
4.34 kB
import streamlit as st
import mplfinance as mpf
import pandas as pd
import datetime
from PIL import Image
@st.cache(show_spinner=False)
def get_graph(df, no_days):
plot_df = df.iloc[-no_days:]
plot_df = plot_df.set_index('Date')
filename = 'CandelPlot.png'
mpf.plot(plot_df,type='candle',mav=(21, 55), style="yahoo", figratio=(60,20), linecolor='#00ff00', savefig=filename)
def buy_sell_decision(st, lt, close, last):
# checking for null values
if st == 'None' or lt == 'None':
return 'Dont trade', close, last
if st >= lt:
if close >= st:
return 'Buy', last, None
elif close <= st:
return 'sell', None, last
if lt > st :
return 'Dont trade', close, last
def get_SMA_df(df):
moving_average_df = df
moving_average_df['St21'] = moving_average_df['Close'].rolling(window = 21, min_periods = 21).mean()
moving_average_df['Lt55'] = moving_average_df['Close'].rolling(window = 55, min_periods = 55).mean()
moving_average_df = moving_average_df.fillna('None')
# computing buy asd sell days
st_list = moving_average_df['St21'].to_list()
lt_list = moving_average_df['Lt55'].to_list()
close_price_list = moving_average_df['Close'].to_list()
last_price_list = moving_average_df['Last'].to_list()
buy_sell_list = []
buy_price_list = []
sell_price_list = []
for idx, value in enumerate(st_list):
dec_label, buy_price, sell_price = buy_sell_decision(st_list[idx], lt_list[idx], close_price_list[idx], last_price_list[idx])
buy_sell_list.append(dec_label)
buy_price_list.append(buy_price)
sell_price_list.append(sell_price)
moving_average_df['buy/sell'], moving_average_df['buy_price'], moving_average_df['sell_price'] = buy_sell_list, buy_price_list, sell_price_list
return moving_average_df
def get_action_dict(sma_df, date):
df = sma_df.set_index('Date')
try:
row = df.loc[datetime.datetime(date.year, date.month, date.day)]
action_dict = {}
action_dict['symbol'] = row['Symbol']
action_dict['action'] = row['buy/sell']
if action_dict['action'] == 'Buy':
price = row['buy_price']
else:
price = row['sell_price']
action_dict['price'] = price
except:
action_dict = None
return action_dict
def main():
st.set_page_config(
page_title="Project",
layout="wide",
initial_sidebar_state="expanded"
)
st.write('Upload a CSV file')
col1, col2 = st.columns(2)
with col1:
spectra = st.file_uploader("upload file", type={"csv", "txt"})
if spectra is not None:
df = pd.read_csv(spectra)
df['Date'] = df['Date'].astype('datetime64[ns]')
sma_df =get_SMA_df(df)
plot_days = st.slider('Select No. of days to plot graph', 56, len(df), 100)
st.write("Plot graph for last", plot_days, 'days')
get_image = st.button('Get graph')
if spectra is not None:
with col2:
trade_date = st.date_input("Select Day for trading", max(df['Date']), min_value=min(df['Date']), max_value=max(df['Date']))
get_action = st.button('Check trade or No trade')
ref_flag = False
if get_action:
dict_action = get_action_dict(sma_df, trade_date)
if dict_action == None:
st.error("Something Went Wrong please try with different date", icon="🚨")
else:
symbol = dict_action['symbol']
action = dict_action['action']
price = dict_action['price']
st.success(f'''
* Symbol : {symbol}
* Action : **{action}**
* {action} Price : {price}
''')
ref_flag, get_image = True, True
if get_image:
get_graph(df, plot_days)
image = Image.open('CandelPlot.png')
st.image(image, use_column_width='auto', caption='Blue Line = 21-SMA, Orange Line = 55-SMA')
if __name__ == '__main__':
main()