Repository navigation
Expand file tree
/
Copy pathconfig.py
More file actions
120 lines (99 loc) · 4.91 KB
/
Copy pathconfig.py
File metadata and controls
120 lines (99 loc) · 4.91 KB
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
"""Uygulama genelinde kullanılan sabitler ve ortam değişkeni yönetimi."""
from __future__ import annotations
import os
from dataclasses import dataclass
from dotenv import load_dotenv
load_dotenv()
GROQ_API_KEY = os.getenv("GROQ_API_KEY", "").strip()
GROQ_MODEL = os.getenv("GROQ_MODEL", "llama-3.3-70b-versatile").strip()
APP_NAME = "AI Trading Assistant"
ORG_NAME = "AITradingAssistant"
WEB_HOST = os.getenv("WEB_HOST", "127.0.0.1")
WEB_PORT = int(os.getenv("WEB_PORT", "8765"))
# --- Diller -----------------------------------------------------------------
LANGUAGES = ["tr", "en"]
DEFAULT_LANGUAGE = "tr"
CATEGORY_LABELS: dict[str, dict[str, str]] = {
"commodity": {"tr": "Emtia", "en": "Commodities"},
"forex": {"tr": "Forex", "en": "Forex"},
"crypto": {"tr": "Kripto", "en": "Crypto"},
"stock": {"tr": "Hisse Senedi", "en": "Stocks"},
"index": {"tr": "Endeks", "en": "Index"},
}
@dataclass(frozen=True)
class Asset:
symbol: str # yfinance ticker (ör. "GC=F", "EURUSD=X", "BTC-USD")
label_tr: str
label_en: str
category: str # commodity | forex | crypto | stock | index
display_symbol: str # kısa gösterim (ör. "XAU/USD")
def label(self, lang: str) -> str:
return self.label_tr if lang == "tr" else self.label_en
def category_label(self, lang: str) -> str:
return CATEGORY_LABELS.get(self.category, {}).get(lang, self.category)
# Varsayılan izleme listesi - tamamen ücretsiz, API anahtarı gerektirmeyen
# yfinance (Yahoo Finance) sembolleriyle.
WATCHLIST: list[Asset] = [
# Emtia
Asset("GC=F", "Altın", "Gold", "commodity", "XAU/USD"),
Asset("SI=F", "Gümüş", "Silver", "commodity", "XAG/USD"),
Asset("PL=F", "Platin", "Platinum", "commodity", "XPT/USD"),
Asset("CL=F", "Ham Petrol (WTI)", "Crude Oil (WTI)", "commodity", "WTI/USD"),
Asset("BZ=F", "Brent Petrol", "Brent Crude", "commodity", "BRENT/USD"),
Asset("NG=F", "Doğalgaz", "Natural Gas", "commodity", "NATGAS/USD"),
# Forex
Asset("EURUSD=X", "Euro / Dolar", "Euro / US Dollar", "forex", "EUR/USD"),
Asset("GBPUSD=X", "Sterlin / Dolar", "British Pound / US Dollar", "forex", "GBP/USD"),
Asset("USDTRY=X", "Dolar / Türk Lirası", "US Dollar / Turkish Lira", "forex", "USD/TRY"),
Asset("USDJPY=X", "Dolar / Yen", "US Dollar / Japanese Yen", "forex", "USD/JPY"),
Asset("USDCHF=X", "Dolar / İsviçre Frangı", "US Dollar / Swiss Franc", "forex", "USD/CHF"),
Asset("AUDUSD=X", "Avustralya Doları / Dolar", "Australian Dollar / US Dollar", "forex", "AUD/USD"),
Asset("USDCAD=X", "Dolar / Kanada Doları", "US Dollar / Canadian Dollar", "forex", "USD/CAD"),
Asset("EURTRY=X", "Euro / Türk Lirası", "Euro / Turkish Lira", "forex", "EUR/TRY"),
# Kripto
Asset("BTC-USD", "Bitcoin", "Bitcoin", "crypto", "BTC/USD"),
Asset("ETH-USD", "Ethereum", "Ethereum", "crypto", "ETH/USD"),
Asset("SOL-USD", "Solana", "Solana", "crypto", "SOL/USD"),
Asset("XRP-USD", "Ripple", "Ripple", "crypto", "XRP/USD"),
Asset("DOGE-USD", "Dogecoin", "Dogecoin", "crypto", "DOGE/USD"),
Asset("BNB-USD", "Binance Coin", "Binance Coin", "crypto", "BNB/USD"),
Asset("ADA-USD", "Cardano", "Cardano", "crypto", "ADA/USD"),
Asset("AVAX-USD", "Avalanche", "Avalanche", "crypto", "AVAX/USD"),
# Hisse senetleri
Asset("AAPL", "Apple", "Apple", "stock", "AAPL"),
Asset("MSFT", "Microsoft", "Microsoft", "stock", "MSFT"),
Asset("GOOGL", "Alphabet (Google)", "Alphabet (Google)", "stock", "GOOGL"),
Asset("AMZN", "Amazon", "Amazon", "stock", "AMZN"),
Asset("TSLA", "Tesla", "Tesla", "stock", "TSLA"),
Asset("NVDA", "NVIDIA", "NVIDIA", "stock", "NVDA"),
# Endeksler
Asset("^GSPC", "S&P 500 Endeksi", "S&P 500 Index", "index", "SPX"),
Asset("^NDX", "Nasdaq 100 Endeksi", "Nasdaq 100 Index", "index", "NDX"),
Asset("^DJI", "Dow Jones Endeksi", "Dow Jones Index", "index", "DJI"),
]
# Dilden bağımsız zaman aralığı kodu -> (yfinance interval, period)
TIMEFRAMES: dict[str, tuple[str, str]] = {
"M15": ("15m", "5d"),
"H1": ("1h", "1mo"),
"H4": ("1h", "3mo"), # 4 saatlik mumlar 1 saatlikten yeniden örneklenir
"D1": ("1d", "1y"),
"W1": ("1d", "5y"), # haftalık mumlar günlükten yeniden örneklenir
}
# Yeniden örnekleme gereken zaman aralıkları -> pandas resample kuralı
RESAMPLE_RULES: dict[str, str] = {
"H4": "4h",
"W1": "1W",
}
# Zaman aralığı butonlarında gösterilecek kısa etiketler (dile göre)
TIMEFRAME_LABELS: dict[str, dict[str, str]] = {
"M15": {"tr": "15D", "en": "15m"},
"H1": {"tr": "1S", "en": "1H"},
"H4": {"tr": "4S", "en": "4H"},
"D1": {"tr": "1G", "en": "1D"},
"W1": {"tr": "1H", "en": "1W"},
}
DEFAULT_TIMEFRAME = "D1"
# Fiyat başlığının otomatik yenilenme aralığı (ms)
PRICE_REFRESH_INTERVAL_MS = 45_000
CONFIG_DIR = os.path.join(os.path.expanduser("~"), ".ai_trading_assistant")
HISTORY_FILE = os.path.join(CONFIG_DIR, "analysis_history.json")