winwithakash commited on
Commit
19efd8e
1 Parent(s): fcd4739

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -0
app.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import mplfinance as mpf
3
+ import pandas as pd
4
+ import datetime
5
+ from PIL import Image
6
+
7
+
8
+ @st.cache(show_spinner=False)
9
+ def get_graph(df, no_days):
10
+ plot_df = df.iloc[-no_days:]
11
+ plot_df = plot_df.set_index('Date')
12
+ filename = 'CandelPlot.png'
13
+ mpf.plot(plot_df,type='candle',mav=(21, 55), style="yahoo", figratio=(60,20), linecolor='#00ff00', savefig=filename)
14
+
15
+ def buy_sell_decision(st, lt, close, last):
16
+ # checking for null values
17
+ if st == 'None' or lt == 'None':
18
+ return 'Dont trade', close, last
19
+
20
+ if st >= lt:
21
+ if close >= st:
22
+ return 'Buy', last, None
23
+
24
+ elif close <= st:
25
+ return 'sell', None, last
26
+
27
+ if lt > st :
28
+ return 'Dont trade', close, last
29
+
30
+ def get_SMA_df(df):
31
+ moving_average_df = df
32
+ moving_average_df['St21'] = moving_average_df['Close'].rolling(window = 21, min_periods = 21).mean()
33
+ moving_average_df['Lt55'] = moving_average_df['Close'].rolling(window = 55, min_periods = 55).mean()
34
+ moving_average_df = moving_average_df.fillna('None')
35
+
36
+ # computing buy asd sell days
37
+ st_list = moving_average_df['St21'].to_list()
38
+ lt_list = moving_average_df['Lt55'].to_list()
39
+ close_price_list = moving_average_df['Close'].to_list()
40
+ last_price_list = moving_average_df['Last'].to_list()
41
+
42
+ buy_sell_list = []
43
+ buy_price_list = []
44
+ sell_price_list = []
45
+
46
+ for idx, value in enumerate(st_list):
47
+ dec_label, buy_price, sell_price = buy_sell_decision(st_list[idx], lt_list[idx], close_price_list[idx], last_price_list[idx])
48
+
49
+ buy_sell_list.append(dec_label)
50
+ buy_price_list.append(buy_price)
51
+ sell_price_list.append(sell_price)
52
+
53
+ moving_average_df['buy/sell'], moving_average_df['buy_price'], moving_average_df['sell_price'] = buy_sell_list, buy_price_list, sell_price_list
54
+ return moving_average_df
55
+
56
+ def get_action_dict(sma_df, date):
57
+ df = sma_df.set_index('Date')
58
+ try:
59
+ row = df.loc[datetime.datetime(date.year, date.month, date.day)]
60
+ action_dict = {}
61
+ action_dict['symbol'] = row['Symbol']
62
+ action_dict['action'] = row['buy/sell']
63
+ if action_dict['action'] == 'Buy':
64
+ price = row['buy_price']
65
+ else:
66
+ price = row['sell_price']
67
+
68
+ action_dict['price'] = price
69
+ except:
70
+ action_dict = None
71
+ return action_dict
72
+
73
+ def main():
74
+ st.set_page_config(
75
+ page_title="Project",
76
+ layout="wide",
77
+ initial_sidebar_state="expanded"
78
+ )
79
+
80
+ st.write('Upload a CSV file')
81
+
82
+ col1, col2 = st.columns(2)
83
+
84
+ with col1:
85
+ spectra = st.file_uploader("upload file", type={"csv", "txt"})
86
+ if spectra is not None:
87
+ df = pd.read_csv(spectra)
88
+ df['Date'] = df['Date'].astype('datetime64[ns]')
89
+ sma_df =get_SMA_df(df)
90
+
91
+ plot_days = st.slider('Select No. of days to plot graph', 56, len(df), 100)
92
+ st.write("Plot graph for last", plot_days, 'days')
93
+
94
+ get_image = st.button('Get graph')
95
+
96
+ if spectra is not None:
97
+ with col2:
98
+ trade_date = st.date_input("Select Day for trading", max(df['Date']), min_value=min(df['Date']), max_value=max(df['Date']))
99
+ get_action = st.button('Check trade or No trade')
100
+ ref_flag = False
101
+
102
+ if get_action:
103
+ dict_action = get_action_dict(sma_df, trade_date)
104
+ if dict_action == None:
105
+ st.error("Something Went Wrong please try with different date", icon="🚨")
106
+ else:
107
+ symbol = dict_action['symbol']
108
+ action = dict_action['action']
109
+ price = dict_action['price']
110
+ st.success(f'''
111
+ * Symbol : {symbol}
112
+ * Action : **{action}**
113
+ * {action} Price : {price}
114
+ ''')
115
+ ref_flag, get_image = True, True
116
+
117
+ if get_image:
118
+ get_graph(df, plot_days)
119
+ image = Image.open('CandelPlot.png')
120
+ st.image(image, use_column_width='auto', caption='Blue Line = 21-SMA, Orange Line = 55-SMA')
121
+
122
+ if __name__ == '__main__':
123
+ main()