tahatehrani commited on
Commit
c08a416
·
verified ·
1 Parent(s): 73cbd24

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -7
app.py CHANGED
@@ -154,7 +154,19 @@ def generate_signals(data, news_sentiment):
154
  data = calculate_indicators(data)
155
  data.dropna(inplace=True)
156
 
157
- features = data[['RSI', 'Stochastic', 'MA', 'CCI', 'MACD', 'news_sentiment']]
 
 
 
 
 
 
 
 
 
 
 
 
158
  labels = ((data['RSI'] < 30) & (data['Stochastic'] < 20)).astype(int) - ((data['RSI'] > 70) & (data['Stochastic'] > 80)).astype(int)
159
 
160
  X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
@@ -167,8 +179,8 @@ def generate_signals(data, news_sentiment):
167
 
168
  if 0.8 <= accuracy <= 1.0:
169
  latest_data = data.iloc[-1]
170
- prediction = model.predict([latest_data[['RSI', 'Stochastic', 'MA', 'CCI', 'MACD', 'news_sentiment']].values])
171
- confidence = model.predict_proba([latest_data[['RSI', 'Stochastic', 'MA', 'CCI', 'MACD', 'news_sentiment']].values])[0][abs(prediction[0])]
172
 
173
  if prediction[0] == 1:
174
  buy_signal = (latest_data.name, latest_data['Close'], latest_data['Close'] * 0.95, "High Risk", confidence)
@@ -177,10 +189,11 @@ def generate_signals(data, news_sentiment):
177
 
178
  # Ensure at least one signal is displayed
179
  if buy_signal is None and sell_signal is None:
180
- if data['RSI'].iloc[-1] < 30 and data['Stochastic'].iloc[-1] < 20:
181
- buy_signal = (data.index[-1], data['Close'].iloc[-1], data['Close'].iloc[-1] * 0.95, "Low Confidence", 0.5)
182
- elif data['RSI'].iloc[-1] > 70 and data['Stochastic'].iloc[-1] > 80:
183
- sell_signal = (data.index[-1], data['Close'].iloc[-1], data['Close'].iloc[-1] * 1.05, "Low Confidence", 0.5)
 
184
 
185
  return buy_signal, sell_signal
186
 
 
154
  data = calculate_indicators(data)
155
  data.dropna(inplace=True)
156
 
157
+ # Check if the required columns exist in the data DataFrame
158
+ required_cols = ['RSI', 'Stochastic', 'MA', 'CCI', 'MACD', 'news_sentiment']
159
+ if all(col in data.columns for col in required_cols):
160
+ features = data[required_cols]
161
+ else:
162
+ # Handle the case when the required columns are not present
163
+ features = pd.DataFrame(index=data.index)
164
+ for col in required_cols:
165
+ if col in data.columns:
166
+ features[col] = data[col]
167
+ else:
168
+ features[col] = pd.Series([None] * len(data), index=data.index)
169
+
170
  labels = ((data['RSI'] < 30) & (data['Stochastic'] < 20)).astype(int) - ((data['RSI'] > 70) & (data['Stochastic'] > 80)).astype(int)
171
 
172
  X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
 
179
 
180
  if 0.8 <= accuracy <= 1.0:
181
  latest_data = data.iloc[-1]
182
+ prediction = model.predict([latest_data[required_cols].values])
183
+ confidence = model.predict_proba([latest_data[required_cols].values])[0][abs(prediction[0])]
184
 
185
  if prediction[0] == 1:
186
  buy_signal = (latest_data.name, latest_data['Close'], latest_data['Close'] * 0.95, "High Risk", confidence)
 
189
 
190
  # Ensure at least one signal is displayed
191
  if buy_signal is None and sell_signal is None:
192
+ if 'RSI' in data.columns and 'Stochastic' in data.columns:
193
+ if data['RSI'].iloc[-1] < 30 and data['Stochastic'].iloc[-1] < 20:
194
+ buy_signal = (data.index[-1], data['Close'].iloc[-1], data['Close'].iloc[-1] * 0.95, "Low Confidence", 0.5)
195
+ elif data['RSI'].iloc[-1] > 70 and data['Stochastic'].iloc[-1] > 80:
196
+ sell_signal = (data.index[-1], data['Close'].iloc[-1], data['Close'].iloc[-1] * 1.05, "Low Confidence", 0.5)
197
 
198
  return buy_signal, sell_signal
199