Spaces:
Sleeping
Sleeping
Fix: Use yfinance 0.2.28 (no websockets dependency)
Browse files- app.py +31 -24
- requirements.txt +1 -2
app.py
CHANGED
|
@@ -158,35 +158,42 @@ class LSTMModel(nn.Module):
|
|
| 158 |
# ============================================================================
|
| 159 |
|
| 160 |
def load_stock_data(symbol: str, days: int = 400) -> pd.DataFrame:
|
| 161 |
-
"""Carrega dados
|
| 162 |
import yfinance as yf
|
| 163 |
|
| 164 |
end = datetime.now()
|
| 165 |
start = end - timedelta(days=days)
|
| 166 |
|
| 167 |
-
|
| 168 |
-
|
| 169 |
-
|
| 170 |
-
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
|
| 191 |
|
| 192 |
def create_features(df: pd.DataFrame) -> pd.DataFrame:
|
|
|
|
| 158 |
# ============================================================================
|
| 159 |
|
| 160 |
def load_stock_data(symbol: str, days: int = 400) -> pd.DataFrame:
|
| 161 |
+
"""Carrega dados usando yfinance.download (mais estável)."""
|
| 162 |
import yfinance as yf
|
| 163 |
|
| 164 |
end = datetime.now()
|
| 165 |
start = end - timedelta(days=days)
|
| 166 |
|
| 167 |
+
try:
|
| 168 |
+
# Usar download ao invés de Ticker.history (mais estável)
|
| 169 |
+
df = yf.download(
|
| 170 |
+
symbol,
|
| 171 |
+
start=start.strftime('%Y-%m-%d'),
|
| 172 |
+
end=end.strftime('%Y-%m-%d'),
|
| 173 |
+
progress=False,
|
| 174 |
+
auto_adjust=True
|
| 175 |
+
)
|
| 176 |
+
|
| 177 |
+
if df.empty:
|
| 178 |
+
raise ValueError(f"Dados não encontrados para {symbol}")
|
| 179 |
+
|
| 180 |
+
# Tratar MultiIndex columns
|
| 181 |
+
if isinstance(df.columns, pd.MultiIndex):
|
| 182 |
+
df.columns = df.columns.get_level_values(0)
|
| 183 |
+
|
| 184 |
+
df = df.reset_index()
|
| 185 |
+
df.columns = df.columns.str.lower()
|
| 186 |
+
|
| 187 |
+
# Renomear coluna de data
|
| 188 |
+
for col in ['date', 'Date', 'datetime', 'Datetime']:
|
| 189 |
+
if col in df.columns:
|
| 190 |
+
df = df.rename(columns={col: 'timestamp'})
|
| 191 |
+
break
|
| 192 |
+
|
| 193 |
+
return df
|
| 194 |
+
|
| 195 |
+
except Exception as e:
|
| 196 |
+
raise ValueError(f"Erro ao obter dados para {symbol}: {str(e)}")
|
| 197 |
|
| 198 |
|
| 199 |
def create_features(df: pd.DataFrame) -> pd.DataFrame:
|
requirements.txt
CHANGED
|
@@ -3,7 +3,6 @@ torch
|
|
| 3 |
pandas
|
| 4 |
numpy
|
| 5 |
scikit-learn
|
| 6 |
-
yfinance
|
| 7 |
-
websockets>=11.0
|
| 8 |
huggingface_hub
|
| 9 |
joblib
|
|
|
|
| 3 |
pandas
|
| 4 |
numpy
|
| 5 |
scikit-learn
|
| 6 |
+
yfinance==0.2.28
|
|
|
|
| 7 |
huggingface_hub
|
| 8 |
joblib
|