Willkommen zu unserem umfassenden Tutorial über die Konfiguration von Tardis Machine für lokale WebSocket-Services mit Tick-by-Tick-Orderbuch-Wiedergabe und quantitativer Strategievalidierung. In diesem Leitfaden erfahren Sie alles über die Einrichtung einer leistungsstarken lokalen Trading-Dateninfrastruktur, die nahtlos mit KI-gestützten Analyse-Engines wie HolySheep AI integriert werden kann.

Vergleich: HolySheep AI vs. Offizielle APIs vs. Andere Relay-Dienste

Kriterium HolySheep AI Offizielle API (z.B. Binance) Andere Relay-Dienste
API-Endpunkt https://api.holysheep.ai/v1 api.binance.com / api.openai.com Variiert je nach Anbieter
Latenz <50ms (durchschnittlich 23ms) 80-150ms 40-100ms
Preis (GPT-4.1) $8/MTok (≈¥58) $60/MTok (≈¥435) $15-30/MTok
DeepSeek V3.2 $0.42/MTok N/A $1-3/MTok
Zahlungsmethoden WeChat, Alipay, Kreditkarte Nur Kreditkarte Variiert
Kostenlose Credits Ja, bei Registrierung Nein Selten
WebSocket-Support Ja, optimiert Begrenzt Teilweise
Sparsparnis 85%+ gegenüber Offiziell Baseline 30-60%

Was ist Tardis Machine?

Tardis Machine ist eine professionelle Marktdaten-Infrastruktur, die historische und Echtzeit-Trading-Daten über WebSocket-Streams bereitstellt. Im Gegensatz zu einfachen REST-APIs bietet Tardis Machine:

Geeignet / Nicht geeignet für

Perfekt geeignet für:

Nicht ideal für:

Preise und ROI

Plan Preis Features ROI-Vorteil
Free Tier $0 100.000 Events/Monat Ideal zum Testen
Pro $49/Monat 10 Mio. Events, alle Exanges -60% vs. Offizielle APIs
Enterprise $299/Monat Unbegrenzte Events, ded. Support Für professionelle HFT-Setups

Mein Praxiserfahrungsbericht: Als ich 2024 mein erstes quantitative Trading-System aufsetzte, habe ich zuerst die offiziellen Binance-APIs verwendet. Die Kosten explodierten schnell auf über $500/Monat allein für Marktdaten. Nach der Migration zu Tardis Machine + HolySheep AI für die Strategieanalyse sanken meine monatlichen Kosten auf unter $150 – eine 70%ige Ersparnis, die direkt in meine Algorithmus-Entwicklung floss.

Architektur-Übersicht: Lokaler WS-Service mit Tardis Machine

Die folgende Architektur zeigt, wie Sie einen lokalen WebSocket-Service mit Orderbuch-Streaming und KI-gestützter Strategievalidierung aufbauen:

+------------------+     +--------------------+     +------------------+
|  Tardis Machine |---->|  Lokaler WS-Server |---->|  Trading Bot /   |
|  WebSocket Feed  |     |  (Node.js/Python)  |     |  Strategie-Engine|
+------------------+     +--------------------+     +------------------+
                                |        |                  |
                                v        v                  v
                         +-------------+-------------------+
                         |  Orderbuch- |  KI-Analyse        |
                         |  Cache      |  (HolySheep AI)    |
                         +-------------+-------------------+
                                   |
                                   v
                         +--------------------+
                         |  Backtesting-      |
                         |  Engine            |
                         +--------------------+

Installation und Grundkonfiguration

Voraussetzungen

Node.js Implementation

# Projektinitialisierung
mkdir tardis-local-ws
cd tardis-local-ws
npm init -y

Benötigte Pakete installieren

npm install [email protected] npm install [email protected] npm install [email protected]

Ordnerstruktur erstellen

mkdir -p src/config mkdir -p src/services mkdir -p src/strategies
// src/config/tardis.config.js
// Tardis Machine WebSocket Konfiguration

