Enes Berke Karaoğlan commited on
Commit
6a2e1f1
·
1 Parent(s): ac47c35

fix: DataFrame hatası düzeltildi, Code_1.txt eklendi ve demo video yüklendi.

Browse files
Files changed (2) hide show
  1. Code_1.txt +162 -0
  2. app.py +103 -95
Code_1.txt ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import matplotlib.pyplot as plt
5
+ import yfinance as yf
6
+
7
+
8
+ # Başlık
9
+ st.title('Portföy Yönetim Aracı')
10
+
11
+ # Kullanıcıdan hisse senedi sembollerini alın
12
+
13
+ st.sidebar.header("Portföy Bilgileri")
14
+ symbols = st.sidebar.text_input("Hisse Senedi Sembolleri (Virgülle Ayırın)", "AAPL, MSFT, TSLA")
15
+ symbols = [sym.strip().upper() for sym in symbols.split(',')]
16
+
17
+
18
+
19
+
20
+ # Kullanıcıdan her hisse senedi için yatırım miktarını alın
21
+
22
+ amounts = {}
23
+
24
+ for sym in symbols:
25
+ amount = st.sidebar.number_input(f'{sym} için yatırım miktarı girin :', min_value=0, value=1000)
26
+ amounts[sym] = amount
27
+
28
+
29
+ def load_data(symbols):
30
+ data = {}
31
+
32
+ for sym in symbols:
33
+ # Verileri indirin ve sadece 'Close' (kapanış) fiyatlarını alın
34
+ data[sym] = yf.download(sym, start="2022-01-01", end="2024-01-01")['Close']
35
+
36
+ # Eğer data sözlüğü boştur veya yanlışsa, uygun hata mesajı döndür
37
+ if not data:
38
+ raise ValueError("Veri çekilmedi. Lütfen hisse senedi sembollerini kontrol edin.")
39
+
40
+ # Her bir sembol için kapanış fiyatlarını içeren DataFrame'i oluşturun
41
+ df = pd.DataFrame(data)
42
+
43
+ # Eğer df içeriği eksikse veya bir sorun varsa, uygun hata mesajı döndür
44
+ if df.empty:
45
+ raise ValueError("Oluşturulan DataFrame boş.")
46
+
47
+ return df
48
+
49
+
50
+
51
+ # Veriyi yükleyin
52
+ df = load_data(symbols)
53
+
54
+
55
+ # Portföy performansını hesaplayın
56
+ total_investment = sum(amounts.values()) # Toplam yatırım miktarını hesaplayın
57
+ portfolio_value = df.iloc[-1] * pd.Series(amounts) # Her bir hissenin mevcut değerini hesaplayın
58
+ portfolio_value_total = portfolio_value.sum() # Portföyün toplam değerini hesaplayın
59
+
60
+
61
+
62
+ st.write(f"Toplam yatırım miktarı: ${total_investment:.2f}")
63
+ st.write(f"Her bir hissenin mevcut değeri:")
64
+ st.write(portfolio_value)
65
+ st.write(f"Portföyün toplam değeri: ${portfolio_value_total:.2f}")
66
+
67
+
68
+
69
+ # Plotly ile Etkileşimli Grafikler
70
+
71
+ import plotly.express as px
72
+
73
+ # Interaktif Hisse Fiyat Grafiği
74
+ fig = px.line(df, title = "Hisse Senedi Fiyatları")
75
+ st.plotly_chart(fig)
76
+
77
+ # Portföy Dağıılım Grafiği
78
+ fig = px.bar(x = amounts.keys(), y = portfolio_value, labels = {"x" : 'Yatırım Araçları', 'y' : 'Portföy Değeri' })
79
+ st.plotly_chart(fig)
80
+
81
+
82
+ # Getiri Hesaplama
83
+ daily_returns = df.pct_change().dropna()
84
+ st.write("Günlük Getiriler:")
85
+ st.dataframe(daily_returns)
86
+
87
+
88
+
89
+ # Aylık ve Yıllık Getiriler
90
+ monthly_returns = df.resample('M').ffill().pct_change().dropna()
91
+ annual_returns = df.resample('Y').ffill().pct_change().dropna()
92
+
93
+ st.write("Aylık Getiriler:")
94
+ st.dataframe(monthly_returns)
95
+
96
+ st.write("Yıllık Getiriler:")
97
+ st.dataframe(annual_returns)
98
+
99
+
100
+
101
+ # Risk Analizi #
102
+
103
+ # Volatilite Hesaplama
104
+
105
+ volatility = daily_returns.std() * np.sqrt(252) # Yıllık Volatilite
106
+ st.write("Volatilite (Yıllık) : " , "Volatilite, bir varlığın fiyatındaki dalgalanmaların büyüklüğünü ifade eder. Bu kod, günlük volatiliteyi yıllık volatiliteye çevirir ve bunu gösterir.",
107
+ "Volatilite 0.29, yıllık bazda bir varlığın fiyatında %29'luk bir dalgalanma bekleyebileceğinizi ifade eder. Bu, varlığın yıllık getirisinin ortalamadan %29 sapma gösterebileceği anlamına gelir.")
108
+
109
+ st.dataframe(volatility)
110
+
111
+
112
+ # Portföyün beta değeri
113
+
114
+ beta = daily_returns.cov() / daily_returns.var()
115
+ st.write("Beta Değeri :" , " bir varlığın veya portföyün piyasa ile olan ilişkisini ölçer. Piyasa riskine karşı duyarlılığı anlamak için kullanılır.",
116
+ "Özetle, beta değeri 0,70 olan bir varlık, piyasa hareketlerine kıyasla daha az dalgalanma gösterir." ,
117
+ "Yani, bu varlık, piyasanın genel hareketlerinden daha az etkilenir ve daha stabil bir performans sergiler. Bu durum, yatırımcılar için daha düşük riskli bir yatırım anlamına gelir.")
118
+ st.dataframe(beta)
119
+
120
+
121
+ # Hareketli Ortalama
122
+
123
+ window_size = st.sidebar.slider("Hareketli Ortalama Penceresi (Gün)", 5, 100, 20)
124
+ moving_avg = df.rolling(window=window_size).mean()
125
+
126
+
127
+ st.write(f"{window_size} Günlük Hareketli Ortalama:")
128
+ st.line_chart(moving_avg)
129
+
130
+
131
+ # Filtreler
132
+ start_date = st.sidebar.date_input("Başlangıç Tarihi", pd.to_datetime("2023-01-01"))
133
+ end_date = st.sidebar.date_input("Bitiş Tarihi", pd.to_datetime("2024-01-01"))
134
+
135
+ # Tarih aralığına göre veriyi filtrele
136
+ start_date = pd.to_datetime(start_date)
137
+ end_date = pd.to_datetime(end_date)
138
+ z
139
+ if start_date < end_date:
140
+ filtered_data = df[(df.index >= start_date) & (df.index <= end_date)]
141
+ st.line_chart(filtered_data)
142
+ else:
143
+ st.error("Başlangıç tarihi bitiş tarihinden sonra olmamalıdır.")
144
+
145
+
146
+ # Monte Carlo Simülasyonu
147
+ mean_returns = daily_returns.mean() # Ortalama günlük getiriler
148
+ simulations = 1000
149
+ simulation_df = pd.DataFrame()
150
+
151
+ for x in range(simulations):
152
+ simulated_prices = []
153
+
154
+ for symbol in symbols:
155
+ price_series = [df[symbol].iloc[-1]]
156
+ for _ in range(365): # 1 yıl
157
+ price_series.append(price_series[-1] * (1 + np.random.normal(mean_returns[symbol], volatility[symbol])))
158
+ simulated_prices.append(price_series)
159
+
160
+ simulation_df[x] = pd.Series([np.sum(sim) for sim in zip(*simulated_prices)])
161
+
162
+ st.line_chart(simulation_df)
app.py CHANGED
@@ -15,109 +15,117 @@ symbols = [sym.strip().upper() for sym in symbols.split(',')]
15
  # Kullanıcıdan her hisse senedi için yatırım miktarını alın
