Spaces:
Sleeping
Sleeping
File size: 4,633 Bytes
ac47c35 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
import streamlit as st
import pandas as pd
import numpy as np
import yfinance as yf
import plotly.express as px
# Başlık
st.title('Portföy Yönetim Aracı')
# Kullanıcıdan hisse senedi sembollerini alın
st.sidebar.header("Portföy Bilgileri")
symbols = st.sidebar.text_input("Hisse Senedi Sembolleri (Virgülle Ayırın)", "AAPL, MSFT, TSLA")
symbols = [sym.strip().upper() for sym in symbols.split(',')]
# Kullanıcıdan her hisse senedi için yatırım miktarını alın
amounts = {}
for sym in symbols:
amount = st.sidebar.number_input(f'{sym} için yatırım miktarı girin :', min_value=0, value=1000)
amounts[sym] = amount
def load_data(symbols):
data = {}
for sym in symbols:
data[sym] = yf.download(sym, start="2022-01-01", end="2024-01-01")['Close']
if not data:
raise ValueError("Veri çekilmedi. Lütfen hisse senedi sembollerini kontrol edin.")
df = pd.DataFrame(data)
if df.empty:
raise ValueError("Oluşturulan DataFrame boş.")
return df
# Veriyi yükleyin
df = load_data(symbols)
# Portföy performansını hesaplayın
total_investment = sum(amounts.values())
portfolio_value = df.iloc[-1] * pd.Series(amounts)
portfolio_value_total = portfolio_value.sum()
st.write(f"Toplam yatırım miktarı: ${total_investment:.2f}")
st.write(f"Her bir hissenin mevcut değeri:")
st.write(portfolio_value)
st.write(f"Portföyün toplam değeri: ${portfolio_value_total:.2f}")
# Plotly ile Etkileşimli Grafikler
st.subheader("Hisse Senedi Fiyatları")
fig = px.line(df, title = "Hisse Senedi Fiyatları")
st.plotly_chart(fig)
st.subheader("Portföy Dağılım Grafiği")
fig = px.bar(x = amounts.keys(), y = portfolio_value, labels = {"x" : 'Yatırım Araçları', 'y' : 'Portföy Değeri' })
st.plotly_chart(fig)
st.subheader("Günlük Getiriler")
daily_returns = df.pct_change().dropna()
st.dataframe(daily_returns)
st.write("Günlük getiriler, hisse senetlerinin günlük fiyat değişimlerini gösterir.")
st.subheader("Aylık Getiriler")
monthly_returns = df.resample('M').ffill().pct_change().dropna()
st.dataframe(monthly_returns)
st.write("Aylık getiriler, hisse senetlerinin her ay için fiyat değişimlerini gösterir.")
st.subheader("Yıllık Getiriler")
annual_returns = df.resample('Y').ffill().pct_change().dropna()
st.dataframe(annual_returns)
st.write("Yıllık getiriler, hisse senetlerinin her yıl için fiyat değişimlerini gösterir.")
# Risk Analizi
st.subheader("Volatilite (Yıllık)")
volatility = daily_returns.std() * np.sqrt(252)
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.")
st.dataframe(volatility)
st.subheader("Beta Değeri")
beta = daily_returns.cov() / daily_returns.var()
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.")
st.dataframe(beta)
# Hareketli Ortalama
st.subheader("Hareketli Ortalama")
window_size = st.sidebar.slider("Hareketli Ortalama Penceresi (Gün)", 5, 100, 20)
moving_avg = df.rolling(window=window_size).mean()
st.write(f"{window_size} Günlük Hareketli Ortalama:")
st.line_chart(moving_avg)
# Zaman Aralığı Filtreleri
st.subheader("Tarih Aralığına Göre Veri Filtreleme")
start_date = st.sidebar.date_input("Başlangıç Tarihi", pd.to_datetime("2023-01-01"))
end_date = st.sidebar.date_input("Bitiş Tarihi", pd.to_datetime("2024-01-01"))
start_date = pd.to_datetime(start_date)
end_date = pd.to_datetime(end_date)
if start_date < end_date:
filtered_data = df[(df.index >= start_date) & (df.index <= end_date)]
st.write("Seçilen tarih aralığındaki hisse senedi fiyatları:")
st.line_chart(filtered_data)
else:
st.error("Başlangıç tarihi bitiş tarihinden sonra olmamalıdır.")
# Monte Carlo Simülasyonu
mean_returns = daily_returns.mean() # Ortalama günlük getiriler
simulations = 1000
simulation_df = pd.DataFrame()
for x in range(simulations):
simulated_prices = []
for symbol in symbols:
price_series = [df[symbol].iloc[-1]]
for _ in range(365): # 1 yıl
price_series.append(price_series[-1] * (1 + np.random.normal(mean_returns[symbol], volatility[symbol])))
simulated_prices.append(price_series)
simulation_df[x] = pd.Series([np.sum(sim) for sim in zip(*simulated_prices)])
st.write(
"""
**Monte Carlo Simülasyonu:** Belirli bir varlığın veya portföyün gelecekteki değerlerini tahmin etmek için kullanılan bir yöntemdir.
"""
)
st.line_chart(simulation_df)
|