WebSocket & REST Tutorial für Anfänger — Schritt-für-Schritt mit copy-paste Code
In diesem Tutorial lernen Sie, wie Sie Echtzeit-Kursdaten von OKX und Bybit direkt in Ihre Programme einbinden. Ich zeige Ihnen beide Methoden: klassische HTTP-Abfragen (REST) für einzelne Datenpunkte und kontinuierliche Live-Streams (WebSocket) für fortlaufende Marktdaten.
Was Sie am Ende können:
- API-Zugang bei OKX und Bybit einrichten
- Kursdaten per HTTP abrufen (z.B. aktueller Bitcoin-Preis)
- Live-Marktdaten per WebSocket empfangen
- Grundlegende Fehler selbst beheben
Was ist eine Börsen-API und warum brauchen Sie Echtzeit-Daten?
Eine API (Schnittstelle) ist wie ein digitaler Übersetzer zwischen Ihnen und der Börse. Stellen Sie sich vor: Sie möchten wissen, wie viel Bitcoin gerade kostet. Statt die Website zu öffnen, fragen Sie Ihr Programm direkt: „Hey, gib mir den aktuellen Preis." Die API antwortet innerhalb von Millisekunden mit den Daten.
Zwei Wege zum Ziel:
- REST-API: Wie eine Telefonverbindung — Sie rufen an, bekommen die Antwort, fertig. Gut für einzelne Abfragen.
- WebSocket: Wie eine Gegensprechanlage — einmal verbunden, bleiben Sie drin und empfangen alles automatisch. Perfekt für Echtzeit-Überwachung.
Vergleich: OKX vs. Bybit API
| Feature | OKX | Bybit |
|---|---|---|
| WebSocket-URL | wss://ws.okx.com:8443 | wss://stream.bybit.com |
| REST-Basis | https://www.okx.com | https://api.bybit.com |
| Kosten | Kostenlos (Rate-Limit beachten) | Kostenlos (Rate-Limit beachten) |
| Dokumentation | Englisch/Chinesisch, gut strukturiert | Englisch, übersichtlich |
| Demokonto | Ja, testnet.okx.com | Ja, testnet.bybit.com |
| Latenz (erfahrungsbasiert) | ~30-80ms | ~25-70ms |
Meine Praxiserfahrung: Beide Börsen liefern stabile Daten. Bybit fühlt sich bei der WebSocket-Verbindung etwas reaktionsschneller an, während OKX mehr Handelspaare anbietet. Für den Anfang empfehle ich Bybit wegen der klareren Dokumentation.
Schritt 1: API-Schlüssel bei OKX erstellen
Benötigte Zeit: ca. 5 Minuten
- Registrieren Sie sich bei OKX (mein Empfehlungslink) und verifizieren Sie Ihr Konto
- Gehen Sie zu Profil → API-Verwaltung
- Klicken Sie auf API-Schlüssel erstellen
- Wählen Sie nur Leserechte (Read-Only) — für Marktdaten brauchen Sie keine Handelsrechte!
- Kopieren Sie API Key und Secret Key sofort — sie werden nur einmal angezeigt
Wichtig: Geben Sie Ihren geheimen Schlüssel NIEMALS an Dritte weiter! Für reine Marktdaten reichen Leserechte völlig aus.
Schritt 2: API-Schlüssel bei Bybit erstellen
Benötigte Zeit: ca. 5 Minuten
- Registrieren Sie sich bei Bybit
- Navigieren Sie zu Account & Security → API Keys
- Klicken Sie auf Create new key
- Wählen Sie Read-Only und aktivieren Sie Market Data
- Speichern Sie API Key und API Secret sicher
Methode A: REST-API — Einzelne Daten abrufen
REST eignet sich, wenn Sie gelegentlich Daten brauchen — zum Beispiel beim Start Ihres Programms oder für Berechnungen alle paar Sekunden.
Python Code: Aktueller Preis von Bitcoin auf OKX
# okx_simple_ticker.py
import requests
import json
def get_btc_price_okx():
"""
Ruft den aktuellen Bitcoin-Preis von OKX ab.
Kein API-Key nötig für öffentliche Marktdaten!
"""
url = "https://www.okx.com/api/v5/market/ticker"
params = {"instId": "BTC-USDT"} # Bitcoin/USDT Paar
try:
response = requests.get(url, params=params, timeout=10)
response.raise_for_status() # Fehler bei HTTP-Problemen
data = response.json()
if data["code"] == "0": # "0" bedeutet Erfolg bei OKX
ticker = data["data"][0]
preis = ticker["last"]
hoch = ticker["high24h"]
tief = ticker["low24h"]
volume = ticker["vol24h"]
print(f"📊 BTC-USDT auf OKX")
print(f"Aktueller Preis: ${preis}")
print(f"24h Hoch: ${hoch} | 24h Tief: ${tief}")
print(f"24h Volumen: {float(volume):,.2f} BTC")
else:
print(f"❌ Fehler: {data['msg']}")
except requests.exceptions.Timeout:
print("⏱️ Zeitüberschreitung - Server antwortet nicht")
except requests.exceptions.RequestException as e:
print(f"🌐 Verbindungsfehler: {e}")
if __name__ == "__main__":
get_btc_price_okx()
Python Code: Aktueller Preis auf Bybit
# bybit_simple_ticker.py
import requests
def get_btc_price_bybit():
"""
Ruft den aktuellen Bitcoin-Preis von Bybit ab.
Für öffentliche Ticker-Daten ist kein API-Key erforderlich.
"""
url = "https://api.bybit.com/v5/market/tickers"
params = {
"category": "spot", # Spot-Markt (nicht Futures)
"symbol": "BTCUSDT" # Großschreibung beachten!
}
headers = {
"Accept": "application/json"
}
try:
response = requests.get(url, params=params, headers=headers, timeout=10)
response.raise_for_status()
data = response.json()
# Bybit-Format prüfen
if data["retCode"] == 0:
ticker = data["result"]["list"][0]
print(f"📊 BTC-USDT auf Bybit")
print(f"Aktueller Preis: ${ticker['lastPrice']}")
print(f"24h Hoch: ${ticker['highPrice24h']}")
print(f"24h Tief: ${ticker['lowPrice24h']}")
print(f"24h Volumen: {float(ticker['volume24h']):,.2f} BTC")
else:
print(f"❌ Bybit-Fehler {data['retCode']}: {data['retMsg']}")
except requests.exceptions.RequestException as e:
print(f"🔌 Netzwerkfehler: {e}")
if __name__ == "__main__":
get_btc_price_bybit()
Ausgabe im Terminal:
📊 BTC-USDT auf OKX
Aktueller Preis: $67432.50
24h Hoch: $68100.00 | 24h Tief: $65890.00
24h Volumen: 28,450.23 BTC
📊 BTC-USDT auf Bybit
Aktueller Preis: $67434.20
24h Hoch: $68105.00
24h Tief: $65895.00
24h Volumen: 28,462.15 BTC
Methode B: WebSocket — Echtzeit-Streaming
WebSocket hält eine dauerhafte Verbindung offen. Neue Kurse werden Ihnen sofort zugeschickt, ohne dass Sie nachfragen müssen. Ideal für Trading-Bots,Dashboards oder Preisalarme.
Python Code: Echtzeit-Kurse via OKX WebSocket
# okx_websocket_live.py
import websocket
import json
import threading
import time
class OKXLiveTicker:
"""Echtzeit-Marktdaten von OKX via WebSocket"""
def __init__(self, pairs=["BTC-USDT", "ETH-USDT"]):
self.pairs = pairs
self.ws = None
self.connected = False
self.data_callback = None
def on_message(self, ws, message):
"""Wird aufgerufen, wenn neue Daten kommen"""
data = json.loads(message)
# Nur Ticker-Updates verarbeiten
if data.get("arg", {}).get("channel") == "tickers":
ticker_data = data["data"][0]
preis = ticker_data["last"]
symbol = ticker_data["instId"]
zeit = ticker_data["ts"]
print(f"🔴 {symbol}: ${preis}")
# Optional: Callback-Funktion aufrufen
if self.data_callback:
self.data_callback(symbol, float(preis))
def on_error(self, ws, error):
print(f"⚠️ WebSocket Fehler: {error}")
def on_close(self, ws, close_status_code, close_msg):
print(f"🔌 Verbindung geschlossen (Code: {close_status_code})")
self.connected = False
def on_open(self, ws):
print("✅ Verbunden mit OKX WebSocket!")
self.connected = True
# Abos für gewünschte Paare senden
for pair in self.pairs:
subscribe_msg = {
"op": "subscribe",
"args": [{
"channel": "tickers",
"instId": pair
}]
}
ws.send(json.dumps(subscribe_msg))
print(f"📡 Abonniert: {pair}")
def start(self):
"""WebSocket-Verbindung starten"""
url = "wss://ws.okx.com:8443/ws/v5/public"
self.ws = websocket.WebSocketApp(
url,
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close,
on_open=self.on_open
)
# In separatem Thread ausführen (nicht-blockierend)
self.thread = threading.Thread(target=self.ws.run_forever)
self.thread.daemon = True
self.thread.start()
return self
def stop(self):
"""Verbindung sauber schließen"""
if self.ws:
self.ws.close()
--- Verwendung ---
if __name__ == "__main__":
def mein_callback(symbol, preis):
"""Diese Funktion wird bei jedem Update aufgerufen"""
# Hier können Sie Alarme, Handel oder Speicherung einbauen
pass
ticker = OKXLiveTicker(["BTC-USDT", "ETH-USDT"])
ticker.data_callback = mein_callback
ticker.start()
print("⏳ Empfange Live-Daten... (Strg+C zum Beenden)")
try:
while ticker.connected:
time.sleep(1)
except KeyboardInterrupt:
print("\n🛑停止中...")
ticker.stop()
Python Code: Echtzeit-Kurse via Bybit WebSocket
# bybit_websocket_live.py
import websocket
import json
import threading
import time
import hmac
import hashlib
class BybitLiveTicker:
"""Echtzeit-Marktdaten von Bybit via WebSocket"""
def __init__(self, symbols=["BTCUSDT", "ETHUSDT"]):
self.symbols = symbols
self.ws = None
self.connected = False
def on_message(self, ws, message):
"""Verarbeitet eingehende Nachrichten"""
data = json.loads(message)
# Topic für öffentliche Ticker-Daten
if "topic" in data and data["topic"].startswith("tickers."):
ticker = data["data"]
symbol = ticker["symbol"]
preis = ticker["lastPrice"]
print(f"🟢 {symbol}: ${preis}")
def on_error(self, ws, error):
print(f"⚠️ Bybit WebSocket Fehler: {error}")
def on_close(self, ws, *args):
print("🔌 Bybit-Verbindung geschlossen")
self.connected = False
def on_open(self, ws):
print("✅ Verbunden mit Bybit WebSocket!")
self.connected = True
# Subscribe-Nachricht senden
for symbol in self.symbols:
subscribe = {
"op": "subscribe",
"args": [f"tickers.{symbol}"]
}
ws.send(json.dumps(subscribe))
print(f"📡 Abonniert: {symbol}")
def start(self):
"""WebSocket-Verbindung starten"""
# Öffentlicher Endpunkt (keine Auth nötig für Marktdaten)
url = "wss://stream.bybit.com/v5/public/spot"
self.ws = websocket.WebSocketApp(
url,
on_message=self.on_message,
on_error=self.on_error,
on_close=self.on_close,
on_open=self.on_open
)
self.thread = threading.Thread(target=self.ws.run_forever)
self.thread.daemon = True
self.thread.start()
return self
def stop(self):
"""Verbindung schließen"""
if self.ws:
self.ws.close()
--- Verwendung ---
if __name__ == "__main__":
ticker = BybitLiveTicker(["BTCUSDT", "ETHUSDT"])
ticker.start()
print("⏳ Live-Daten werden empfangen...")
try:
while ticker.connected:
time.sleep(1)
except KeyboardInterrupt:
print("\n🛑 Beende...")
ticker.stop()
HolySheep AI: Echte Kostenanalyse und Alternative
Was, wenn Sie die Börsen-Daten nicht selbst verarbeiten wollen?
HolySheep AI bietet eine elegante Lösung für Entwickler, die KI-gestützte Marktanalyse benötigen — inklusive Anbindung an die gängigen Börsen-APIs.
Jetzt registrieren und erhalten Sie kostenlose Credits zum Testen.
Python Code: HolySheheep AI Integration
# holysheep_marktanalyse.py
import requests
import json
============================================
HOLYSHEEP AI - Echtzeit-Marktanalyse
============================================
Basis-URL und API-Key Konfiguration
WICHTIG: Ersetzen Sie YOUR_HOLYSHEEP_API_KEY mit Ihrem echten Key
Erhalten Sie Ihren Key hier: https://www.holysheep.ai/register
============================================
BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
def analysiere_markt_mit_ki(bTC_preis, eth_preis, borsen_name):
"""
Sendet Marktdaten an HolySheep AI für fundamentale Analyse.
Vorteile gegenüber manueller Analyse:
- Verarbeitet große Datenmengen in Sekunden
- Erkennt Muster, die Menschen übersehen
- Kostengünstig: $0.42/1M Token (DeepSeek V3.2)
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
prompt = f"""
Analysiere folgende Marktdaten von {borsen_name}:
- Bitcoin (BTC): ${bTC_preis}
- Ethereum (ETH): ${eth_preis}
Berechne:
1. BTC/ETH Ratio
2. Relative Stärke von BTC vs ETH
3. Kurze Einschätzung der Marktlage (2-3 Sätze)
Antworte im JSON-Format mit den Feldern:
- ratio, relative_staerke, markteinschaetzung
"""
payload = {
"model": "deepseek-v3.2", # $0.42/MTok - günstigste Option
"messages": [
{"role": "user", "content": prompt}
],
"temperature": 0.3,
"max_tokens": 500
}
try:
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload,
timeout=30
)
if response.status_code == 200:
result = response.json()
analyse = result["choices"][0]["message"]["content"]
return json.loads(analyse)
else:
return {"fehler": f"HTTP {response.status_code}", "details": response.text}
except requests.exceptions.Timeout:
return {"fehler": "Zeitüberschreitung bei HolySheep AI"}
except Exception as e:
return {"fehler": str(e)}
--- Beispiel-Aufruf ---
if __name__ == "__main__":
# Simulierte Marktdaten
btc = 67432.50
eth = 3421.80
print(f"📊 Analysiere Markt mit HolySheep AI...")
print(f" BTC: ${btc} | ETH: ${eth}")
ergebnis = analysiere_markt_mit_ki(btc, eth, "OKX + Bybit Durchschnitt")
if "fehler" in ergebnis:
print(f"❌ {ergebnis['fehler']}")
else:
print(f"\n📈 KI-Analyse Ergebnis:")
print(f" BTC/ETH Ratio: {ergebnis.get('ratio', 'N/A')}")
print(f" Relative Stärke: {ergebnis.get('relative_staerke', 'N/A')}")
print(f" Markteinschätzung: {ergebnis.get('markteinschaetzung', 'N/A')}")
Geeignet / Nicht geeignet für
| Szenario | REST-API | WebSocket | HolySheep AI |
|---|---|---|---|
| 1x stündlich Preise prüfen | ✅ Perfekt | ❌ Overkill | ✅ Optional |
| Live-Trading-Bot | ❌ Zu langsam | ✅ Erforderlich | ✅ Für Analyse |
| Preisalarm bei Schwelle | ❌ Polling nötig | ✅ Ideal | ❌ Nicht nötig |
| Marktberichte generieren | ✅ Für Datenabruf | ❌ Nicht nötig | ✅ Perfekt |
| Volumen-Analyse | ✅ Geeignet | ✅ Für Live-Volumen | ✅ Für Insights |
| Historische Daten | ✅ REST-Endpunkte | ❌ Nicht für History | ❌ Nicht möglich |
Preise und ROI
Direkte Kosten der Börsen-APIs:
- OKX: Kostenlos für Marktdaten (bis 200 Anfragen/Minute)
- Bybit: Kostenlos für Marktdaten (bis 600 Anfragen/Minute)
- Server-Kosten: Ab €5/Monat für einen VPS
HolySheep AI Kosten (Stand 2026):
| Modell | Preis pro 1M Token | Anwendungsfall | Empfehlung |
|---|---|---|---|
| DeepSeek V3.2 | $0.42 | Standard-Analyse, Bulk-Processing | ⭐ Beste Preis-Leistung |
| Gemini 2.5 Flash | $2.50 | Schnelle Antworten, Prototypen | ⭐ Gut für Entwicklung |
| GPT-4.1 | $8.00 | Höchste Qualität, komplexe Analysen | Für Profis |
| Claude Sonnet 4.5 | $15.00 | Nuancen-Reichtum, kreative Tasks | Spezial-Fälle |
ROI-Beispiel: Wenn Sie 1 Million Token/Monat für Marktberichte nutzen, kostet das mit DeepSeek V3.2 nur $0.42. Manuell würde dieselbe Analyse 2-3 Stunden dauern. Zeitersparnis: ~95%.
Zahlungsmethoden: WeChat Pay, Alipay, Kreditkarte, Krypto — Jetzt starten mit kostenlosen Credits.
Häufige Fehler und Lösungen
Fehler 1: "Connection timeout" oder "SSL Handshake failed"
Symptom: Python gibt einen Timeout-Fehler aus, obwohl die URL korrekt aussieht.
Lösung:
# FALSCH - Kein Timeout gesetzt:
response = requests.get(url)
RICHTIG - Timeout hinzufügen UND Retry-Logik:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def robust_get(url, params=None, max_retries=3):
"""
Führt HTTP-GET mit automatischen Wiederholungen durch.
Behandelt Timeouts, SSL-Probleme und temporäre Ausfälle.
"""
session = requests.Session()
# Retry-Strategie: 3 Versuche bei Verbindungsfehlern
retry_strategy = Retry(
total=max_retries,
backoff_factor=1, # 1s, 2s, 4s Wartezeit zwischen Versuchen
status_forcelist=[429, 500, 502, 503, 504],
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
try:
response = session.get(url, params=params, timeout=15)
response.raise_for_status()
return response.json()
except requests.exceptions.Timeout:
print("⏱️ Server antwortet nicht — Timeout nach 15s")
print(" Lösung: Prüfen Sie Ihre Internetverbindung oder Server-Status")
return None
except requests.exceptions.SSLError as e:
print(f"🔒 SSL-Fehler: {e}")
print(" Lösung: Zertifikats-Updates für Ihren Server prüfen")
return None
Verwendung:
data = robust_get("https://www.okx.com/api/v5/market/ticker", {"instId": "BTC-USDT"})
Fehler 2: WebSocket trennt nach 30 Sekunden automatisch
Symptom: Nach einer Weile empfangen Sie keine Daten mehr — die Verbindung wurde geschlossen.
Lösung:
# Implementierung eines automatischen Heartbeat/Ping-Systems:
import websocket
import threading
import time
import json
class AutoReconnectingWebSocket:
"""WebSocket mit automatischer Wiederherstellung nach Verbindungsverlust"""
PING_INTERVAL = 20 # Sekunden zwischen Heartbeat-Pings
def __init__(self, url, subscribe_message):
self.url = url
self.subscribe_msg = subscribe_message
self.ws = None
self.should_run = True
def _heartbeat_loop(self):
"""Sendet regelmäßige Pings, um Verbindung alive zu halten"""
while self.should_run:
time.sleep(self.PING_INTERVAL)
if self.ws and self.ws.sock and self.ws.sock.connected:
try:
# Ping an OKX/bybit senden
ping_frame = json.dumps({"op": "ping"})
self.ws.send(ping_frame)
print("💓 Heartbeat gesendet")
except Exception as e:
print(f"⚠️ Heartbeat fehlgeschlagen: {e}")
def _reconnect_loop(self):
"""Prüft Verbindung und stellt automatisch wieder her"""
while self.should_run:
time.sleep(5) # Alle 5 Sekunden prüfen
if self.ws is None or not self.ws.sock or not self.ws.sock.connected:
print("🔄 Verbindung verloren — versuche wiederherzustellen...")
self._connect()
def _connect(self):
"""Stellt die WebSocket-Verbindung her"""
try:
self.ws = websocket.WebSocketApp(
self.url,
on_message=self._on_message,
on_error=self._on_error,
on_close=self._on_close,
on_open=self._on_open
)
thread = threading.Thread(target=self.ws.run_forever)
thread.daemon = True
thread.start()
except Exception as e:
print(f"❌ Verbindung fehlgeschlagen: {e}")
def start(self):
"""Startet alle Hintergrund-Threads"""
self.should_run = True
self._connect()
# Heartbeat-Thread starten
heartbeat_thread = threading.Thread(target=self._heartbeat_loop)
heartbeat_thread.daemon = True
heartbeat_thread.start()
# Reconnect-Prüf-Thread starten
reconnect_thread = threading.Thread(target=self._reconnect_loop)
reconnect_thread.daemon = True
reconnect_thread.start()
def stop(self):
"""Stoppt alle Verbindungen sauber"""
self.should_run = False
if self.ws:
self.ws.close()
def _on_message(self, ws, message):
data = json.loads(message)
if "data" in data:
print(f"📩 Daten empfangen: {data}")
def _on_error(self, ws, error):
print(f"⚠️ Fehler: {error}")
def _on_close(self, ws, *args):
print("🔌 Verbindung geschlossen")
def _on_open(self, ws):
print("✅ Verbunden!")
ws.send(json.dumps(self.subscribe_msg))
Fehler 3: "Invalid signatur" oder 401 Unauthorized
Symptom: Bei Bybit oder OKX mit API-Key erhalten Sie einen Authentifizierungsfehler.
Lösung:
# Für Marktdaten: KEIN API-Key nötig!
Verwenden Sie die öffentlichen Endpunkte:
OKX - Öffentlich (kein Key):
url = "https://www.okx.com/api/v5/market/ticker?instId=BTC-USDT"
Bybit - Öffentlich (kein Key):
url = "https://api.bybit.com/v5/market/tickers?category=spot&symbol=BTCUSDT"
Falls Sie trotzdem API-Keys nutzen müssen (z.B. für Konto-Daten):
import hmac
import hashlib
import time
def create_okx_signature(secret, timestamp, method, request_path, body=""):
"""
Erstellt die HMAC-SHA256 Signatur für OKX API.
NUR für authentifizierte Endpunkte (Kontostand, Handel).
"""
message = timestamp + method + request_path + body
mac = hmac.new(
bytes(secret, encoding="utf8"),
bytes(message, encoding="utf8"),
digestmod=hashlib.sha256
)
return mac.hexdigest().upper()
Beispiel für authentifizierte Anfrage:
timestamp = str(int(time.time() * 1000))
method = "GET"
path = "/api/v5/account/balance"
secret = "YOUR_SECRET_KEY"
signature = create_okx_signature(secret, timestamp, method, path)
headers = {
"OK-ACCESS-KEY": "YOUR_API_KEY",
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": "YOUR_PASSPHRASE", # Falls gesetzt
"Content-Type": "application/json"
}
Tipp: Für reine Marktdaten — verwenden Sie immer die öffentlichen URLs
und sparen Sie sich die komplette Signatur-Geschichte!
Warum HolySheep wählen?
1. Kostenloser Einstieg: Registrieren Sie sich und erhalten Sie sofort kostenlose Credits zum Testen. Keine Kreditkarte erforderlich.
2. <50ms Latenz: Die Infrastruktur von HolySheep AI garantiert Antwortzeiten unter 50 Millisekunden — schneller als die meisten Konkurrenten.
3. 85%+ Ersparnis bei Wechselkurs: Mit dem Kurs ¥1 = $1 sparen Sie enorm bei internationalen Zahlungen. Unterstützt WeChat Pay und Alipay.
4. Flexibles KI-Modell: Wählen Sie zwischen GPT-4.1, Claude Sonnet 4.5, Gemini 2.5 Flash oder DeepSeek V3.2 je nach Budget und Anforderung.
5. All-in-One Lösung: Neben Марктdaten