16
  amounts = {}
17
  for sym in symbols:
18
- amount = st.sidebar.number_input(f'{sym} için yatırım miktarı girin :', min_value=0, value=1000)
19
  amounts[sym] = amount
20
 
 
21
  def load_data(symbols):
22
  data = {}
 
23
  for sym in symbols:
24
- data[sym] = yf.download(sym, start="2022-01-01", end="2024-01-01")['Close']
 
 
 
 
 
 
 
 
 
25
  if not data:
26
- raise ValueError("Veri çekilmedi. Lütfen hisse senedi sembollerini kontrol edin.")
27
- df = pd.DataFrame(data)
28
- if df.empty:
29
- raise ValueError("Oluşturulan DataFrame boş.")
30
- return df
31
 
32
  # Veriyi yükleyin
33
  df = load_data(symbols)
34
 
35
- # Portföy performansını hesaplayın
36
- total_investment = sum(amounts.values())
37
- portfolio_value = df.iloc[-1] * pd.Series(amounts)
38
- portfolio_value_total = portfolio_value.sum()
39
-
40
- st.write(f"Toplam yatırım miktarı: ${total_investment:.2f}")
41
- st.write(f"Her bir hissenin mevcut değeri:")
42
- st.write(portfolio_value)
43
- st.write(f"Portföyün toplam değeri: ${portfolio_value_total:.2f}")
44
-
45
- # Plotly ile Etkileşimli Grafikler
46
- st.subheader("Hisse Senedi Fiyatları")
47
- fig = px.line(df, title = "Hisse Senedi Fiyatları")
48
- st.plotly_chart(fig)
49
-
50
- st.subheader("Portföy Dağılım Grafiği")
51
- fig = px.bar(x = amounts.keys(), y = portfolio_value, labels = {"x" : 'Yatırım Araçları', 'y' : 'Portföy Değeri' })
52
- st.plotly_chart(fig)
53
-
54
- st.subheader("Günlük Getiriler")
55
- daily_returns = df.pct_change().dropna()
56
- st.dataframe(daily_returns)
57
- st.write("Günlük getiriler, hisse senetlerinin günlük fiyat değişimlerini gösterir.")
58
-
59
- st.subheader("Aylık Getiriler")
60
- monthly_returns = df.resample('M').ffill().pct_change().dropna()
61
- st.dataframe(monthly_returns)
62
- st.write("Aylık getiriler, hisse senetlerinin her ay için fiyat değişimlerini gösterir.")
63
-
64
- st.subheader("Yıllık Getiriler")
65
- annual_returns = df.resample('Y').ffill().pct_change().dropna()
66
- st.dataframe(annual_returns)
67
- st.write("Yıllık getiriler, hisse senetlerinin her yıl için fiyat değişimlerini gösterir.")
68
-
69
- # Risk Analizi
70
- st.subheader("Volatilite (Yıllık)")
71
- volatility = daily_returns.std() * np.sqrt(252)
72
- st.write("Volatilite, bir varlığın fiyatındaki dalgalanmaların büyüklüğünü ifade eder. Bu kod, günlük volatiliteyi yıllık volatiliteye çevirir.")
73
- st.dataframe(volatility)
74
-
75
- st.subheader("Beta Değeri")
76
- beta = daily_returns.cov() / daily_returns.var()
77
- st.write("Beta değeri, bir varlığın piyasa ile olan ilişkisini ölçer. Piyasa riskine karşı duyarlılığı anlamak için kullanılır.")
78
- st.dataframe(beta)
79
-
80
- # Hareketli Ortalama
81
- st.subheader("Hareketli Ortalama")
82
- window_size = st.sidebar.slider("Hareketli Ortalama Penceresi (Gün)", 5, 100, 20)
83
- moving_avg = df.rolling(window=window_size).mean()
84
- st.write(f"{window_size} Günlük Hareketli Ortalama:")
85
- st.line_chart(moving_avg)
86
-
87
- # Zaman Aralığı Filtreleri
88
- st.subheader("Tarih Aralığına Göre Veri Filtreleme")
89
- start_date = st.sidebar.date_input("Başlangıç Tarihi", pd.to_datetime("2023-01-01"))
90
- end_date = st.sidebar.date_input("Bitiş Tarihi", pd.to_datetime("2024-01-01"))
91
-
92
- start_date = pd.to_datetime(start_date)
93
- end_date = pd.to_datetime(end_date)
94
-
95
- if start_date < end_date:
96
- filtered_data = df[(df.index >= start_date) & (df.index <= end_date)]
97
- st.write("Seçilen tarih aralığındaki hisse senedi fiyatları:")
98
- st.line_chart(filtered_data)
99
- else:
100
- st.error("Başlangıç tarihi bitiş tarihinden sonra olmamalıdır.")
101
-
102
- # Monte Carlo Simülasyonu
103
- mean_returns = daily_returns.mean() # Ortalama günlük getiriler
104
- simulations = 1000
105
- simulation_df = pd.DataFrame()
106
-
107
- for x in range(simulations):
108
- simulated_prices = []
109
 
