File size: 1,853 Bytes
bf32599
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import yfinance as yf
from prophet import Prophet
import pandas as pd
import matplotlib.pyplot as plt

st.title("💱 Döviz Kuru Tahmin Uygulaması (Prophet)")
st.write("Yahoo Finance verilerini kullanarak gelecekteki kur hareketlerini tahmin edin.")

# 1. Kullanıcı Seçimleri
pariteler = {
    "INR/USD": "INRUSD=X",
    "USD/TRY": "USDTRY=X",
    "EUR/USD": "EURUSD=X",
    "GBP/USD": "GBPUSD=X",
    "BTC/USD": "BTC-USD"
}

secilen_etiket = st.selectbox("Tahmin edilecek pariteyi seçin:", list(pariteler.keys()))
symbol = pariteler[secilen_etiket]
tahmin_suresi = st.slider("Tahmin gün sayısı:", 7, 90, 30)

# 2. Veri İndirme
@st.cache_data
def veri_indir(sym):
    data = yf.download(sym, period="2y", interval="1d")
    # MultiIndex hatasını giderme
    if isinstance(data.columns, pd.MultiIndex):
        data.columns = data.columns.get_level_values(0)
    return data

data = veri_indir(symbol)

if not data.empty:
    # Prophet Formatına Dönüştürme
    df_prophet = data.reset_index()[['Date', 'Close']]
    df_prophet.columns = ['ds', 'y']
    df_prophet['ds'] = df_prophet['ds'].dt.tz_localize(None)

    # 3. Model Eğitimi
    model = Prophet(daily_seasonality=True)
    model.fit(df_prophet)

    # 4. Tahmin
    future = model.make_future_dataframe(periods=tahmin_suresi)
    forecast = model.predict(future)

    # 5. Görselleştirme
    st.subheader(f"{secilen_etiket} Tahmin Grafiği")
    fig1 = model.plot(forecast)
    st.pyplot(fig1)

    st.subheader("Trend ve Mevsimsellik Bileşenleri")
    fig2 = model.plot_components(forecast)
    st.pyplot(fig2)

    # Güncel Bilgi Notu (Örnek Kur Bilgisi)
    if symbol == "INRUSD=X":
        st.info("Bilgi: 11 Nisan 2026 itibarıyla INR/USD kuru yaklaşık 0.01074 seviyesindedir.")
else:
    st.error("Veri alınamadı, lütfen tekrar deneyin.")