GoshawkVortexAI commited on
Commit
7e39360
·
verified ·
1 Parent(s): 33c9fed

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -13
app.py CHANGED
@@ -2,13 +2,14 @@
2
  # EUR/USD · ENSEMBLE FORECAST ENGINE · Premium Edition
3
  # 5 Model: Random Forest · Gradient Boosting · AdaBoost · Ridge · SVR
4
  # TP/SL hesaplama · ATR tabanlı risk yönetimi · Backtest analizi
 
5
  # ══════════════════════════════════════════════════════════════════════════════
6
 
7
  import gradio as gr
8
  import pandas as pd
9
  import numpy as np
10
  from datetime import datetime, timedelta
11
- import yfinance as yf
12
  from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, AdaBoostRegressor
13
  from sklearn.linear_model import Ridge
14
  from sklearn.svm import SVR
@@ -48,19 +49,60 @@ MODEL_COLORS = [ACCENT, PURPLE, GREEN, AMBER, PINK]
48
  # VERİ KATMANI
49
  # ══════════════════════════════════════════════════════════════════════════════
50
 
51
- def get_forex_data(symbol: str = "EURUSD=X", period: str = "120d") -> pd.DataFrame | None:
 
 
52
  """
53
- Yahoo Finance'ten günlük OHLCV verisi indirir.
54
- 120 günlük pencere — SMA-50 ve lag-7 için yeterli.
55
  """
56
  try:
57
- raw = yf.download(symbol, period=period, interval="1d", progress=False, auto_adjust=True)
58
- if raw is None or len(raw) < 60:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  return None
60
- # MultiIndex sütunlarını düzelt
61
- if isinstance(raw.columns, pd.MultiIndex):
62
- raw.columns = raw.columns.get_level_values(0)
63
- return raw
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  except Exception:
65
  return None
66
 
@@ -576,9 +618,9 @@ def build_figure(
576
  def predict_eurusd():
577
  try:
578
  # 1. Veri
579
- data = get_forex_data()
580
  if data is None:
581
- return "❌ Veri indirilemedi. İnternet bağlantınızı kontrol edin.", None
582
 
583
  # 2. Feature mühendisliği
584
  df = create_features(data)
@@ -765,7 +807,7 @@ HEADER = """
765
  </div>
766
  </div>
767
  <div style="display:flex;gap:10px;flex-wrap:wrap;margin-top:4px;">
768
- <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">📡 Yahoo Finance 120g</span>
769
  <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">📐 42 Feature</span>
770
  <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">🧪 10-Gün Backtest</span>
771
  <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">🎯 ATR TP/SL</span>
 
2
  # EUR/USD · ENSEMBLE FORECAST ENGINE · Premium Edition
3
  # 5 Model: Random Forest · Gradient Boosting · AdaBoost · Ridge · SVR
4
  # TP/SL hesaplama · ATR tabanlı risk yönetimi · Backtest analizi
5
+ # Veri: Alpha Vantage FX Daily API
6
  # ══════════════════════════════════════════════════════════════════════════════
7
 
8
  import gradio as gr
9
  import pandas as pd
10
  import numpy as np
11
  from datetime import datetime, timedelta
12
+ import requests
13
  from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor, AdaBoostRegressor
14
  from sklearn.linear_model import Ridge
15
  from sklearn.svm import SVR
 
49
  # VERİ KATMANI
50
  # ══════════════════════════════════════════════════════════════════════════════
51
 
52
+ ALPHA_VANTAGE_KEY = "Z5LSPHTNP6NI6J7Y"
53
+
54
+ def get_forex_data(from_sym: str = "EUR", to_sym: str = "USD") -> pd.DataFrame | None:
55
  """
56
+ Alpha Vantage'ten günlük OHLCV verisi indirir.
57
+ FX_DAILY endpoint — outputsize=full ile 120+ günlük veri.
58
  """
59
  try:
60
+ url = "https://www.alphavantage.co/query"
61
+ params = {
62
+ "function" : "FX_DAILY",
63
+ "from_symbol": from_sym,
64
+ "to_symbol" : to_sym,
65
+ "outputsize" : "full",
66
+ "apikey" : ALPHA_VANTAGE_KEY,
67
+ }
68
+ resp = requests.get(url, params=params, timeout=30)
69
+ resp.raise_for_status()
70
+ js = resp.json()
71
+
72
+ # Hata kontrolü
73
+ if "Error Message" in js:
74
+ return None
75
+ if "Note" in js:
76
+ # API limit aşımı — compact ile tekrar dene
77
+ params["outputsize"] = "compact"
78
+ resp = requests.get(url, params=params, timeout=30)
79
+ js = resp.json()
80
+
81
+ ts = js.get("Time Series FX (Daily)", {})
82
+ if not ts:
83
  return None
84
+
85
+ rows = []
86
+ for date_str, v in ts.items():
87
+ rows.append({
88
+ "Date" : pd.to_datetime(date_str),
89
+ "Open" : float(v["1. open"]),
90
+ "High" : float(v["2. high"]),
91
+ "Low" : float(v["3. low"]),
92
+ "Close": float(v["4. close"]),
93
+ "Volume": 0.0, # Forex OTC — gerçek hacim yok
94
+ })
95
+
96
+ df = pd.DataFrame(rows).sort_values("Date").set_index("Date")
97
+
98
+ # Son 150 günü al (SMA-50 + lag-7 için yeterli)
99
+ df = df.tail(150)
100
+
101
+ if len(df) < 60:
102
+ return None
103
+
104
+ return df
105
+
106
  except Exception:
107
  return None
108
 
 
618
  def predict_eurusd():
619
  try:
620
  # 1. Veri
621
+ data = get_forex_data("EUR", "USD")
622
  if data is None:
623
+ return "❌ Veri indirilemedi. Alpha Vantage API sınırı veya internet bağlantısını kontrol edin.", None
624
 
625
  # 2. Feature mühendisliği
626
  df = create_features(data)
 
807
  </div>
808
  </div>
809
  <div style="display:flex;gap:10px;flex-wrap:wrap;margin-top:4px;">
810
+ <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">📡 Alpha Vantage FX Daily</span>
811
  <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">📐 42 Feature</span>
812
  <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">🧪 10-Gün Backtest</span>
813
  <span style="background:#1E293B;border-radius:4px;padding:5px 14px;font-size:.76rem;color:#94A3B8;">🎯 ATR TP/SL</span>