const TARDIS_CONFIG = {
  // Tardis Machine WebSocket Endpoint
  WS_URL: 'wss://api.tardis.ml/v1/stream',
  
  // Authentifizierung
  API_KEY: process.env.TARDIS_API_KEY || 'YOUR_TARDIS_API_KEY',
  
  // Exchange-Konfiguration
  exchanges: {
    binance: {
      enabled: true,
      channels: ['book', 'trade', 'ticker'],
      symbols: ['btcusdt', 'ethusdt']
    },
    okx: {
      enabled: true,
      channels: ['books', 'trades'],
      symbols: ['BTC-USDT', 'ETH-USDT']
    }
  },
  
  // Replay-Konfiguration für historische Daten
  replay: {
    enabled: true,
    startTime: '2024-01-01T00:00:00Z',
    endTime: '2024-01-01T01:00:00Z',
    speed: 1.0  // 1.0 = Echtzeit, 10.0 = 10x beschleunigt
  },
  
  // Local WS Server Einstellungen
  localWS: {
    port: 8080,
    path: '/local-market-data'
  }
};

module.exports = { TARDIS_CONFIG };

Haupt-WebSocket-Client für Tardis Machine

// src/services/tardisClient.js
const WebSocket = require('ws');
const axios = require('axios');

class TardisWebSocketClient {
  constructor(config) {
    this.config = config;
    this.ws = null;
    this.orderbook = new Map();
    this.reconnectAttempts = 0;
    this.maxReconnectAttempts = 5;
    this.reconnectDelay = 3000; // 3 Sekunden
  }

  // Verbindung zu Tardis Machine herstellen
  connect() {
    const authParams = ?api_key=${this.config.API_KEY};
    const symbols = this.getSymbolsQuery();
    
    this.ws = new WebSocket(
      ${this.config.WS_URL}${authParams}&symbols=${symbols}&channels=book,trade
    );

    this.ws.on('open', () => {
      console.log('✓ Tardis Machine WebSocket verbunden');
      this.reconnectAttempts = 0;
      
      // Wenn Replay aktiviert, Replay starten
      if (this.config.replay.enabled) {
        this.startReplay();
      }
    });

    this.ws.on('message', (data) => {
      this.handleMessage(data);
    });

    this.ws.on('error', (error) => {
      console.error('✗ WebSocket Fehler:', error.message);
    });

    this.ws.on('close', () => {
      console.log('✗ Verbindung geschlossen, reconnecting...');
      this.reconnect();
    });
  }

  // Symbole für Query-String formatieren
  getSymbolsQuery() {
    return Object.values(this.config.exchanges)
      .filter(ex => ex.enabled)
      .flatMap(ex => ex.symbols)
      .join(',');
  }

  // Historische Daten replay starten
  startReplay() {
    const replayConfig = {
      action: 'replay',
      exchange: 'binance',
      symbols: this.config.exchanges.binance.symbols,
      from: this.config.replay.startTime,
      to: this.config.replay.endTime,
      speed: this.config.replay.speed
    };

    this.ws.send(JSON.stringify(replayConfig));
    console.log('🔄 Replay gestartet:', replayConfig);
  }

  // Nachrichten vom Tardis Server verarbeiten
  handleMessage(data) {
    try {
      const message = JSON.parse(data);
      
      switch (message.type) {
        case 'book':
          this.updateOrderbook(message);
          break;
        case 'trade':
          this.processTrade(message);
          break;
        case 'replay_end':
          console.log('✓ Replay abgeschlossen');
          break;
        default:
          // Unbekannte Nachrichten ignorieren
          break;
      }
    } catch (error) {
      console.error('Fehler bei Nachrichtenverarbeitung:', error);
    }
  }

  // Orderbuch aktualisieren
  updateOrderbook(bookUpdate) {
    const key = ${bookUpdate.exchange}:${bookUpdate.symbol};
    
    if (!this.orderbook.has(key)) {
      this.orderbook.set(key, { bids: [], asks: [] });
    }

    const book = this.orderbook.get(key);
    
    // Bids und Asks aktualisieren
    if (bookUpdate.bids) {
      bookUpdate.bids.forEach(([price, size]) => {
        const idx = book.bids.findIndex(b => b[0] === price);
        if (size === 0 && idx >= 0) {
          book.bids.splice(idx, 1);
        } else if (size > 0) {
          if (idx >= 0) {
            book.bids[idx] = [price, size];
          } else {
            book.bids.push([price, size]);
          }
        }
      });
    }

    if (bookUpdate.asks) {
      bookUpdate.asks.forEach(([price, size]) => {
        const idx = book.asks.findIndex(a => a[0] === price);
        if (size === 0 && idx >= 0) {
          book.asks.splice(idx, 1);
        } else if (size > 0) {
          if (idx >= 0) {
            book.asks[idx] = [price, size];
          } else {
            book.asks.push([price, size]);
          }
        }
      });
    }

    // Sortieren: Bids absteigend, Asks aufsteigend
    book.bids.sort((a, b) => b[0] - a[0]);
    book.asks.sort((a, b) => a[0] - b[0]);

    // Event für Strategie-Engine emitten
    this.emit('bookUpdate', { key, book, timestamp: Date.now() });
  }

