Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -19,11 +19,19 @@ TICKERS = [
|
|
| 19 |
|
| 20 |
def optimize_portfolio(years, target_return):
|
| 21 |
try:
|
| 22 |
-
data = yf.download(TICKERS, period=f"{years}y", interval="1mo")
|
| 23 |
-
|
| 24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
-
prices = data['Adj Close']
|
| 27 |
returns = prices.pct_change().dropna()
|
| 28 |
mean_returns = returns.mean() * 12
|
| 29 |
cov_matrix = returns.cov() * 12
|
|
|
|
| 19 |
|
| 20 |
def optimize_portfolio(years, target_return):
|
| 21 |
try:
|
| 22 |
+
data = yf.download(TICKERS, period=f"{years}y", interval="1mo", group_by="ticker", auto_adjust=True)
|
| 23 |
+
|
| 24 |
+
if isinstance(data.columns, pd.MultiIndex):
|
| 25 |
+
try:
|
| 26 |
+
prices = pd.concat([data[ticker]['Close'] for ticker in TICKERS], axis=1)
|
| 27 |
+
prices.columns = TICKERS
|
| 28 |
+
except Exception:
|
| 29 |
+
return pd.DataFrame(), "Error: Failed to extract Close prices from multi-index data.", "", "", ""
|
| 30 |
+
else:
|
| 31 |
+
prices = data.get("Adj Close")
|
| 32 |
+
if prices is None or prices.empty:
|
| 33 |
+
return pd.DataFrame(), "Error: 'Adj Close' data not found or empty.", "", "", ""
|
| 34 |
|
|
|
|
| 35 |
returns = prices.pct_change().dropna()
|
| 36 |
mean_returns = returns.mean() * 12
|
| 37 |
cov_matrix = returns.cov() * 12
|