Spaces:
Sleeping
Sleeping
Enes Berke Karaoğlan
commited on
Commit
·
ac47c35
1
Parent(s):
3357840
Portfolio Manager uygulaması eklendi
Browse files- app.py +123 -0
- 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
|