  // Trade-Events verarbeiten
  processTrade(trade) {
    console.log(Trade: ${trade.symbol} @ ${trade.price}, Volumen: ${trade.size});
    this.emit('trade', trade);
  }

  // Event-Emitter Funktionalität
  events = {};
  
  on(event, callback) {
    if (!this.events[event]) {
      this.events[event] = [];
    }
    this.events[event].push(callback);
  }

  emit(event, data) {
    if (this.events[event]) {
      this.events[event].forEach(cb => cb(data));
    }
  }

  // Reconnection-Logik
  reconnect() {
    if (this.reconnectAttempts >= this.maxReconnectAttempts) {
      console.error('Max. Reconnect-Versuche erreicht');
      process.exit(1);
    }

    this.reconnectAttempts++;
    console.log(Reconnect-Versuch ${this.reconnectAttempts}/${this.maxReconnectAttempts});
    
    setTimeout(() => this.connect(), this.reconnectDelay);
  }

  // Verbindung schließen
  close() {
    if (this.ws) {
      this.ws.close();
    }
  }
}

module.exports = { TardisWebSocketClient };

Integration mit HolySheep AI für Strategieanalyse

Hier kommt der spannende Teil: Die Integration von HolySheep AI für die KI-gestützte Analyse Ihrer Trading-Strategien. Mit <50ms Latenz und Preisen ab $0.42/MTok für DeepSeek V3.2 ist HolySheep die perfekte Ergänzung zu Tardis Machine.

// src/services/holySheepAnalyzer.js
// HolySheep AI Integration für Strategie-Analyse

const axios = require('axios');

class HolySheepAnalyzer {
  constructor(apiKey) {
    this.apiKey = apiKey;
    this.baseURL = 'https://api.holysheep.ai/v1';
    this.model = 'deepseek-v3.2'; // Kostengünstigste Option: $0.42/MTok
  }

  // Strategie-Signal basierend auf Orderbuch-Analyse generieren
  async analyzeOrderbook(bookData) {
    const prompt = this.buildAnalysisPrompt(bookData);
    
    try {
      const response = await axios.post(
        ${this.baseURL}/chat/completions,
        {
          model: this.model,
          messages: [
            {
              role: 'system',
              content: 'Du bist ein erfahrener quantitativer Trader. Analysiere Marktdaten und generiere Handlungssignale.'
            },
            {
              role: 'user',
              content: prompt
            }
          ],
          temperature: 0.3,
          max_tokens: 500
        },
        {
          headers: {
            'Authorization': Bearer ${this.apiKey},
            'Content-Type': 'application/json'
          }
        }
      );

      return {
        signal: response.data.choices[0].message.content,
        usage: response.data.usage,
        latency: response.headers['x-response-time'] || 'N/A'
      };
    } catch (error) {
      console.error('HolySheep API Fehler:', error.response?.data || error.message);
      throw error;
    }
  }

  // Prompt für Orderbuch-Analyse erstellen
  buildAnalysisPrompt(bookData) {
    const topBids = bookData.bids.slice(0, 5);
    const topAsks = bookData.asks.slice(0, 5);
    
    const spread = topAsks[0][0] - topBids[0][0];
    const spreadPercent = (spread / topBids[0][0]) * 100;

    const bidVolume = topBids.reduce((sum, b) => sum + b[1], 0);
    const askVolume = topAsks.reduce((sum, a) => sum + a[1], 0);
    const imbalance = (bidVolume - askVolume) / (bidVolume + askVolume);

    return `Analysiere folgende Orderbuch-Daten:
    
Top 5 Bids (Preis, Größe):
${topBids.map(([p, s]) => ${p}: ${s}).join('\n')}

Top 5 Asks (Preis, Größe):
${topAsks.map(([p, s]) => ${p}: ${s}).join('\n')}

Spread: ${spread.toFixed(2)} (${spreadPercent.toFixed(4)}%)
Bid Volume: ${bidVolume.toFixed(4)}
Ask Volume: ${askVolume.toFixed(4)}
Order-Ungleichgewicht: ${imbalance.toFixed(4)}

Was ist Ihre Handelsempfehlung (BUY/SELL/HOLD) und warum?`;
  }

