JayLacoma commited on
Commit
6e35d3c
·
verified ·
1 Parent(s): 53f002f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +73 -74
app.py CHANGED
@@ -373,79 +373,6 @@ def generate_trading_signals(df):
373
 
374
  return df
375
 
376
- def plot_combined(df, ticker):
377
- # Create a figure
378
- fig = go.Figure()
379
-
380
- # Add closing price trace
381
- fig.add_trace(go.Scatter(
382
- x=df.index, y=df['Close'],
383
- mode='lines',
384
- name='Closing Price',
385
- line=dict(color='#36D7B7', width=2) # Brighter pink
386
- ))
387
-
388
- # Add buy signals
389
- buy_signals = df[df['Combined_Signal'] >= 3]
390
- fig.add_trace(go.Scatter(
391
- x=buy_signals.index, y=buy_signals['Close'],
392
- mode='markers',
393
- marker=dict(symbol='triangle-up', size=12, color='lightgreen'),
394
- name='Buy Signal'
395
- ))
396
-
397
- # Add sell signals
398
- sell_signals = df[df['Combined_Signal'] <= -3]
399
- fig.add_trace(go.Scatter(
400
- x=sell_signals.index, y=sell_signals['Close'],
401
- mode='markers',
402
- marker=dict(symbol='triangle-down', size=12, color='red'),
403
- name='Sell Signal'
404
- ))
405
-
406
- # Combined signal trace
407
- fig.add_trace(go.Scatter(
408
- x=df.index, y=df['Combined_Signal'],
409
- mode='lines',
410
- name='Combined Signal',
411
- line=dict(color='#36A2EB', width=1), # Blue
412
- yaxis='y2'
413
- ))
414
-
415
- # Update layout
416
- fig.update_layout(
417
- title=f'{ticker}: Stock Price and Combined Trading Signal (Last 120 Days)',
418
- xaxis=dict(
419
- title='Date',
420
- showgrid=True,
421
- gridcolor="rgba(255,255,255,0.1)"
422
- ),
423
- yaxis=dict(
424
- title='Price',
425
- side='left',
426
- showgrid=True,
427
- gridcolor="rgba(255,255,255,0.1)"
428
- ),
429
- yaxis2=dict(
430
- title='Combined Signal',
431
- overlaying='y',
432
- side='right',
433
- showgrid=False
434
- ),
435
- plot_bgcolor='#111111',
436
- paper_bgcolor='#111111',
437
- font=dict(color='white', size=12),
438
- legend=dict(
439
- bgcolor="rgba(0,0,0,0.8)",
440
- bordercolor="white",
441
- borderwidth=1
442
- ),
443
- margin=dict(l=40, r=40, t=50, b=40)
444
- )
445
-
446
- return fig
447
-
448
- import plotly.graph_objects as go
449
 
450
  def plot_combined_signals(df, ticker):
451
  """
@@ -487,7 +414,7 @@ def plot_combined_signals(df, ticker):
487
 
488
  return fig
489
 
490
- def plot_individual_signals(df, ticker):
491
  # Create a figure
492
  fig = go.Figure()
493
 
@@ -568,6 +495,78 @@ def plot_individual_signals(df, ticker):
568
 
569
  return fig
570
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
571
  def technical_analysis(ticker, start_date, end_date):
572
  try:
573
  # Download stock data using the StockDataFetcher class
 
373
 
374
  return df
375
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376
 
377
  def plot_combined_signals(df, ticker):
378
  """
 
414
 
415
  return fig
416
 
417
+ def plot_individual(df, ticker):
418
  # Create a figure
419
  fig = go.Figure()
420
 
 
495
 
496
  return fig
497
 
498
+ def plot_individual_signals(df, ticker, x_range=None):
499
+ fig = go.Figure()
500
+
501
+ # Closing price
502
+ fig.add_trace(go.Scatter(
503
+ x=df.index, y=df['Close'],
504
+ mode='lines',
505
+ name='Closing Price',
506
+ line=dict(color='#36A2EB', width=2)
507
+ ))
508
+
509
+ signal_colors = {
510
+ 'MACD_Signal': {'buy': '#39FF14', 'sell': '#FF073A'},
511
+ 'RSI_Signal': {'buy': '#39FF14', 'sell': '#FF073A'},
512
+ 'BB_Signal': {'buy': '#39FF14', 'sell': '#FF073A'},
513
+ 'Stochastic_Signal': {'buy': '#39FF14', 'sell': '#FF073A'},
514
+ 'CMF_Signal': {'buy': '#39FF14', 'sell': '#FF073A'},
515
+ 'CCI_Signal': {'buy': '#39FF14', 'sell': '#FF073A'}
516
+ }
517
+
518
+ signal_names = ['MACD_Signal', 'RSI_Signal', 'BB_Signal',
519
+ 'Stochastic_Signal', 'CMF_Signal', 'CCI_Signal']
520
+
521
+ for signal in signal_names:
522
+ buy_signals = df[df[signal] == 1]
523
+ sell_signals = df[df[signal] == -1]
524
+
525
+ fig.add_trace(go.Scatter(
526
+ x=buy_signals.index, y=buy_signals['Close'],
527
+ mode='markers',
528
+ marker=dict(symbol='triangle-up', size=12, color=signal_colors[signal]['buy']),
529
+ name=f'{signal} Buy'
530
+ ))
531
+ fig.add_trace(go.Scatter(
532
+ x=sell_signals.index, y=sell_signals['Close'],
533
+ mode='markers',
534
+ marker=dict(symbol='triangle-down', size=12, color=signal_colors[signal]['sell']),
535
+ name=f'{signal} Sell'
536
+ ))
537
+
538
+ fig.update_layout(
539
+ title=f'{ticker}: Individual Trading Signals',
540
+ xaxis=dict(
541
+ title='Date',
542
+ showgrid=True,
543
+ gridcolor="rgba(255,255,255,0.1)",
544
+ range=x_range # ←←← Shared x-axis range
545
+ ),
546
+ yaxis=dict(
547
+ title='Price',
548
+ side='left',
549
+ showgrid=True,
550
+ gridcolor="rgba(255,255,255,0.1)"
551
+ ),
552
+ plot_bgcolor='#111111',
553
+ paper_bgcolor='#111111',
554
+ font=dict(color='white', size=12),
555
+ legend=dict(
556
+ orientation='h', # Horizontal legend
557
+ yanchor='bottom',
558
+ y=1.02, # Just above the plot
559
+ xanchor='right',
560
+ x=1,
561
+ bgcolor="rgba(0,0,0,0.8)",
562
+ bordercolor="white",
563
+ borderwidth=1
564
+ ),
565
+ margin=dict(l=40, r=40, t=80, b=40) # Extra top margin for legend
566
+ )
567
+
568
+ return fig
569
+
570
  def technical_analysis(ticker, start_date, end_date):
571
  try:
572
  # Download stock data using the StockDataFetcher class