Spaces:
Running
Running
File size: 4,537 Bytes
ac47c35 6a2e1f1 ac47c35 6a2e1f1 ac47c35 6a2e1f1 ac47c35 6a2e1f1 ac47c35 6a2e1f1 ac47c35 6a2e1f1 ac47c35 6a2e1f1 |
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 125 126 127 128 129 130 131 132 |
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
# Veri çekme fonksiyonu
def load_data(symbols):
data = {}
for sym in symbols:
try:
stock_data = yf.download(sym, start="2022-01-01", end="2024-01-01")['Close']
if not stock_data.empty:
data[sym] = stock_data
else:
st.warning(f"{sym} için veri bulunamadı!")
except Exception as e:
st.error(f"{sym} için veri çekilirken hata oluştu: {e}")
if not data:
st.error("Hiçbir hisse senedi verisi yüklenemedi. Lütfen sembolleri kontrol edin.")
return pd.DataFrame() # Boş DataFrame döndür
return pd.DataFrame(data)
# Veriyi yükleyin
df = load_data(symbols)
if not df.empty:
# Portföy performansını hesaplayın
total_investment = sum(amounts.values())
if not df.empty:
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}")
# 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)
# Getiri hesaplamaları
st.subheader("Günlük Getiriler")
daily_returns = df.pct_change().dropna()
st.dataframe(daily_returns)
st.subheader("Aylık Getiriler")
monthly_returns = df.resample('M').ffill().pct_change().dropna()
st.dataframe(monthly_returns)
st.subheader("Yıllık Getiriler")
annual_returns = df.resample('Y').ffill().pct_change().dropna()
st.dataframe(annual_returns)
# Risk Analizi
st.subheader("Volatilite (Yıllık)")
volatility = daily_returns.std() * np.sqrt(252)
st.dataframe(volatility)
st.subheader("Beta Değeri")
if not daily_returns.empty:
beta = daily_returns.cov() / daily_returns.var()
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.line_chart(moving_avg)
# Tarih Aralığı Filtreleme
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"))
if start_date < end_date:
filtered_data = df[(df.index >= start_date) & (df.index <= end_date)]
st.line_chart(filtered_data)
else:
st.error("Başlangıç tarihi bitiş tarihinden sonra olmamalıdır.")
# Monte Carlo Simülasyonu
st.subheader("Monte Carlo Simülasyonu")
if not daily_returns.empty:
mean_returns = daily_returns.mean()
simulations = 1000
simulation_df = pd.DataFrame()
for x in range(simulations):
simulated_prices = []
for symbol in symbols:
if symbol in df.columns:
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)
if simulated_prices:
simulation_df[x] = pd.Series([np.sum(sim) for sim in zip(*simulated_prices)])
st.line_chart(simulation_df)
else:
st.warning("Monte Carlo Simülasyonu için yeterli veri yok.")
|