110
- for symbol in symbols:
111
- price_series = [df[symbol].iloc[-1]]
112
- for _ in range(365): # 1 yıl
113
- price_series.append(price_series[-1] * (1 + np.random.normal(mean_returns[symbol], volatility[symbol])))
114
- simulated_prices.append(price_series)
115
-
116
- simulation_df[x] = pd.Series([np.sum(sim) for sim in zip(*simulated_prices)])
117
-
118
- st.write(
119
- """
120
- **Monte Carlo Simülasyonu:** Belirli bir varlığın veya portföyün gelecekteki değerlerini tahmin etmek için kullanılan bir yöntemdir.
121
- """
122
- )
123
- st.line_chart(simulation_df)
 
 
 
 
 
 
 
 
 
15
  # Kullanıcıdan her hisse senedi için yatırım miktarını alın
16
  amounts = {}
17
  for sym in symbols:
18
+ amount = st.sidebar.number_input(f'{sym} için yatırım miktarı girin:', min_value=0, value=1000)
19
  amounts[sym] = amount
20
 
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.error("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:
46
+ # Portföy performansını hesaplayın
47
+ total_investment = sum(amounts.values())
48
+
49
+ 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ı: ${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()
112
+ simulations = 1000
113
+ simulation_df = pd.DataFrame()
114
+
115
+ for x in range(simulations):
116
+ simulated_prices = []
117
+
118
+ for symbol in symbols:
119
+ if symbol in df.columns:
120
+ price_series = [df[symbol].iloc[-1]]
121
+ for _ in range(365): # 1 yıl
122
+ price_series.append(price_series[-1] * (1 + np.random.normal(mean_returns[symbol], volatility[symbol])))
123
+ simulated_prices.append(price_series)
124
+
125
+ if simulated_prices:
126
+ simulation_df[x] = pd.Series([np.sum(sim) for sim in zip(*simulated_prices)])
127
+
128
+ st.line_chart(simulation_df)
129
+ else:
130
+ st.warning("Monte Carlo Simülasyonu için yeterli veri yok.")
131
+