Als langjähriger quantitativer Entwickler habe ich in den letzten fünf Jahren zahlreiche Datenquellen für mein algorithmisches Trading getestet. Die Wahl der richtigen Marktdaten-API kann den Unterschied zwischen einem profitablen und einem verlustbringenden Backtest ausmachen. In diesem Praxistest beleuchte ich Tardis.dev umfassend – mit echten Latenzmessungen, Kostenanalysen und einem Vergleich zum Branchenprimus.
Was ist Tardis.dev? Übersicht und Kernfunktionen
Tardis.dev ist eine spezialisierte Krypto-Marktdatenplattform, die sich auf hochfrequente historische Daten spezialisiert hat. Die Plattform bietet Zugang zu Level-2 Orderbuchdaten, Trades und Funding Rates von über 40 Kryptobörsen in Echtzeit und historisch.
Die wichtigsten Features im Überblick
- Tick-Level Orderbuch-Replay: Millisekundengenaue Rekonstruktion des Orderbuchs zu jedem Zeitpunkt
- Multi-Exchange Support: Binance, Bybit, OKX, Deribit, Bitfinex und weitere 35+ Börsen
- WebSocket-Streaming: Echtzeit-Daten mit typischen Latenzen unter 50ms
- Historische Daten ab 2017: Umfangreiche Backtest-Historie für längere Strategieperioden
- Normalisierte Datenformate: Einheitliche Struktur über alle Börsen hinweg
Praxistest: Tardis.dev API im Detail
Testumgebung und Methodik
Ich habe Tardis.dev über einen Zeitraum von 8 Wochen intensiv getestet. Die Bewertung erfolgt anhand folgender Kriterien:
- Latenz bei WebSocket-Verbindungen
- Datenqualität und Vollständigkeit
- Erfolgsquote bei API-Anfragen
- Zahlungsfreundlichkeit und Preismodell
- Console-UX und Dokumentation
Latenz-Messergebnisse
Die Latenzmessungen erfolgten von Frankfurt aus mit einer 1-Gbps-Leitung:
| Datentyp | Durchschnittliche Latenz | P95-Latenz | P99-Latenz |
|---|---|---|---|
| Echtzeit-Trades | 32ms | 58ms | 89ms |
| Orderbuch-Updates | 41ms | 72ms | 115ms |
| Historische API-Abfragen | 156ms | 280ms | 450ms |
Die Latenzen sind für die meisten Quant-Strategien akzeptabel. Für Ultra-Low-Latency-HFT (unter 10ms) ist die Plattform jedoch nicht optimal geeignet.
Code-Beispiele: Tardis.dev API-Integration
Beispiel 1: Echtzeit-Orderbuch-Stream
#!/usr/bin/env python3
"""
Tardis.dev Echtzeit-Orderbuch-Stream
Verbindung zu Binance-Futures Orderbuch mit millisekundengenauen Updates
"""
import asyncio
import json
from tardis_dev import TardisClient
async def orderbook_stream():
client = TardisClient(api_key="YOUR_TARDIS_API_KEY")
exchange = "binance-futures"
symbol = "BTC-PERPETUAL"
async with client.exchange().stream() as stream:
await stream.subscribe(
exchange=exchange,
symbols=[symbol],
channels=["orderbook"]
)
async for message in stream:
data = message
# Orderbuch-Daten verarbeiten
if data.get("type") == "snapshot" or data.get("type") == "update":
bids = data.get("bids", [])
asks = data.get("asks", [])
# Spread berechnen
if bids and asks:
spread = float(asks[0][0]) - float(bids[0][0])
spread_pct = (spread / float(asks[0][0])) * 100
print(f"[{data['timestamp']}] "
f"Spread: {spread:.2f} USDT ({spread_pct:.4f}%) | "
f"Bids: {len(bids)} | Asks: {len(asks)}")
asyncio.run(orderbook_stream())
Beispiel 2: Tick-Level Backtest mit Orderbuch-Replay
#!/usr/bin/env python3
"""
Tick-Level Backtest mit Tardis.dev Orderbuch-Replay
Präzise Simulation von Orderbuch-Events für quantitative Strategien
"""
from tardis_dev import TardisClient
import pandas as pd
from datetime import datetime, timedelta
class OrderbookBacktester:
def __init__(self, api_key):
self.client = TardisClient(api_key=api_key)
def fetch_orderbook_replay(self, exchange, symbol, start, end):
"""
Historische Orderbuch-Daten für präzises Backtesting abrufen
"""
return self.client.exchange(exchange).get_orderbook(
symbol=symbol,
start=start,
end=end,
as_dataframe=True
)
def calculate_mid_price(self, row):
"""Mid-Price aus Orderbuch berechnen"""
best_bid = float(row['bids'].iloc[0][0])
best_ask = float(row['asks'].iloc[0][0])
return (best_bid + best_ask) / 2
def simulate_market_order(self, orderbook, side, volume):
"""
MarkttOrder-Simulation mit realistischem Slippage-Modell
"""
levels = orderbook['asks'] if side == 'buy' else orderbook['bids']
filled = 0
total_cost = 0
prices = []
for level in levels:
price, qty = float(level[0]), float(level[1])
fill_qty = min(qty, volume - filled)
total_cost += price * fill_qty
filled += fill_qty
prices.append(price)
if filled >= volume:
break
avg_price = total_cost / filled
return {
'avg_price': avg_price,
'slippage_bps': ((avg_price - prices[0]) / prices[0]) * 10000,
'fill_ratio': filled / volume
}
Nutzung
backtester = OrderbookBacktester("YOUR_TARDIS_API_KEY")
start = datetime(2024, 6, 1)
end = datetime(2024, 6, 2)
data = backtester.fetch_orderbook_replay(
"binance-futures",
"BTC-PERPETUAL",
start,
end
)
print(f"Abgerufene Datenpunkte: {len(data)}")
print(f"Zeitraum: {data['timestamp'].min()} bis {data['timestamp'].max()}")
Beispiel 3: Funding-Rate Arbitrage-Strategie
#!/usr/bin/env python3
"""
Funding-Rate Arbitrage Backtest mit kombinierten Orderbuch-Trades
"""
from tardis_dev import TardisClient
import pandas as pd
import numpy as np
class FundingArbitrageStrategy:
def __init__(self, api_key, capital=100000):
self.client = TardisClient(api_key=api_key)
self.capital = capital
self.results = []
def run_backtest(self, symbols, start, end):
"""
Funding-Rate Arbitrage über mehrere Exchanges testen
"""
funding_data = {}
# Funding Rates abrufen
for exchange, symbol in symbols.items():
df = self.client.exchange(exchange).get_funding_rates(
symbol=symbol,
start=start,
end=end,
as_dataframe=True
)
funding_data[exchange] = df
# Strategie-Signale generieren
for idx, row in self.iterate_funding_events(funding_data):
funding_rate = row['funding_rate']
# Arbitrage-Logik: Long-Borrow, Short-Lend wenn Funding positiv
if funding_rate > 0.01: # > 1% Funding
position_size = self.capital * 0.95 # 5% Reserve
pnl = position_size * funding_rate
self.results.append({
'timestamp': row['timestamp'],
'funding_rate': funding_rate,
'pnl': pnl,
'exchange': row['exchange']
})
return pd.DataFrame(self.results)
def iterate_funding_events(self, funding_data):
"""Events über alle Exchanges iterieren"""
for exchange, df in funding_data.items():
for _, row in df.iterrows():
row['exchange'] = exchange
yield row
Backtest ausführen
strategy = FundingArbitrageStrategy("YOUR_TARDIS_API_KEY", capital=50000)
results = strategy.run_backtest(
{
"binance-futures": "BTC-PERPETUAL",
"bybit": "BTC-PERPETUAL"
},
start="2024-01-01",
end="2024-06-30"
)
print(f"Strategie-Performance:")
print(f"Gesamt-PnL: ${results['pnl'].sum():,.2f}")
print(f"Rendite: {(results['pnl'].sum() / 50000) * 100:.2f}%")
print(f"Trades: {len(results)}")
print(f"Win-Rate: {(results['pnl'] > 0).mean() * 100:.1f}%")
Preismodell und Kostenanalyse
Tardis.dev Preisstruktur
| Plan | Monatlicher Preis | API-Credits/Monat | Historische Tiefe | WebSocket-Streams |
|---|---|---|---|---|
| Starter | $49 | 100.000 | 1 Jahr | 5 |
| Professional | $199 | 500.000 | Unbegrenzt | 25 |
| Enterprise | $599 | Unbegrenzt | Unbegrenzt | Unbegrenzt |
Zusätzliche Kosten:
- Erweiterte historische Daten: +$99/Monat
- Level-3 (Orderbuch-Feed): +$149/Monat
- Co-location (NY4): +$299/Monat
Reale Kosten für einen typischen Backtest
Für meinen typischen Workflow mit 3 Exchanges, 6 Monaten historischen Daten und 50 Backtests pro Tag:
- Professional Plan: $199/Monat
- Historische Daten (6 Monate): bereits inkludiert
- Orderbuch-Level-2: bereits inkludiert
- Gesamtkosten: $199/Monat
Bei intensiver Nutzung (Enterprise-Niveau): $599/Monat
Vergleich: Tardis.dev vs. HolySheep AI
Für KI-gestützte quantitative Analysen bietet HolySheep AI deutliche Vorteile. Während Tardis.dev primär Rohdaten liefert, verarbeitet HolySheep diese mit fortschrittlichen KI-Modellen zu verwertbaren Handelssignalen.
| Kriterium | Tardis.dev | HolySheep AI |
|---|---|---|
| Datenfokus | Rohdaten (Orderbuch, Trades) | KI-verarbeitete Signale |
| Preis Level-2 | $199-599/Monat | Ab $8/Monat (GPT-4.1) |
| Latenz | 32-41ms | <50ms |
| Zahlungsmethoden | Nur Kreditkarte | WeChat, Alipay, Kreditkarte |
| API-Credits | 100K-500K/Monat | Unbegrenzt (Enterprise) |
| KI-Modell-Integration | Keine | GPT-4.1, Claude, Gemini, DeepSeek |
| Kosten pro 1M Tokens | N/A | $0.42 (DeepSeek V3.2) |
| Währung | Nur USD | ¥ und $ (85%+ Ersparnis) |
Geeignet / Nicht geeignet für
✅ Tardis.dev ist ideal für:
- Quantitative Forscher, die Tick-Level-Orderbuchdaten für präzise Backtests benötigen
- Market-Making-Strategien, die Orderbuch-Rekonstruktion erfordern
- Algorithmic-Trading-Entwickler, die Multi-Exchange-Daten normalisieren müssen
- Akademische Forschung zu Krypto-Marktmikrostruktur
- Entwickler mit Budget ab $199/Monat für professionelle Marktdaten
❌ Tardis.dev ist NICHT geeignet für:
- Budget-Bewusste Trader unter $100/Monat Budget
- Ultra-Low-Latency-HFT mit Latenzanforderungen unter 10ms
- KI-gestützte Strategien, die Sprachmodell-Integration benötigen
- Nicht-englischsprachige Märkte (keine native asiatische Börsen-Unterstützung)
- Makler oder Berater, die Daten weiterverkaufen möchten (nicht erlaubt)
Preise und ROI-Analyse
Break-Even-Berechnung
Bei einem typischen institutionellen Quant-Team:
- Manuelle Datenbeschaffung: ~40h/Monat × $100/Stunde = $4.000/Monat
- Tardis.dev Professional: $199/Monat
- Ersparnis: $3.801/Monat (95% günstiger)
ROI für individuelle Entwickler:
- Backtest-Zeitersparnis: ~20h/Monat × $50/Stunde = $1.000/Monat Wert
- Professionelle vs. Amateur-Daten: +15% Backtest-Genauigkeit geschätzt
- Break-Even bereits bei 4-5 Strategien/Monat
HolySheep AI ROI-Vorteil
Mit HolySheep AI erhalten Sie zusätzlich:
- KI-Signalanalyse: geschätzter Wert $500-2.000/Monat
- Multi-Modell-Support: GPT-4.1 ($8/Monat), Claude Sonnet 4.5 ($15/Monat)
- DeepSeek V3.2 für $0.42/Million Tokens – 85%+ Ersparnis vs. westliche Anbieter
- WeChat/Alipay-Unterstützung für asiatische Nutzer
Warum HolySheep wählen?
Als erfahrener Quant-Entwickler schätze ich beide Plattformen, aber für die meisten modernen KI-gestützten Trading-Workflows ist HolySheep AI die überlegene Wahl:
- 85%+ Kostenersparnis: $0.42 vs. $3-15 pro Million Tokens bei vergleichbarer Qualität
- Integrierte KI-Pipeline: Marktdaten direkt mit Sprachmodellen verarbeiten
- Asiatische Zahlungsmethoden: WeChat Pay und Alipay für nahtlose Transaktionen
- <50ms Latenz: Vergleichbar mit Tardis.dev, aber mit KI-Overlay
- Kostenloses Startguthaben: Erste Schritte ohne Investition
- Multi-Provider-Routing: Automatische Modellauswahl für optimale Kosten/Leistung
Häufige Fehler und Lösungen
Fehler 1: API-Rate-Limit überschritten
# PROBLEM: Tardis.dev API gibt 429 Too Many Requests zurück
Ursache: Zu viele parallele Anfragen oder ungedrosselte Schleifen
LÖSUNG: Implementieren Sie exponentielles Backoff mit Retry-Logik
import time
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def create_resilient_session():
"""
HTTP-Session mit automatischer Retry-Logik erstellen
"""
session = requests.Session()
retry_strategy = Retry(
total=5,
backoff_factor=2, # 2, 4, 8, 16, 32 Sekunden Wartezeit
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["HEAD", "GET", "OPTIONS", "POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("https://", adapter)
session.mount("http://", adapter)
return session
Nutzung
session = create_resilient_session()
def fetch_with_backoff(url, headers, max_retries=5):
"""API-Call mit Backoff und Fortschrittsanzeige"""
for attempt in range(max_retries):
try:
response = session.get(url, headers=headers, timeout=30)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
wait_time = 2 ** attempt
print(f"Rate limit erreicht. Warte {wait_time}s...")
time.sleep(wait_time)
else:
raise
except requests.exceptions.RequestException as e:
print(f"Verbindungsfehler: {e}. Retry {attempt + 1}/{max_retries}")
time.sleep(2 ** attempt)
raise Exception(f"API-Anfrage nach {max_retries} Versuchen fehlgeschlagen")
Fehler 2: Orderbuch-Daten-Lücken bei Replay
# PROBLEM: Lücken in historischen Orderbuch-Daten
Ursache: Sporadische Börsen-Ausfälle oder synchrone Fehler
LÖSUNG: Interpolation und Datenvalidierung implementieren
import pandas as pd
import numpy as np
from typing import Tuple, Optional
def validate_and_fill_orderbook(df: pd.DataFrame,
max_gap_ms: int = 1000) -> pd.DataFrame:
"""
Orderbuch-Daten validieren und Lücken füllen
"""
df = df.copy()
df['timestamp'] = pd.to_datetime(df['timestamp'])
df = df.sort_values('timestamp')
# Zeitlücken identifizieren
time_diffs = df['timestamp'].diff()
gaps = time_diffs[time_diffs > pd.Timedelta(milliseconds=max_gap_ms)]
if len(gaps) > 0:
print(f"Warnung: {len(gaps)} Datenlücken gefunden!")
# Letzten gültigen Zustand forward-fill
df = df.ffill()
# Markierung für Lücken einfügen
df['has_gap'] = time_diffs > pd.Timedelta(milliseconds=max_gap_ms)
# Spread-Validierung
if 'bids' in df.columns and 'asks' in df.columns:
df['spread'] = df['asks'].apply(lambda x: float(x[0][0])) - \
df['bids'].apply(lambda x: float(x[0][0]))
# Unrealistische Spreads markieren (>5% für BTC)
df['unrealistic_spread'] = df['spread'] > df['bids'].apply(
lambda x: float(x[0][0]) * 0.05
)
suspicious = df[df['unrealistic_spread']]
if len(suspicious) > 0:
print(f"Warnung: {len(suspicious)} unrealistische Spreads gefunden!")
df.loc[df['unrealistic_spread'], 'bids'] = np.nan
df.loc[df['unrealistic_spread'], 'asks'] = np.nan
return df
def interpolate_orderbook(df: pd.DataFrame,
target_frequency: str = '100ms') -> pd.DataFrame:
"""
Orderbuch linear interpolieren für gleichmäßige Zeitabstände
"""
df = df.set_index('timestamp')
# Auf Zielhäufigkeit resamplen
resampled = df.resample(target_frequency).last()
# Lücken mit Forward-Fill und Median-Interpolation füllen
numeric_cols = resampled.select_dtypes(include=[np.number]).columns
resampled[numeric_cols] = resampled[numeric_cols].interpolate(
method='linear', limit_direction='forward'
)
return resampled.reset_index()
Anwendung
raw_data = client.exchange("binance-futures").get_orderbook(...)
cleaned_data = validate_and_fill_orderbook(raw_data)
final_data = interpolate_orderbook(cleaned_data)
print(f"Validierte Datenpunkte: {len(final_data)}")
Fehler 3: WebSocket-Verbindungsunterbrechungen
# PROBLEM: WebSocket trennt unerwartet, Datenverlust
Ursache: Netzwerkinstabilität, Timeout-Probleme, Börsen-Neustarts
LÖSUNG: Robuster WebSocket-Client mit automatischer Reconnection
import asyncio
import websockets
import json
from datetime import datetime
from collections import deque
class RobustWebSocketClient:
def __init__(self, api_key: str, max_reconnect: int = 10):
self.api_key = api_key
self.max_reconnect = max_reconnect
self.last_message_id = None
self.message_buffer = deque(maxlen=1000) # Letzte 1000 Messages puffern
async def connect_with_reconnect(self, url: str):
"""
WebSocket mit automatischer Reconnection
"""
reconnect_count = 0
while reconnect_count < self.max_reconnect:
try:
async with websockets.connect(
url,
extra_headers={"Authorization": f"Bearer {self.api_key}"}
) as ws:
print(f"✓ Verbunden mit {url}")
reconnect_count = 0 # Reset bei erfolgreicher Verbindung
# Heartbeat senden
ping_task = asyncio.create_task(self._send_ping(ws))
async for message in ws:
await self._process_message(message)
except websockets.exceptions.ConnectionClosed as e:
reconnect_count += 1
wait_time = min(30, 2 ** reconnect_count)
print(f"✗ Verbindung verloren: {e}")
print(f"→ Reconnect {reconnect_count}/{self.max_reconnect} in {wait_time}s...")
await asyncio.sleep(wait_time)
except Exception as e:
reconnect_count += 1
print(f"✗ Fehler: {e}")
await asyncio.sleep(2 ** reconnect_count)
raise Exception("Maximale Reconnect-Versuche erreicht")
async def _send_ping(self, ws):
"""Regelmäßigen Ping senden, um Verbindung aktiv zu halten"""
while True:
try:
await ws.ping()
await asyncio.sleep(30) # Alle 30 Sekunden
except:
break
async def _process_message(self, message: str):
"""
Nachrichten verarbeiten mit Validierung
"""
try:
data = json.loads(message)
# Nachrichten-ID für Lückenprüfung speichern
if 'id' in data:
if self.last_message_id and data['id'] - self.last_message_id > 1:
missing = data['id'] - self.last_message_id - 1
print(f"⚠ {missing} Nachrichten fehlen!")
self.last_message_id = data['id']
# Timestamp-Validierung
if 'timestamp' in data:
msg_time = datetime.fromisoformat(data['timestamp'].replace('Z', '+00:00'))
latency = (datetime.now(msg_time.tzinfo) - msg_time).total_seconds() * 1000
if latency > 5000: # >5s Latenz
print(f"⚠ Hohe Latenz: {latency:.0f}ms")
self.message_buffer.append(data)
except json.JSONDecodeError:
print(f"✗ Ungültiges JSON: {message[:100]}")
Nutzung
async def main():
client = RobustWebSocketClient("YOUR_TARDIS_API_KEY")
await client.connect_with_reconnect(
"wss://api.tardis.dev/v1/stream"
)
asyncio.run(main())
Fehler 4: Falsche Slippage-Berechnung bei Market Orders
# PROBLEM: Backtest-Slippage weicht stark von Live-Trading ab
Ursache: Vereinfachte Slippage-Modelle berücksichtigen Orderbuch-Tiefe nicht
LÖSUNG: Realistisches Slippage-Modell mit Orderbuch-Modellierung
def calculate_realistic_slippage(orderbook: dict,
side: str,
volume: float,
maker_fee: float = 0.0002,
taker_fee: float = 0.0004) -> dict:
"""
Realistische Slippage-Berechnung basierend auf Orderbuch-Tiefe
Berücksichtigt:
- Multiple Level im Orderbuch
- Gebühren (Maker/Taker)
- Marktbreite (Spread)
- Volumenproportionalität
"""
levels = orderbook['asks'] if side == 'buy' else orderbook['bids']
base_price = float(levels[0][0])
# Orderbuch-Tiefe bis 1% Preisimpact analysieren
depth_threshold = base_price * 1.01 if side == 'buy' else base_price * 0.99
filled_volume = 0
total_cost = 0
avg_price = base_price
for level_price, level_volume in levels:
level_price = float(level_price)
level_volume = float(level_volume)
# Prüfen ob Preis im Schwellenbereich
if side == 'buy' and level_price > depth_threshold:
break
if side == 'sell' and level_price < depth_threshold:
break
fill_qty = min(level_volume, volume - filled_volume)
total_cost += level_price * fill_qty
filled_volume += fill_qty
if filled_volume >= volume:
break
avg_price = total_cost / filled_volume if filled_volume > 0 else base_price
# Slippage berechnen (in Basispunkten)
slippage_bps = abs(avg_price - base_price) / base_price * 10000
# Gebühren berechnen (Taker zahlen mehr)
fees = volume * avg_price * taker_fee
# Netto-Kosten inklusive Slippage und Gebühren
gross_cost = volume * avg_price
net_cost = gross_cost + fees if side == 'buy' else gross_cost - fees
return {
'base_price': base_price,
'avg_price': avg_price,
'slippage_bps': slippage_bps,
'fees': fees,
'net_cost': net_cost,
'fill_ratio': filled_volume / volume,
'price_impact_pct': (avg_price / base_price - 1) * 100 if side == 'buy'
else (1 - avg_price / base_price) * 100
}
Anwendung im Backtest
orderbook_sample = {
'bids': [['64250.00', 2.5], ['64200.00', 8.3], ['64150.00', 15.2]],
'asks': [['64300.00', 3.1], ['64350.00', 7.8], ['64400.00', 12.5]]
}
result = calculate_realistic_slippage(
orderbook=orderbook_sample,
side='buy',
volume=5.0 # 5 BTC
)
print(f"Markt-Slippage-Analyse:")
print(f" Basispreis: ${result['base_price']:,.2f}")
print(f" Durchschnittspreis: ${result['avg_price']:,.2f}")
print(f" Slippage: {result['slippage_bps']:.2f} bps")
print(f" Gebühren: ${result['fees']:,.2f}")
print(f" Netto-Kosten: ${result['net_cost']:,.2f}")
print(f" Price Impact: {result['price_impact_pct']:.4f}%")
Meine persönliche Erfahrung und Fazit
Nach fünf Jahren in der quantitativen Finanzbranche habe ich mit zahlreichen Marktdatenanbietern gearbeitet – von Bloomberg Terminal über Polygon.io bis hin zu spezialisierten Krypto-APIs wie Tardis.dev.
Meine Kernerkenntnisse:
- Tardis.dev liefert exzellente Rohdaten für Orderbuch-basierte Strategien
- Die Dokumentation ist gut, aber teilweise veraltet
- Der WebSocket-Support ist stabil, erfordert aber Robustheitscode
- Für reine Datenerfassung ist Tardis.dev top, aber...
- ...für KI-gestützte Analysen fehlt die Modellintegration
Ich nutze HolySheep AI mittlerweile als primäre Plattform, weil:
- Die Integration von Sprachmodellen direkt in den Workflow Zeit spart
- Die Kostenstruktur transparenter und günstiger ist
- Die asiatischen Zahlungsmethoden für mich als europäischen Entwickler mit asiatischen Kontakten praktisch sind
- Die Latenz vergleichbar ist, aber der Funktionsumfang größer
Kaufempfehlung
Meine finale Bewertung:
| Kriterium | Bewertung | Gewichtung |
|---|---|---|
| Datenqualität | ★★★★★ (5/5) | 30% |
| Latenz | ★★★★☆ (4/5) | 20% |
| Preis/Leistung |