JayLacoma commited on
Commit
14a8d47
·
verified ·
1 Parent(s): 041a51d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -49
app.py CHANGED
@@ -179,30 +179,6 @@ def plot_combined_signals(df, ticker):
179
 
180
  return fig
181
 
182
- # %%
183
- def stock_analysis(ticker, start_date, end_date):
184
- # Download stock data from Yahoo Finance
185
- df = yf.download(ticker, start=start_date, end=end_date)
186
-
187
- # If the DataFrame has a MultiIndex for columns, drop the 'Ticker' level
188
- if isinstance(df.columns, pd.MultiIndex):
189
- df.columns = df.columns.droplevel(level=1) # Drop the 'Ticker' level
190
-
191
- # Explicitly set column names (optional)
192
- df.columns = ['Close', 'High', 'Low', 'Open', 'Volume']
193
-
194
-
195
- # Generate signals
196
- generate_trading_signals(df)
197
-
198
- # Last 60 days
199
- df_last_60 = df.tail(360)
200
-
201
- # Plot signals
202
- fig_signals = plot_combined_signals(df_last_60, ticker)
203
-
204
- return fig_signals
205
-
206
 
207
 
208
 
@@ -229,7 +205,7 @@ def plot_individual_signals(df, ticker):
229
  fig.add_trace(go.Scatter(
230
  x=buy_signals.index, y=buy_signals['Close'],
231
  mode='markers',
232
- marker=dict(symbol='triangle-up', size=10, color='darkblue'),
233
  name=f'{signal} Buy Signal'
234
  ))
235
 
@@ -269,46 +245,45 @@ def display_signals(df):
269
 
270
  return signals_df
271
 
 
272
  def stock_analysis(ticker, start_date, end_date):
273
  # Download stock data from Yahoo Finance
274
  df = yf.download(ticker, start=start_date, end=end_date)
275
 
276
- # If the DataFrame has a MultiIndex for columns, drop the 'Ticker' level
277
  if isinstance(df.columns, pd.MultiIndex):
278
- df.columns = df.columns.droplevel(level=1) # Drop the 'Ticker' level
279
-
280
- # Explicitly set column names (optional)
281
- df.columns = ['Close', 'High', 'Low', 'Open', 'Volume']
282
-
283
  # Generate signals
284
  df = generate_trading_signals(df)
285
 
286
- # Last 60 days for plotting
287
- df_last_60 = df.tail(360)
288
 
289
  # Plot combined signals
290
- # fig_signals = plot_combined_signals(df_last_60, ticker)
291
-
292
  # Plot individual signals
293
- fig_individual_signals = plot_individual_signals(df_last_60, ticker)
294
-
295
- # Display signals DataFrame
296
- signals_df = df_last_60[['Close', 'SMA_Signal', 'MACD_Signal', 'RSI_Signal', 'BB_Signal',
297
- 'Stochastic_Signal','CMF_Signal',
298
- 'CCI_Signal']]
299
-
300
- return fig_individual_signals
301
 
 
 
 
 
 
 
 
 
302
 
 
303
 
304
- # %%
305
  # Define Gradio interface
306
  with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
307
  gr.Markdown("## 360 Stock Market Analysis")
308
 
309
  ticker_input = gr.Textbox(label="Enter Stock Ticker (e.g., AAPL, NVDA)", value="NVDA")
310
  start_date_input = gr.Textbox(label="Start Date (YYYY-MM-DD)", value="2022-01-01")
311
- end_date_input = gr.Textbox(label="End Date (YYYY-MM-DD)", value="2026-01-01")
312
 
313
  # Create a submit button that runs the stock analysis function
314
  button = gr.Button("Analyze Stock")
@@ -317,10 +292,10 @@ with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
317
  individual_signals_output = gr.Plot(label="Trading Signals")
318
  signals_df_output = gr.Dataframe(label="Buy/Sell Signals")
319
 
320
- # Link button to function
321
- button.click(stock_analysis, inputs=[ticker_input, start_date_input, end_date_input],
322
- outputs=[individual_signals_output,signals_df_output])
 
323
 
324
  # Launch the interface
325
  demo.launch()
326
-
 
179
 
180
  return fig
181
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
182
 
183
 
184
 
 
205
  fig.add_trace(go.Scatter(
206
  x=buy_signals.index, y=buy_signals['Close'],
207
  mode='markers',
208
+ marker=dict(symbol='triangle-up', size=10, color='blackblue'),
209
  name=f'{signal} Buy Signal'
210
  ))
211
 
 
245
 
246
  return signals_df
247
 
248
+ # Define the stock analysis function (keep only one version)
249
  def stock_analysis(ticker, start_date, end_date):
250
  # Download stock data from Yahoo Finance
251
  df = yf.download(ticker, start=start_date, end=end_date)
252
 
253
+ # If the DataFrame has a MultiIndex for columns, handle it
254
  if isinstance(df.columns, pd.MultiIndex):
255
+ df.columns = df.columns.droplevel(1)
256
+
 
 
 
257
  # Generate signals
258
  df = generate_trading_signals(df)
259
 
260
+ # Last 360 days for plotting
261
+ df_last_360 = df.tail(360)
262
 
263
  # Plot combined signals
264
+ fig_signals = plot_combined_signals(df_last_360, ticker)
265
+
266
  # Plot individual signals
267
+ fig_individual_signals = plot_individual_signals(df_last_360, ticker)
 
 
 
 
 
 
 
268
 
269
+ # Create signals DataFrame for display
270
+ signals_df = df_last_360[['Close', 'SMA_Signal', 'MACD_Signal', 'RSI_Signal',
271
+ 'BB_Signal', 'Stochastic_Signal', 'CMF_Signal',
272
+ 'CCI_Signal']].copy()
273
+
274
+ # Format signals for display
275
+ for column in signals_df.columns[1:]: # Skip 'Close'
276
+ signals_df[column] = signals_df[column].replace({1: 'Buy', -1: 'Sell', 0: 'Hold'})
277
 
278
+ return fig_individual_signals, signals_df
279
 
 
280
  # Define Gradio interface
281
  with gr.Blocks(theme=gr.themes.Monochrome()) as demo:
282
  gr.Markdown("## 360 Stock Market Analysis")
283
 
284
  ticker_input = gr.Textbox(label="Enter Stock Ticker (e.g., AAPL, NVDA)", value="NVDA")
285
  start_date_input = gr.Textbox(label="Start Date (YYYY-MM-DD)", value="2022-01-01")
286
+ end_date_input = gr.Textbox(label="End Date (YYYY-MM-DD)", value="2023-01-01") # Fixed end date
287
 
288
  # Create a submit button that runs the stock analysis function
289
  button = gr.Button("Analyze Stock")
 
292
  individual_signals_output = gr.Plot(label="Trading Signals")
293
  signals_df_output = gr.Dataframe(label="Buy/Sell Signals")
294
 
295
+ # Link button to function with both outputs
296
+ button.click(stock_analysis,
297
+ inputs=[ticker_input, start_date_input, end_date_input],
298
+ outputs=[individual_signals_output,signals_df_output])
299
 
300
  # Launch the interface
301
  demo.launch()