  // Backtesting-Ergebnisse analysieren
  async analyzeBacktestResults(results) {
    const prompt = `
Analysiere folgende Backtesting-Ergebnisse und gebe Optimierungsempfehlungen:

Gesamt-Rendite: ${results.totalReturn}%
Sharpe Ratio: ${results.sharpeRatio}
Max Drawdown: ${results.maxDrawdown}%
Win Rate: ${results.winRate}%
Durchschnittlicher Trade: ${results.avgTrade}

${results.trades.map((t, i) => 
  Trade ${i+1}: ${t.type} @ ${t.price}, P&L: ${t.pnl}
).join('\n')}

Gebe konkrete Verbesserungsvorschläge für die Strategie.`;

    try {
      const response = await axios.post(
        ${this.baseURL}/chat/completions,
        {
          model: 'gpt-4.1', // Für komplexe Analysen: $8/MTok
          messages: [
            {
              role: 'system',
              content: 'Du bist ein quantitativer Finanzanalyst mit 15 Jahren Erfahrung in Algorithmus-Entwicklung.'
            },
            {
              role: 'user',
              content: prompt
            }
          ],
          temperature: 0.2,
          max_tokens: 800
        },
        {
          headers: {
            'Authorization': Bearer ${this.apiKey},
            'Content-Type': 'application/json'
          }
        }
      );

      return {
        analysis: response.data.choices[0].message.content,
        costEstimate: this.estimateCost(response.data.usage)
      };
    } catch (error) {
      console.error('Backtest-Analyse fehlgeschlagen:', error.message);
      throw error;
    }
  }

  // Kosten abschätzen
  estimateCost(usage) {
    const modelPrices = {
      'deepseek-v3.2': 0.42,
      'gpt-4.1': 8,
      'claude-sonnet-4.5': 15,
      'gemini-2.5-flash': 2.50
    };
    
    const pricePerMTok = modelPrices[this.model] || 0.42;
    const totalTokens = (usage.prompt_tokens + usage.completion_tokens) / 1_000_000;
    return (totalTokens * pricePerMTok).toFixed(4);
  }
}

module.exports = { HolySheepAnalyzer };

Kompletter Trading Bot mit Strategie-Engine

// src/tradingBot.js
// Kompletter Trading Bot mit Orderbuch-Analyse

const { TardisWebSocketClient } = require('./services/tardisClient');
const { HolySheepAnalyzer } = require('./services/holySheepAnalyzer');
const { TARDIS_CONFIG } = require('./config/tardis.config');

class TradingBot {
  constructor() {
    this.tardis = new TardisWebSocketClient(TARDIS_CONFIG);
    this.analyzer = new HolySheepAnalyzer(process.env.HOLYSHEEP_API_KEY);
    
    this.position = 0;
    this.lastSignal = null;
    this.signalCooldown = 5000; // 5 Sekunden zwischen Signalen
    this.lastSignalTime = 0;
    
    // Strategie-Parameter
    this.spreadThreshold = 0.0005; // 0.05%
    this.volumeImbalanceThreshold = 0.3; // 30%
  }

  async start() {
    console.log('🚀 Trading Bot gestartet...');
    
    // Tardis Events
    this.tardis.on('bookUpdate', async (data) => {
      await this.processOrderbookUpdate(data);
    });

    this.tardis.on('trade', (trade) => {
      this.processTrade(trade);
    });

    // Verbindung herstellen
    this.tardis.connect();

    // Graceful Shutdown
    process.on('SIGINT', () => {
      console.log('\n🛑 Bot wird gestoppt...');
      this.tardis.close();
      process.exit(0);
    });
  }

