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

Portfolio Manager uygulaması eklendi

Browse files
Files changed (2) hide show
  1. app.py +123 -0
  2. requirements.txt +5 -0
app.py ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ import yfinance as yf
5
+ import plotly.express as px
6
+
7
+ # Başlık
8
+ st.title('Portföy Yönetim Aracı')
9
+
10
+ # Kullanıcıdan hisse senedi sembollerini alın
11
+ st.sidebar.header("Portföy Bilgileri")
12
+ symbols = st.sidebar.text_input("Hisse Senedi Sembolleri (Virgülle Ayırın)", "AAPL, MSFT, TSLA")
13
+ symbols = [sym.strip().upper() for sym in symbols.split(',')]
14
+
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)
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ streamlit
2
+ pandas
3
+ numpy
4
+ yfinance
5
+ plotly