arshadsahar commited on
Commit
df5bbce
·
verified ·
1 Parent(s): b07133c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +211 -0
app.py CHANGED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import plotly.express as px
4
+ import plotly.graph_objects as go
5
+ from plotly.subplots import make_subplots
6
+
7
+ default_start_date = pd.to_datetime('2020-11-02')
8
+ date_limit = pd.to_datetime('2021-08-12')
9
+
10
+ st.title("Stock Analysis Dashboard")
11
+
12
+ # Load data
13
+ data_file_path = r"C:\Niki\Study\MSDS\AI Challenge\technicalRecommendation.csv" # Update this with your file path
14
+ data = pd.read_csv(data_file_path)
15
+ # Convert 'Date' column to datetime format
16
+ data['Date'] = pd.to_datetime(data['Date'])
17
+ print(data.shape, data.columns)
18
+ market_analysis, news_analysis, trade_recs = st.tabs(["Market Analysis", "News Analysis", "Trading Recommendations"])
19
+
20
+ with market_analysis:
21
+ st.header("Market Analysis")
22
+ start_date = st.sidebar.date_input('Start Date', value=default_start_date, min_value=data['Date'].min(), max_value=date_limit)
23
+ end_date = st.sidebar.date_input("End Date", value=date_limit, min_value=data['Date'].min(), max_value=date_limit)
24
+ start_date = pd.to_datetime(start_date)
25
+ end_date = pd.to_datetime(end_date)
26
+ data2 = data[data['Date'].between(start_date, end_date)]
27
+
28
+ # Dropdown for selecting the indicator
29
+ selected_indicator = st.sidebar.selectbox("Select an Indicator", ['EMA 9', 'EMA 55', 'MACD', 'RSI'])
30
+ # Dropdown for selecting the Number of Signal Days
31
+ num_signals = st.sidebar.selectbox("Signals to Show", ['None', 'All', 'Last 5 Days', 'Last 15 Days', 'Last 20 Days'])
32
+
33
+ if selected_indicator == 'EMA 9':
34
+ # Plot close price and EMA 9
35
+ fig = px.line(data2, x='Date', y=['Close_price', 'EMA_9'], title='Close Price vs EMA 9',
36
+ labels={'Date': 'Date', 'value': 'Price', 'variable': 'Type'})
37
+ fig.update_traces(selector=dict(type='scatter'))
38
+ ema9_signal = 'EMA9_Signal'
39
+ # Plot ‘strong buy’ signals
40
+ if num_signals != 'None':
41
+ if num_signals == 'All':
42
+ strong_buy_dates = data2[data2[ema9_signal] == 3.0]
43
+ elif num_signals == 'Last 5 Days':
44
+ last5 = data2.tail(5)
45
+ strong_buy_dates = last5[last5[ema9_signal] == 3.0]
46
+ elif num_signals == 'Last 15 Days':
47
+ last15 = data2.tail(15)
48
+ strong_buy_dates = last15[last15[ema9_signal] == 3.0]
49
+ elif num_signals == 'Last 20 Days':
50
+ last20 = data2.tail(20)
51
+ strong_buy_dates = last20[last20[ema9_signal] == 3.0]
52
+
53
+ fig.add_scatter(x=strong_buy_dates['Date'], y=strong_buy_dates['EMA_9'], mode='markers', marker=dict(symbol='triangle-up', size=10, color='green'), name='Strong buy')
54
+
55
+ # Plot ‘strong sell’ signals
56
+ if num_signals != 'None':
57
+ if num_signals == 'All':
58
+ strong_sell_dates = data2[data2[ema9_signal] == -3.0]
59
+ elif num_signals == 'Last 5 Days':
60
+ last5 = data2.tail(5)
61
+ strong_sell_dates = last5[last5[ema9_signal] == -3.0]
62
+ elif num_signals == 'Last 15 Days':
63
+ last15 = data2.tail(15)
64
+ strong_sell_dates = last15[last15[ema9_signal] == -3.0]
65
+ elif num_signals == 'Last 20 Days':
66
+ last20 = data2.tail(20)
67
+ strong_sell_dates = last20[last20[ema9_signal] == -3.0]
68
+
69
+ fig.add_scatter(x=strong_sell_dates['Date'], y=strong_sell_dates['EMA_9'], mode='markers', marker=dict(symbol='triangle-down', size=10, color='red'), name='Strong sell')
70
+
71
+ st.plotly_chart(fig)
72
+
73
+ elif selected_indicator == 'EMA 55':
74
+ # Plot close price and EMA 9
75
+ fig = px.line(data2, x='Date', y=['Close_price', 'EMA_55'], title='Close Price vs EMA 9',
76
+ labels={'Date': 'Date', 'value': 'Price', 'variable': 'Type'})
77
+ fig.update_traces(selector=dict(type='scatter'))
78
+ ema55_signal = 'EMA55_Signal'
79
+ # Plot ‘strong buy’ signals
80
+ if num_signals != 'None':
81
+ if num_signals == 'All':
82
+ strong_buy_dates = data2[data2[ema55_signal] == 3.0]
83
+ elif num_signals == 'Last 5 Days':
84
+ last5 = data2.tail(5)
85
+ strong_buy_dates = last5[last5[ema55_signal] == 3.0]
86
+ elif num_signals == 'Last 15 Days':
87
+ last15 = data2.tail(15)
88
+ strong_buy_dates = last15[last15[ema55_signal] == 3.0]
89
+ elif num_signals == 'Last 20 Days':
90
+ last20 = data2.tail(20)
91
+ strong_buy_dates = last20[last20[ema55_signal] == 3.0]
92
+
93
+ fig.add_scatter(x=strong_buy_dates['Date'], y=strong_buy_dates['EMA_55'], mode='markers', marker=dict(symbol='triangle-up', size=10, color='green'), name='Strong buy')
94
+
95
+ # Plot ‘strong sell’ signals
96
+ if num_signals != 'None':
97
+ if num_signals == 'All':
98
+ strong_sell_dates = data2[data2[ema55_signal] == -3.0]
99
+ elif num_signals == 'Last 5 Days':
100
+ last5 = data2.tail(5)
101
+ strong_sell_dates = last5[last5[ema55_signal] == -3.0]
102
+ elif num_signals == 'Last 15 Days':
103
+ last15 = data2.tail(15)
104
+ strong_sell_dates = last15[last15[ema55_signal] == -3.0]
105
+ elif num_signals == 'Last 20 Days':
106
+ last20 = data2.tail(20)
107
+ strong_sell_dates = last20[last20[ema55_signal] == -3.0]
108
+
109
+ fig.add_scatter(x=strong_sell_dates['Date'], y=strong_sell_dates['EMA_55'], mode='markers', marker=dict(symbol='triangle-down', size=10, color='red'), name='Strong sell')
110
+
111
+ st.plotly_chart(fig)
112
+
113
+ elif selected_indicator == 'MACD':
114
+ # Set up the figure and subplots
115
+ macd_signal = 'MACD_Signals'
116
+
117
+ fig = make_subplots(rows=2, cols=1)
118
+ # fig = go.Figure()
119
+ # Add subplot for Close Price and Signals
120
+ fig.add_trace(go.Scatter(x=data2['Date'], y=data2['Close_price'], mode='lines', name='Close Price'),
121
+ row=1, col=1)
122
+ if num_signals != 'None':
123
+ if num_signals == 'All':
124
+ strong_buy_dates = data2[data2[macd_signal] == 3.0]
125
+ strong_sell_dates = data2[data2[macd_signal] == -3.0]
126
+ strong_hold_dates = data2[data2[macd_signal] == 0]
127
+ elif num_signals == 'Last 5 Days':
128
+ last5 = data2.tail(5)
129
+ strong_buy_dates = last5[last5[macd_signal] == 3.0]
130
+ strong_sell_dates = last5[last5[macd_signal] == -3.0]
131
+ strong_hold_dates = last5[last5[macd_signal] == 0]
132
+ elif num_signals == 'Last 15 Days':
133
+ last15 = data2.tail(15)
134
+ strong_buy_dates = last15[last15[macd_signal] == 3.0]
135
+ strong_sell_dates = last15[last15[macd_signal] == -3.0]
136
+ strong_hold_dates = last15[last15[macd_signal] == 0]
137
+ elif num_signals == 'Last 20 Days':
138
+ last20 = data2.tail(20)
139
+ strong_buy_dates = last20[last20[macd_signal] == 3.0]
140
+ strong_sell_dates = last20[last20[macd_signal] == -3.0]
141
+ strong_hold_dates = last20[last20[macd_signal] == 0]
142
+
143
+ fig.add_trace(go.Scatter(x=strong_buy_dates['Date'], y=strong_buy_dates['Close_price'], mode='markers', marker=dict(symbol='triangle-up', size=10, color='green'), name='Strong Buy'), row=1, col=1)
144
+ fig.add_trace(go.Scatter(x=strong_sell_dates['Date'], y=strong_sell_dates['Close_price'], mode='markers', marker=dict(symbol='triangle-down', size=10, color='red'), name='Strong Sell'), row=1, col=1)
145
+ fig.add_trace(go.Scatter(x=strong_hold_dates['Date'], y=strong_hold_dates['Close_price'], mode='markers', marker=dict(symbol='circle', size=10, color='orange'), name='Strong Sell'), row=1, col=1)
146
+
147
+ # Add subplot for MACD
148
+ # fig2 = go.Figure()
149
+ fig.add_trace(go.Scatter(x=data2['Date'], y=data2['MACD_12_26_9'], mode='lines', name='MACD', yaxis='y2'), row=2, col=1)
150
+ fig.add_trace(go.Scatter(x=data2['Date'], y=data2['MACDs_12_26_9'], mode='lines', name='Signal', yaxis='y2'), row=2, col=1)
151
+ fig.add_trace(go.Bar(x=data2['Date'], y=data2['MACDh_12_26_9'], name='Histogram', yaxis='y2'), row=2, col=1)
152
+
153
+ # # Update layout
154
+ # fig.update_layout(title='MACD Analysis',
155
+ # xaxis=dict(title='Date'),
156
+ # yaxis=dict(title='Close Price', side='left', showgrid=False),
157
+ # yaxis2=dict(title='MACD', side='right', overlaying='y', showgrid=False))
158
+ fig.update_layout(title='MACD Analysis')
159
+ st.plotly_chart(fig, use_container_width=True)
160
+ # st.plotly_chart(fig2, use_container_width=True)
161
+
162
+ elif selected_indicator == 'RSI':
163
+ # Set up the figure
164
+ fig = go.Figure()
165
+
166
+ # Add RSI line
167
+ fig.add_trace(go.Scatter(x=data2['Date'], y=data2['RSI'], mode='lines', name='RSI'))
168
+
169
+ # Add overbought and oversold lines
170
+ overbought_strong = 70
171
+ oversold_strong = 30
172
+ fig.add_shape(type="line", x0=data2['Date'].min(), y0=overbought_strong, x1=data2['Date'].max(), y1=overbought_strong, line=dict(color="red", width=1, dash="dash"), name="Overbought")
173
+ fig.add_shape(type="line", x0=data2['Date'].min(), y0=oversold_strong, x1=data2['Date'].max(), y1=oversold_strong, line=dict(color="green", width=1, dash="dash"), name="Oversold")
174
+
175
+ rsi_signal = 'RSI_Signals'
176
+ if num_signals != 'None':
177
+ if num_signals == 'All':
178
+ strong_buy_dates = data2[data2[rsi_signal] >= 1.0]
179
+ strong_sell_dates = data2[data2[rsi_signal] <= -1.0]
180
+ strong_hold_dates = data2[data2[rsi_signal] == 0]
181
+ elif num_signals == 'Last 5 Days':
182
+ last5 = data2.tail(5)
183
+ strong_buy_dates = last5[last5[rsi_signal] >= 1.0]
184
+ strong_sell_dates = last5[last5[rsi_signal] <= -1.0]
185
+ strong_hold_dates = last5[last5[rsi_signal] == 0]
186
+ elif num_signals == 'Last 15 Days':
187
+ last15 = data2.tail(15)
188
+ strong_buy_dates = last15[last15[rsi_signal] >= 1.0]
189
+ strong_sell_dates = last15[last15[rsi_signal] <= -1.0]
190
+ strong_hold_dates = last15[last15[rsi_signal] == 0]
191
+ elif num_signals == 'Last 20 Days':
192
+ last20 = data2.tail(20)
193
+ strong_buy_dates = last20[last20[rsi_signal] >= 1.0]
194
+ strong_sell_dates = last20[last20[rsi_signal] <= -1.0]
195
+ strong_hold_dates = last20[last20[rsi_signal] == 0]
196
+
197
+ fig.add_trace(go.Scatter(x=strong_buy_dates['Date'], y=strong_buy_dates['RSI'], mode='markers', marker=dict(symbol='triangle-up', size=10, color='green'), name='Strong Buy'))
198
+ fig.add_trace(go.Scatter(x=strong_sell_dates['Date'], y=strong_sell_dates['RSI'], mode='markers', marker=dict(symbol='triangle-down', size=10, color='red'), name='Strong Sell'))
199
+ fig.add_trace(go.Scatter(x=strong_hold_dates['Date'], y=strong_hold_dates['RSI'], mode='markers', marker=dict(symbol='circle', size=10, color='orange'), name='Strong Sell'))
200
+
201
+ fig.update_layout(title='RSI Analysis')
202
+ st.plotly_chart(fig)
203
+ # st.write(data2)
204
+
205
+ with news_analysis:
206
+ st.header("News Analysis")
207
+ st.write('data to be added.')
208
+
209
+ with trade_recs:
210
+ st.header("Trading Recommendations")
211
+ st.write('recommendations to be added.')