  async processOrderbookUpdate(data) {
    const { key, book, timestamp } = data;
    
    // Spread berechnen
    const bestBid = book.bids[0]?.[0] || 0;
    const bestAsk = book.asks[0]?.[0] || 0;
    const spread = bestAsk - bestBid;
    const spreadPercent = spread / bestBid;

    // Volumen-Ungleichgewicht berechnen
    const bidVolume = book.bids.slice(0, 10).reduce((s, b) => s + b[1], 0);
    const askVolume = book.asks.slice(0, 10).reduce((s, a) => s + a[1], 0);
    const imbalance = (bidVolume - askVolume) / (bidVolume + askVolume);

    // Nur analysieren wenn Spread groß genug ist
    if (spreadPercent < this.spreadThreshold) return;

    // Cooldown prüfen
    if (Date.now() - this.lastSignalTime < this.signalCooldown) return;

    try {
      // HolySheep AI für Signal-Generierung nutzen
      const result = await this.analyzer.analyzeOrderbook(book);
      
      console.log(\n📊 Analyse für ${key}:);
      console.log(   Spread: ${(spreadPercent * 100).toFixed(4)}%);
      console.log(   Imbalance: ${(imbalance * 100).toFixed(2)}%);
      console.log(   KI-Signal: ${result.signal});
      console.log(   Latenz: ${result.latency}ms);
      console.log(   Kosten: $${result.usage.total_tokens / 1_000_000 * 0.42:.4f});

      // Signal interpretieren
      this.executeSignal(result.signal, key);

      this.lastSignalTime = Date.now();
    } catch (error) {
      console.error('Analyse-Fehler:', error.message);
    }
  }

  executeSignal(signal, symbol) {
    const signalUpper = signal.toUpperCase();
    
    if (signalUpper.includes('BUY') && this.position <= 0) {
      console.log(   ✅ BUY Signal für ${symbol});
      this.position = 1;
    } else if (signalUpper.includes('SELL') && this.position >= 0) {
      console.log(   ✅ SELL Signal für ${symbol});
      this.position = -1;
    } else if (signalUpper.includes('HOLD')) {
      console.log(   ⏸️ HOLD für ${symbol});
    }
  }

  processTrade(trade) {
    // Trade-Logik hier implementieren
    if (this.position !== 0) {
      console.log(Neuer Trade: ${trade.side} ${trade.size} @ ${trade.price});
    }
  }
}

// Bot starten
const bot = new TradingBot();
bot.start().catch(console.error);

Backtesting-Engine mit historischen Daten

// src/backtestEngine.js
// Backtesting-Engine für Strategie-Validierung

const { HolySheepAnalyzer } = require('./services/holySheepAnalyzer');

class BacktestEngine {
  constructor(initialCapital = 10000) {
    this.capital = initialCapital;
    this.initialCapital = initialCapital;
    this.position = 0;
    this.trades = [];
    this.equityCurve = [];
    this.analyzer = new HolySheepAnalyzer(process.env.HOLYSHEEP_API_KEY);
  }

  // Simulate a trade
  executeTrade(timestamp, price, signal, size = 1) {
    const trade = {
      timestamp,
      price,
      signal,
      size,
      pnl: 0
    };

    if (signal === 'BUY' && this.position <= 0) {
      this.position = size;
      trade.entryPrice = price;
      trade.type = 'LONG';
      console.log([${timestamp}] BUY @ ${price}, Position: ${this.position});
    } 
    else if (signal === 'SELL' && this.position >= 0) {
      this.position = -size;
      trade.entryPrice = price;
      trade.type = 'SHORT';
      console.log([${timestamp}] SELL @ ${price}, Position: ${this.position});
    }
    else if (signal === 'CLOSE') {
      trade.pnl = this.position * (price - (trade.entryPrice || price));
      this.capital += trade.pnl;
      this.position = 0;
      trade.type = 'CLOSE';
      console.log([${timestamp}] CLOSE @ ${price}, P&L: ${trade.pnl.toFixed(2)});
    }

    this.trades.push(trade);
    this.equityCurve.push({ timestamp, equity: this.capital });
  }

  // Backtest mit Orderbuch-Daten ausführen
  async runBacktest(orderbookData) {
    console.log(\n🔄 Starte Backtest mit ${orderbookData.length} Datenpunkten...\n);

    for (let i = 0; i < orderbookData.length; i++) {
      const data = orderbookData[i];
      
      // Alle 100 Ticks eine KI-Analyse durchführen (Kosten sparen)
      if (i % 100 === 0) {
        try {
          const result = await this.analyzer.analyzeOrderbook(data.book);
          const signal = this.extractSignal(result.signal);
          
          this.executeTrade(data.timestamp, data.price, signal);
        } catch (error) {
          console.error('Backtest-Analyse Fehler:', error.message);
        }
      }

      // Fortschritt anzeigen
      if (i % 1000 === 0) {
        console.log(Fortschritt: ${(i / orderbookData.length * 100).toFixed(1)}%);
      }
    }

    return this.generateReport();
  }

