Willkommen zu einem weiteren Tutorial aus der HolySheep AI Werkstatt! In diesem Beitrag zeige ich Ihnen, wie Sie mit Tardis-Daten mithilfe von Plotly beeindruckende Order-Book-Hitzbilder und成交-Verteilungen erstellen. Das Beste: Wir nutzen dafür die HolySheep API, die mit unter 50ms Latenz und über 85% Kostenersparnis im Vergleich zu großen Anbietern punktet.
Was ist ein Order Book und warum visualisieren?
Ein Order Book ist wie ein digitales Schwarzen Brett für ein Handelspaar. Auf der einen Seite stehen die 买价 (Kaufaufträge), auf der anderen die 卖价 (Verkaufsaufträge). Die Visualisierung hilft Tradern, Marktliquidität und Preisbewegungen sofort zu erfassen.
Voraussetzungen und Setup
Bevor wir starten, benötigen Sie:
- Python 3.8+ mit pip
- Ein HolySheep AI Konto für den API-Zugang
- Die Bibliotheken: plotly, pandas, requests
# Installation der benötigten Pakete
pip install plotly pandas requests kaleido
Für Jupyter Notebook Benutzer:
pip install ipywidgets
Schritt 1: Tardis-Daten über HolySheep API abrufen
Die HolySheep API bietet Zugang zu Tardis-Daten (Exchange History Data). Mit dem Endpunkt /market_data/tardis können Sie Order-Book-Snapshots und Trades für über 30 Kryptobörsen abrufen.
import requests
import pandas as pd
import json
HolySheep API Konfiguration
BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = "YOUR_HOLYSHEEP_API_KEY" # Ersetzen Sie mit Ihrem Key
def get_tardis_orderbook(exchange, symbol, date):
"""
Ruft Order Book Daten von Tardis über HolySheep API ab.
Args:
exchange: Börsenname (z.B. 'binance', 'bybit')
symbol: Handelspaar (z.B. 'BTC-USDT')
date: Datum im Format '2024-01-15'
Returns:
DataFrame mit Order Book Daten
"""
endpoint = f"{BASE_URL}/market_data/tardis/orderbook"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"exchange": exchange,
"symbol": symbol,
"date": date,
"limit": 1000 # Anzahl der Snapshots
}
try:
response = requests.post(endpoint, headers=headers, json=payload, timeout=30)
response.raise_for_status()
data = response.json()
# In DataFrame umwandeln
bids = pd.DataFrame(data['bids'])
asks = pd.DataFrame(data['asks'])
return bids, asks
except requests.exceptions.Timeout:
print("⏰ Timeout: Server antwortet nicht innerhalb 30s")
return None, None
except requests.exceptions.RequestException as e:
print(f"❌ API Fehler: {e}")
return None, None
Beispielaufruf
bids_df, asks_df = get_tardis_orderbook(
exchange="binance",
symbol="BTC-USDT",
date="2024-01-15"
)
Schritt 2: Order Book Heatmap erstellen
Die Heatmap zeigt die Liquiditätsverteilung im Order Book. Dichte Bereiche (viele Aufträge) erscheinen in warmen Farben, dünne Bereiche in kühlen Farben.
import plotly.graph_objects as go
import numpy as np
def create_orderbook_heatmap(bids_df, asks_df, symbol="BTC-USDT"):
"""
Erstellt eine Heatmap-Visualisierung des Order Books.
"""
# Daten aufbereiten
bid_prices = bids_df['price'].astype(float).values
bid_volumes = bids_df['volume'].astype(float).values
ask_prices = asks_df['price'].astype(float).values
ask_volumes = asks_df['volume'].astype(float).values
# Gemeinsame Preisspanne erstellen
min_price = min(bid_prices.min(), ask_prices.min())
max_price = max(bid_prices.max(), ask_prices.max())
# Preisbuckets erstellen (50 Ebenen)
price_bins = np.linspace(min_price, max_price, 51)
# Histogramme für Heatmap
bid_hist, bid_edges = np.histogram(bid_prices, bins=price_bins, weights=bid_volumes)
ask_hist, ask_edges = np.histogram(ask_prices, bins=price_bins, weights=ask_volumes)
# Matrix für Heatmap (Zeit x Preis)
# Simuliere 100 Zeitpunkte für Visualisierung
n_times = 100
bid_matrix = np.tile(bid_hist, (n_times, 1)) + np.random.rand(n_times, len(bid_hist)) * 0.1
ask_matrix = np.tile(ask_hist, (n_times, 1)) + np.random.rand(n_times, len(ask_hist)) * 0.1
# Heatmap erstellen
fig = go.Figure()
# Bid-Heatmap (unten/negativ)
fig.add_trace(go.Heatmap(
z=-bid_matrix, # Negativ für Kaufseite
x=[f"{p:.2f}" for p in bid_edges[:-1]],
y=[f"t{i}" for i in range(n_times)],
colorscale=[
[0, 'rgb(0,100,0)'], # Dunkelgrün (dünn)
[0.5, 'rgb(144,238,144)'], # Hellgrün
[1, 'rgb(0,200,0)'] # Neongrün (dicht)
],
name='Kaufaufträge (Bids)',
showscale=True,
colorbar=dict(title="Volumen (Kauf)")
))
# Ask-Heatmap (oben/positiv)
fig.add_trace(go.Heatmap(
z=ask_matrix,
x=[f"{p:.2f}" for p in ask