Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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[
|
| 171 |
-
confidence = model.predict_proba([latest_data[
|
| 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
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
|
|
|
| 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 |
|