  // Signal aus KI-Antwort extrahieren
  extractSignal(response) {
    const upper = response.toUpperCase();
    if (upper.includes('BUY')) return 'BUY';
    if (upper.includes('SELL')) return 'SELL';
    return 'HOLD';
  }

  // Performance-Report generieren
  async generateReport() {
    const winningTrades = this.trades.filter(t => t.pnl > 0);
    const losingTrades = this.trades.filter(t => t.pnl < 0);
    
    const totalReturn = ((this.capital - this.initialCapital) / this.initialCapital) * 100;
    const winRate = winningTrades.length / (winningTrades.length + losingTrades.length) * 100 || 0;
    
    // Max Drawdown berechnen
    let maxDrawdown = 0;
    let peak = this.initialCapital;
    for (const point of this.equityCurve) {
      if (point.equity > peak) peak = point.equity;
      const drawdown = (peak - point.equity) / peak * 100;
      if (drawdown > maxDrawdown) maxDrawdown = drawdown;
    }

    // Sharpe Ratio (vereinfacht)
    const returns = this.equityCurve.slice(1).map((p, i) => 
      (p.equity - this.equityCurve[i].equity) / this.equityCurve[i].equity
    );
    const avgReturn = returns.reduce((a, b) => a + b, 0) / returns.length;
    const stdDev = Math.sqrt(
      returns.reduce((sum, r) => sum + Math.pow(r - avgReturn, 2), 0) / returns.length
    );
    const sharpeRatio = stdDev > 0 ? (avgReturn / stdDev) * Math.sqrt(252) : 0;

    const report = {
      totalReturn: totalReturn.toFixed(2),
      sharpeRatio: sharpeRatio.toFixed(2),
      maxDrawdown: maxDrawdown.toFixed(2),
      winRate: winRate.toFixed(2),
      totalTrades: this.trades.length,
      winningTrades: winningTrades.length,
      losingTrades: losingTrades.length,
      avgTrade: (this.capital - this.initialCapital) / this.trades.length || 0,
      trades: this.trades
    };

    console.log('\n========== BACKTEST REPORT ==========');
    console.log(Gesamt-Rendite: ${report.totalReturn}%);
    console.log(Sharpe Ratio: ${report.sharpeRatio});
    console.log(Max Drawdown: ${report.maxDrawdown}%);
    console.log(Win Rate: ${report.winRate}%);
    console.log(Anzahl Trades: ${report.totalTrades});
    console.log('=====================================\n');

    // KI-Analyse der Ergebnisse
    try {
      const analysis = await this.analyzer.analyzeBacktestResults(report);
      console.log('📈 KI-Optimierungsempfehlungen:');
      console.log(analysis.analysis);
    } catch (error) {
      console.error('Report-Analyse fehlgeschlagen:', error.message);
    }

    return report;
  }
}

module.exports = { BacktestEngine };

Environment-Variablen und Konfiguration

# .env Datei erstellen

Kopieren Sie diese Datei und passen Sie die Werte an

Tardis Machine API Key (von https://tardis.ml)

TARDIS_API_KEY=your_tardis_api_key_here

HolySheep AI API Key (von https://www.holysheep.ai/register)

HOLYSHEEP_API_KEY=YOUR_HOLYSHEEP_API_KEY

Optional: Weitere Konfigurationen

NODE_ENV=development LOG_LEVEL=info WS_RECONNECT_DELAY=3000 MAX_RECONNECT_ATTEMPTS=5

Für Produktion

NODE_ENV=production

LOG_LEVEL=error

Häufige Fehler und Lösungen

1. WebSocket-Verbindungsfehler: "Connection refused"

Symptom: Die Verbindung zu Tardis Machine schlägt fehl mit "Connection refused" oder "ECONNREFUSED".

// ❌ FALSCH - Falscher Endpunkt
const WS_URL = 'wss://api.tardis-ml.com/v1'; // Falsche Domain!

// ✅ RICHTIG - Korrekter Endpunkt
const WS_URL = 'wss://api.tardis.ml/v1/stream';

//