LeonceNsh commited on
Commit
d06e5a7
·
verified ·
1 Parent(s): 75e8309

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +23 -52
app.py CHANGED
@@ -85,55 +85,27 @@ def plot_to_image(plt, title, market_cap):
85
  buf.seek(0)
86
  return Image.open(buf)
87
 
88
- def plot_macd_strategy(data, company_name, ticker, market_cap):
89
- """Plot MACD strategy for a single company."""
90
  plt.figure(figsize=(16, 10))
91
- exp1 = data['Close'].ewm(span=12, adjust=False).mean()
92
- exp2 = data['Close'].ewm(span=26, adjust=False).mean()
93
- macd = exp1 - exp2
94
- signal = macd.ewm(span=9, adjust=False).mean()
95
-
96
- buy_price, sell_price, macd_signal = implement_macd_strategy(data['Close'], macd, signal)
97
-
98
- plt.plot(data.index, data['Close'], color='gray', linewidth=2, label="Close Price")
99
- plt.plot(data.index, macd, label='MACD', color='skyblue')
100
- plt.scatter(data.index, buy_price, marker='^', color='green', s=100, label='BUY SIGNAL')
101
- plt.scatter(data.index, sell_price, marker='v', color='red', s=100, label='SELL SIGNAL')
102
- plt.ylabel('MACD Strategy', fontsize=FONT_SIZE)
103
-
104
- return plot_to_image(plt, f'{company_name} ({ticker}) MACD Strategy', market_cap)
105
-
106
- def implement_macd_strategy(prices, macd, signal):
107
- buy_price = []
108
- sell_price = []
109
- macd_signal = []
110
- signal_state = 0
111
- for i in range(len(macd)):
112
- if macd[i] > signal[i]:
113
- if signal_state != 1:
114
- buy_price.append(prices[i])
115
- sell_price.append(np.nan)
116
- signal_state = 1
117
- macd_signal.append(signal_state)
118
- else:
119
- buy_price.append(np.nan)
120
- sell_price.append(np.nan)
121
- macd_signal.append(0)
122
- elif macd[i] < signal[i]:
123
- if signal_state != -1:
124
- buy_price.append(np.nan)
125
- sell_price.append(prices[i])
126
- signal_state = -1
127
- macd_signal.append(signal_state)
128
- else:
129
- buy_price.append(np.nan)
130
- sell_price.append(np.nan)
131
- macd_signal.append(0)
132
- else:
133
- buy_price.append(np.nan)
134
- sell_price.append(np.nan)
135
- macd_signal.append(0)
136
- return buy_price, sell_price, macd_signal
137
 
138
  def plot_indicators(company_names, indicator_types):
139
  """Plot the selected indicators for the selected companies."""
@@ -156,20 +128,19 @@ def plot_indicators(company_names, indicator_types):
156
  data, market_cap = future.result()
157
  if data is None:
158
  continue
159
- if indicator == "MACD Strategy":
160
- images.append(plot_macd_strategy(data, company, ticker, market_cap))
161
 
162
  return images, ""
163
 
164
  def select_all_indicators(select_all):
165
  """Select or deselect all indicators based on the select_all flag."""
166
- indicators = ["MACD Strategy"]
167
  return indicators if select_all else []
168
 
169
  def launch_gradio_app():
170
  """Launch the Gradio app for interactive plotting."""
171
  company_choices = list(COMPANY_TICKERS.keys())
172
- indicators = ["MACD Strategy"]
173
 
174
  def fetch_and_plot(company_names, indicator_types):
175
  images, error_message = plot_indicators(company_names, indicator_types)
 
85
  buf.seek(0)
86
  return Image.open(buf)
87
 
88
+ def plot_indicator(data, company_name, ticker, indicator, market_cap):
89
+ """Plot selected technical indicator for a single company."""
90
  plt.figure(figsize=(16, 10))
91
+ if indicator == "SMA":
92
+ sma_55 = data['Close'].rolling(window=55).mean()
93
+ sma_200 = data['Close'].rolling(window=200).mean()
94
+ plt.plot(data.index, data['Close'], label='Close')
95
+ plt.plot(data.index, sma_55, label='55-day SMA')
96
+ plt.plot(data.index, sma_200, label='200-day SMA')
97
+ plt.ylabel('Price', fontsize=FONT_SIZE)
98
+ elif indicator == "MACD":
99
+ exp1 = data['Close'].ewm(span=12, adjust=False).mean()
100
+ exp2 = data['Close'].ewm(span=26, adjust=False).mean()
101
+ macd = exp1 - exp2
102
+ signal = macd.ewm(span=9, adjust=False).mean()
103
+ plt.plot(data.index, macd, label='MACD')
104
+ plt.plot(data.index, signal, label='Signal Line')
105
+ plt.bar(data.index, macd - signal, label='MACD Histogram')
106
+ plt.ylabel('MACD', fontsize=FONT_SIZE)
107
+
108
+ return plot_to_image(plt, f'{company_name} ({ticker}) {indicator}', market_cap)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
109
 
110
  def plot_indicators(company_names, indicator_types):
111
  """Plot the selected indicators for the selected companies."""
 
128
  data, market_cap = future.result()
129
  if data is None:
130
  continue
131
+ images.append(plot_indicator(data, company, ticker, indicator, market_cap))
 
132
 
133
  return images, ""
134
 
135
  def select_all_indicators(select_all):
136
  """Select or deselect all indicators based on the select_all flag."""
137
+ indicators = ["SMA", "MACD"]
138
  return indicators if select_all else []
139
 
140
  def launch_gradio_app():
141
  """Launch the Gradio app for interactive plotting."""
142
  company_choices = list(COMPANY_TICKERS.keys())
143
+ indicators = ["SMA", "MACD"]
144
 
145
  def fetch_and_plot(company_names, indicator_types):
146
  images, error_message = plot_indicators(company_names, indicator_types)