Spaces:
Sleeping
Sleeping
Enes Berke Karaoğlan
commited on
Commit
·
a8b14d1
1
Parent(s):
6a2e1f1
fix: Veri çekme hatası düzeltildi, hata kontrolleri geliştirildi
Browse files
app.py
CHANGED
@@ -21,28 +21,28 @@ for sym in symbols:
|
|
21 |
# Veri çekme fonksiyonu
|
22 |
def load_data(symbols):
|
23 |
data = {}
|
24 |
-
|
25 |
for sym in symbols:
|
26 |
try:
|
27 |
stock_data = yf.download(sym, start="2022-01-01", end="2024-01-01")['Close']
|
28 |
if not stock_data.empty:
|
29 |
data[sym] = stock_data
|
30 |
else:
|
31 |
-
st.warning(f"{sym} için veri bulunamadı!")
|
32 |
-
|
33 |
except Exception as e:
|
34 |
-
st.error(f"{sym} için veri çekilirken hata oluştu: {e}")
|
35 |
|
36 |
if not data:
|
37 |
-
st.
|
38 |
return pd.DataFrame() # Boş DataFrame döndür
|
39 |
-
|
40 |
return pd.DataFrame(data)
|
41 |
|
42 |
# Veriyi yükleyin
|
43 |
df = load_data(symbols)
|
44 |
|
45 |
-
if not df.empty:
|
46 |
# Portföy performansını hesaplayın
|
47 |
total_investment = sum(amounts.values())
|
48 |
|
@@ -50,62 +50,62 @@ if not df.empty:
|
|
50 |
portfolio_value = df.iloc[-1] * pd.Series(amounts)
|
51 |
portfolio_value_total = portfolio_value.sum()
|
52 |
|
53 |
-
st.write(f"Toplam yatırım miktar
|
54 |
-
st.write(f"Her bir hissenin mevcut değeri
|
55 |
st.write(portfolio_value)
|
56 |
-
st.write(f"Portföyün toplam değeri
|
57 |
|
58 |
# Grafikler
|
59 |
-
st.subheader("Hisse Senedi Fiyatları")
|
60 |
fig = px.line(df, title="Hisse Senedi Fiyatları")
|
61 |
st.plotly_chart(fig)
|
62 |
|
63 |
-
st.subheader("Portföy Dağılım Grafiği")
|
64 |
fig = px.bar(x=amounts.keys(), y=portfolio_value, labels={"x": 'Yatırım Araçları', 'y': 'Portföy Değeri'})
|
65 |
st.plotly_chart(fig)
|
66 |
|
67 |
# Getiri hesaplamaları
|
68 |
-
st.subheader("Günlük Getiriler")
|
69 |
daily_returns = df.pct_change().dropna()
|
70 |
st.dataframe(daily_returns)
|
71 |
|
72 |
-
st.subheader("Aylık Getiriler")
|
73 |
monthly_returns = df.resample('M').ffill().pct_change().dropna()
|
74 |
st.dataframe(monthly_returns)
|
75 |
|
76 |
-
st.subheader("Yıllık Getiriler")
|
77 |
annual_returns = df.resample('Y').ffill().pct_change().dropna()
|
78 |
st.dataframe(annual_returns)
|
79 |
|
80 |
# Risk Analizi
|
81 |
-
st.subheader("Volatilite (Yıllık)")
|
82 |
volatility = daily_returns.std() * np.sqrt(252)
|
83 |
st.dataframe(volatility)
|
84 |
|
85 |
-
st.subheader("Beta Değeri")
|
86 |
if not daily_returns.empty:
|
87 |
beta = daily_returns.cov() / daily_returns.var()
|
88 |
st.dataframe(beta)
|
89 |
|
90 |
# Hareketli Ortalama
|
91 |
-
st.subheader("Hareketli Ortalama")
|
92 |
window_size = st.sidebar.slider("Hareketli Ortalama Penceresi (Gün)", 5, 100, 20)
|
93 |
moving_avg = df.rolling(window=window_size).mean()
|
94 |
st.line_chart(moving_avg)
|
95 |
|
96 |
# Tarih Aralığı Filtreleme
|
97 |
-
st.subheader("Tarih Aralığına Göre Veri Filtreleme")
|
98 |
-
start_date = st.sidebar.date_input("Başlangıç Tarihi", pd.to_datetime("2023-01-01"))
|
99 |
-
end_date = st.sidebar.date_input("Bitiş Tarihi", pd.to_datetime("2024-01-01"))
|
100 |
|
101 |
if start_date < end_date:
|
102 |
filtered_data = df[(df.index >= start_date) & (df.index <= end_date)]
|
103 |
st.line_chart(filtered_data)
|
104 |
else:
|
105 |
-
st.error("Başlangıç tarihi bitiş tarihinden sonra olmamalıdır.")
|
106 |
|
107 |
# Monte Carlo Simülasyonu
|
108 |
-
st.subheader("Monte Carlo Simülasyonu")
|
109 |
|
110 |
if not daily_returns.empty:
|
111 |
mean_returns = daily_returns.mean()
|
@@ -127,5 +127,8 @@ if not df.empty:
|
|
127 |
|
128 |
st.line_chart(simulation_df)
|
129 |
else:
|
130 |
-
st.warning("Monte Carlo Simülasyonu için yeterli veri yok.")
|
|
|
|
|
|
|
131 |
|
|
|
21 |
# Veri çekme fonksiyonu
|
22 |
def load_data(symbols):
|
23 |
data = {}
|
24 |
+
|
25 |
for sym in symbols:
|
26 |
try:
|
27 |
stock_data = yf.download(sym, start="2022-01-01", end="2024-01-01")['Close']
|
28 |
if not stock_data.empty:
|
29 |
data[sym] = stock_data
|
30 |
else:
|
31 |
+
st.warning(f"⚠️ {sym} için veri bulunamadı! Lütfen doğru bir hisse senedi sembolü girdiğinizden emin olun.")
|
32 |
+
|
33 |
except Exception as e:
|
34 |
+
st.error(f"❌ {sym} için veri çekilirken hata oluştu: {e}")
|
35 |
|
36 |
if not data:
|
37 |
+
st.warning("⚠️ Hiçbir hisse senedi verisi yüklenemedi. Lütfen sembolleri kontrol edin.")
|
38 |
return pd.DataFrame() # Boş DataFrame döndür
|
39 |
+
|
40 |
return pd.DataFrame(data)
|
41 |
|
42 |
# Veriyi yükleyin
|
43 |
df = load_data(symbols)
|
44 |
|
45 |
+
if not df.empty and not df.isnull().all().all():
|
46 |
# Portföy performansını hesaplayın
|
47 |
total_investment = sum(amounts.values())
|
48 |
|
|
|
50 |
portfolio_value = df.iloc[-1] * pd.Series(amounts)
|
51 |
portfolio_value_total = portfolio_value.sum()
|
52 |
|
53 |
+
st.write(f"💰 **Toplam yatırım miktarı:** ${total_investment:.2f}")
|
54 |
+
st.write(f"📊 **Her bir hissenin mevcut değeri:**")
|
55 |
st.write(portfolio_value)
|
56 |
+
st.write(f"💼 **Portföyün toplam değeri:** ${portfolio_value_total:.2f}")
|
57 |
|
58 |
# Grafikler
|
59 |
+
st.subheader("📈 Hisse Senedi Fiyatları")
|
60 |
fig = px.line(df, title="Hisse Senedi Fiyatları")
|
61 |
st.plotly_chart(fig)
|
62 |
|
63 |
+
st.subheader("📊 Portföy Dağılım Grafiği")
|
64 |
fig = px.bar(x=amounts.keys(), y=portfolio_value, labels={"x": 'Yatırım Araçları', 'y': 'Portföy Değeri'})
|
65 |
st.plotly_chart(fig)
|
66 |
|
67 |
# Getiri hesaplamaları
|
68 |
+
st.subheader("📅 Günlük Getiriler")
|
69 |
daily_returns = df.pct_change().dropna()
|
70 |
st.dataframe(daily_returns)
|
71 |
|
72 |
+
st.subheader("📅 Aylık Getiriler")
|
73 |
monthly_returns = df.resample('M').ffill().pct_change().dropna()
|
74 |
st.dataframe(monthly_returns)
|
75 |
|
76 |
+
st.subheader("📅 Yıllık Getiriler")
|
77 |
annual_returns = df.resample('Y').ffill().pct_change().dropna()
|
78 |
st.dataframe(annual_returns)
|
79 |
|
80 |
# Risk Analizi
|
81 |
+
st.subheader("📊 Volatilite (Yıllık)")
|
82 |
volatility = daily_returns.std() * np.sqrt(252)
|
83 |
st.dataframe(volatility)
|
84 |
|
85 |
+
st.subheader("📉 Beta Değeri")
|
86 |
if not daily_returns.empty:
|
87 |
beta = daily_returns.cov() / daily_returns.var()
|
88 |
st.dataframe(beta)
|
89 |
|
90 |
# Hareketli Ortalama
|
91 |
+
st.subheader("📊 Hareketli Ortalama")
|
92 |
window_size = st.sidebar.slider("Hareketli Ortalama Penceresi (Gün)", 5, 100, 20)
|
93 |
moving_avg = df.rolling(window=window_size).mean()
|
94 |
st.line_chart(moving_avg)
|
95 |
|
96 |
# Tarih Aralığı Filtreleme
|
97 |
+
st.subheader("📅 Tarih Aralığına Göre Veri Filtreleme")
|
98 |
+
start_date = st.sidebar.date_input("📅 Başlangıç Tarihi", pd.to_datetime("2023-01-01"))
|
99 |
+
end_date = st.sidebar.date_input("📅 Bitiş Tarihi", pd.to_datetime("2024-01-01"))
|
100 |
|
101 |
if start_date < end_date:
|
102 |
filtered_data = df[(df.index >= start_date) & (df.index <= end_date)]
|
103 |
st.line_chart(filtered_data)
|
104 |
else:
|
105 |
+
st.error("❌ Başlangıç tarihi bitiş tarihinden sonra olmamalıdır.")
|
106 |
|
107 |
# Monte Carlo Simülasyonu
|
108 |
+
st.subheader("📊 Monte Carlo Simülasyonu")
|
109 |
|
110 |
if not daily_returns.empty:
|
111 |
mean_returns = daily_returns.mean()
|
|
|
127 |
|
128 |
st.line_chart(simulation_df)
|
129 |
else:
|
130 |
+
st.warning("⚠️ Monte Carlo Simülasyonu için yeterli veri yok.")
|
131 |
+
|
132 |
+
else:
|
133 |
+
st.error("❌ Hisse senedi verisi bulunamadı. Lütfen geçerli bir sembol girin.")
|
134 |
|