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.")