Add new feature to handle user input
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
"""
|
||||
exchange.py — Kraken connector via CCXT
|
||||
Verantwoordelijk voor: marktdata ophalen, OHLCV, ticker info
|
||||
"""
|
||||
import ccxt
|
||||
import os
|
||||
import pandas as pd
|
||||
from typing import Optional
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def get_exchange() -> ccxt.kraken:
|
||||
"""Initialiseer Kraken exchange connectie."""
|
||||
return ccxt.kraken({
|
||||
"apiKey": os.getenv("KRAKEN_API_KEY", ""),
|
||||
"secret": os.getenv("KRAKEN_SECRET", ""),
|
||||
"enableRateLimit": True,
|
||||
"options": {
|
||||
"defaultType": "spot",
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
# Universe van tradeable pairs — uitbreidbaar
|
||||
TRADING_UNIVERSE = [
|
||||
"BTC/EUR", "ETH/EUR", "SOL/EUR", "ADA/EUR",
|
||||
"XRP/EUR", "DOT/EUR", "MATIC/EUR", "LINK/EUR",
|
||||
"AVAX/EUR", "ATOM/EUR", "UNI/EUR", "LTC/EUR",
|
||||
"ALGO/EUR", "NEAR/EUR", "FTM/EUR", "MANA/EUR",
|
||||
"SAND/EUR", "DOGE/EUR", "SHIB/EUR", "OP/EUR",
|
||||
]
|
||||
|
||||
|
||||
def fetch_ohlcv(symbol: str, timeframe: str = "5m", limit: int = 100) -> pd.DataFrame:
|
||||
"""
|
||||
Haal OHLCV candledata op voor een pair.
|
||||
Timeframe: 1m, 5m, 15m, 1h, 4h, 1d
|
||||
"""
|
||||
exchange = get_exchange()
|
||||
try:
|
||||
raw = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=limit)
|
||||
df = pd.DataFrame(raw, columns=["timestamp", "open", "high", "low", "close", "volume"])
|
||||
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms")
|
||||
df.set_index("timestamp", inplace=True)
|
||||
return df
|
||||
except Exception as e:
|
||||
logger.error(f"OHLCV fetch mislukt voor {symbol}: {e}")
|
||||
return pd.DataFrame()
|
||||
|
||||
|
||||
def fetch_tickers(symbols: Optional[list[str]] = None) -> dict:
|
||||
"""
|
||||
Haal huidige ticker data op voor meerdere pairs tegelijk.
|
||||
Geeft dict terug met per symbol: prijs, volume, change%.
|
||||
"""
|
||||
exchange = get_exchange()
|
||||
targets = symbols or TRADING_UNIVERSE
|
||||
result = {}
|
||||
|
||||
try:
|
||||
tickers = exchange.fetch_tickers(targets)
|
||||
for symbol, ticker in tickers.items():
|
||||
result[symbol] = {
|
||||
"symbol": symbol,
|
||||
"price": ticker.get("last") or 0,
|
||||
"volume_24h": ticker.get("quoteVolume") or 0,
|
||||
"change_24h": ticker.get("percentage") or 0,
|
||||
"high_24h": ticker.get("high") or 0,
|
||||
"low_24h": ticker.get("low") or 0,
|
||||
"bid": ticker.get("bid") or 0,
|
||||
"ask": ticker.get("ask") or 0,
|
||||
}
|
||||
except Exception as e:
|
||||
logger.error(f"Ticker fetch mislukt: {e}")
|
||||
|
||||
return result
|
||||
Reference in New Issue
Block a user