Bitmex-API-Update sgcWebSockets

· Funktionen
BitMEX WebSocket- und REST-API-Integration in Delphi

BitMEX ist eine führende Krypto-Derivatebörse, spezialisiert auf Hebel-Trading von Futures und Perpetual-Kontrakten. Die Komponente TsgcWSAPI_Bitmex bietet Delphi-Entwicklern sowohl WebSocket- als auch REST-API-Zugriff und ermöglicht Marktdaten-Streaming in Echtzeit, Orderausführung, Positionsverwaltung und umfassende Kontooperationen aus einer einzigen Komponente.

Inhaltsverzeichnis

Übersicht

Im Gegensatz zu vielen Börsen-Komponenten, die nur WebSocket unterstützen, bietet die Komponente TsgcWSAPI_Bitmex einen Dual-Interface-Ansatz. Die WebSocket-API liefert Echtzeit-Streaming von Trades, Orderbuch-Updates, Quotes und Kontodaten über topic-basierte Subscriptions. Die REST-API (zugänglich über die Property REST_API) bietet synchrone Request-Response-Methoden für Orderplatzierung, Positionsverwaltung und Marktdatenabfragen. Diese Kombination ist ideal für komplette Trading-Anwendungen, die sowohl Live-Datenfeeds als auch präzise Orderausführung benötigen.

Erste Schritte

Erstelle eine TsgcWebSocketClient- und eine TsgcWSAPI_Bitmex-Komponente, verbinde sie und konfiguriere deine Zugangsdaten. Die WebSocket-Verbindung wird über den Client aktiviert, während auf die REST-API über die Property REST_API zugegriffen wird.

oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'dein_api_key';
oBitmex.Bitmex.ApiSecret := 'dein_api_secret';
oClient.Active := True;
Hinweis: Öffentliche WebSocket-Subscriptions und öffentliche REST-Endpoints erfordern keine API-Zugangsdaten. Authentifizierung ist nur für private Topics (execution, margin, order, position) und Trading-/Positions-REST-Methoden nötig.

WebSocket-API

Die BitMEX WebSocket-API nutzt ein topic-basiertes Subscription-Modell. Du abonnierst ein Topic (optional gefiltert nach Instrument) und erhältst einen kontinuierlichen Strom von Updates. Die Komponente bietet drei Kern-WebSocket-Methoden.

Methode Beschreibung
Subscribe Abonniere einen Topic-Stream, optional gefiltert nach Instrument-Symbol.
Unsubscribe Kündige einen zuvor abonnierten Topic-Stream.
Authenticate Authentifiziere die WebSocket-Sitzung für den Zugriff auf private Topics.

Verfügbare Topics

Topics legen den Typ der empfangenen Daten fest. Du kannst mehrere Topics gleichzeitig abonnieren. Das Subscription-Format ist topic:symbol, wobei der Symbolfilter optional ist.

Topic Auth erforderlich Beschreibung
trade Nein Live-Trade-Ausführungen an der Börse.
instrument Nein Instrumentendaten inklusive Funding Rates und Settlement-Informationen.
orderBookL2 Nein Vollständiges Level-2-Orderbuch mit inkrementellen Updates.
quote Nein Beste Bid- und Ask-Quotes am Top of the Book.
execution Ja Die Trade-Ausführungen und Fills deines Kontos.
margin Ja Updates zum Margin-Saldo und verfügbaren Saldo des Kontos.
order Ja Deine offenen Orders und Order-Status-Updates.
position Ja Deine offenen Positionen und unrealisierten P&L-Updates.

Beispiele für WebSocket-Subscriptions

// XBTUSD-Trades abonnieren
oBitmex.Subscribe('trade:XBTUSD');
// Level-2-Orderbuch abonnieren
oBitmex.Subscribe('orderBookL2:XBTUSD');
// Beste Bid-/Ask-Quotes abonnieren
oBitmex.Subscribe('quote:XBTUSD');
// Für private Topics authentifizieren
oBitmex.Authenticate;
// Order-Updates abonnieren (Auth erforderlich)
oBitmex.Subscribe('order');
// Positions-Updates abonnieren (Auth erforderlich)
oBitmex.Subscribe('position');
// Trade-Subscription kündigen
oBitmex.Unsubscribe('trade:XBTUSD');

REST-API: Marktdaten

Auf die REST-API wird über die Property REST_API der Komponente zugegriffen. Marktdaten-Methoden liefern JSON-Strings zurück, die du in deiner Anwendung parsen kannst. Es handelt sich um synchrone Aufrufe, die sofort mit den angeforderten Daten zurückkehren.

Method Description
GetInstruments Liefert die Liste aller an der Börse verfügbaren Instrumente.
GetInstrumentsActive Liefert nur aktiv gehandelte Instrumente.
GetOrderBook Liefert den aktuellen Orderbuch-Snapshot für ein Instrument.
GetQuotes Liefert aktuelle Quote-Daten (Bid/Ask).
GetTrades Liefert aktuelle öffentliche Trade-Daten.
GetExecutions Liefert die Roh-Execution-Daten deines Kontos.
GetExecutionsTradeHistory Liefert die Trade-Ausführungshistorie deines Kontos.
// Orderbuch für XBTUSD abrufen
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// Alle aktiven Instrumente abrufen
ShowMessage(oBitmex.REST_API.GetInstrumentsActive);
// Aktuelle Trades abrufen
ShowMessage(oBitmex.REST_API.GetTrades('XBTUSD'));
// Aktuelle Quotes abrufen
ShowMessage(oBitmex.REST_API.GetQuotes('XBTUSD'));

REST-API: Trading

Trading-Methoden erlauben das Platzieren, Ändern und Stornieren von Orders. Die REST-API unterstützt mehrere Order-Typen einschließlich Market-, Limit-, Stop- und Stop-Limit-Orders. Alle Trading-Methoden erfordern Authentifizierung.

Method Description
PlaceOrder Platziere eine neue Order mit voller Parameterkontrolle.
PlaceMarketOrder Platziere eine Market-Order, die sofort zum besten Preis ausgeführt wird.
PlaceLimitOrder Platziere eine Limit-Order zu einem festgelegten Preis.
PlaceStopOrder Platziere eine Stop-(Market-)Order, die bei einem Stop-Preis ausgelöst wird.
PlaceStopLimitOrder Platziere eine Stop-Limit-Order mit Auslöse- und Limit-Preis.
AmendOrder Ändere Preis, Menge oder andere Parameter einer bestehenden Order.
CancelOrder Storniere eine bestimmte Order anhand ihres Identifiers.
CancelAllOrders Storniere alle offenen Orders auf einmal.
CancelAllOrdersAfter Setze einen Dead-Man's-Switch, der alle Orders nach einem Timeout storniert.
GetOrders Liefert alle Orders, optional nach Status gefiltert.

Beispiele für Orderplatzierung

// Limit-Order platzieren: 100 XBTUSD-Kontrakte zu $30.000 kaufen
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
// Market-Order platzieren: 50 XBTUSD-Kontrakte verkaufen
ShowMessage(oBitmex.REST_API.PlaceMarketOrder(bmsSell, 'XBTUSD', 50));
// Stop-Order platzieren: wird bei $28.000 ausgelöst
ShowMessage(oBitmex.REST_API.PlaceStopOrder(bmsSell, 'XBTUSD', 100, 28000));
// Stop-Limit-Order platzieren: Trigger bei $28.000, Limit-Preis $27.500
ShowMessage(oBitmex.REST_API.PlaceStopLimitOrder(bmsSell, 'XBTUSD', 100, 28000, 27500));
// Bestimmte Order stornieren
ShowMessage(oBitmex.REST_API.CancelOrder('order-id-here'));
// Alle offenen Orders stornieren
ShowMessage(oBitmex.REST_API.CancelAllOrders);
Hinweis: Die Methode CancelAllOrdersAfter wirkt als Dead-Man's-Switch. Sie storniert alle Orders, wenn sie nicht innerhalb des angegebenen Timeouts erneuert wird. Das ist ein nützlicher Sicherheitsmechanismus gegen außer Kontrolle geratene Orders, falls deine Anwendung die Verbindung verliert.

REST-API: Positionen

Methoden zur Positionsverwaltung erlauben das Abfragen, Schließen und Konfigurieren offener Positionen, inklusive Hebel- und Margin-Einstellungen.

Method Description
GetPosition Liefert die aktuelle Position für ein Instrument.
ClosePosition Schließt eine offene Position durch eine schließende Market-Order.
SetPositionIsolate Wechselt zwischen Cross- und Isolated-Margin-Modus für eine Position.
SetPositionLeverage Setzt den Hebelmultiplikator für eine Position.
SetPositionRiskLimit Setzt das Risiko-Limit für eine Position.
SetPositionTransferMargin Übertrage Margin zu oder von einer isolierten Position.

Beispiele zur Positionsverwaltung

// Aktuelle Position für XBTUSD abrufen
ShowMessage(oBitmex.REST_API.GetPosition('XBTUSD'));
// Hebel auf 10x setzen
ShowMessage(oBitmex.REST_API.SetPositionLeverage('XBTUSD', 10));
// In Isolated-Margin-Modus wechseln
ShowMessage(oBitmex.REST_API.SetPositionIsolate('XBTUSD', True));
// Position zum Marktpreis schließen
ShowMessage(oBitmex.REST_API.ClosePosition('XBTUSD'));

Code-Beispiel

Das folgende Beispiel zeigt einen vollständigen Workflow, der WebSocket-Subscriptions und REST-API-Aufrufe kombiniert: Verbinden, Live-Trades abonnieren, Orderbuch abfragen und eine Limit-Order platzieren.

oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'dein_api_key';
oBitmex.Bitmex.ApiSecret := 'dein_api_secret';
oClient.Active := True;
// Trades abonnieren
oBitmex.Subscribe('trade:XBTUSD');
// REST: Orderbuch abrufen
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// REST: Limit-Order platzieren
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));

Konfiguration und Hinweise

API-Zugangsdaten

Generiere deinen API-Key und das Secret in den BitMEX-Kontoeinstellungen. Du kannst Keys mit bestimmten Berechtigungen erstellen (order, withdraw usw.). Erstelle für Trading-Bots einen Key nur mit den nötigen Berechtigungen und aktiviere Withdrawal-Rechte nur, wenn unbedingt erforderlich.

Testnet-Unterstützung

BitMEX stellt unter testnet.bitmex.com eine Testnet-Umgebung für Entwicklung und Tests bereit. Konfiguriere die Komponente, um den Testnet-Endpoint zu verwenden, und teste deine Integration mit simulierten Mitteln, bevor du live gehst. Die Property-Gruppe Bitmex enthält Einstellungen zur Auswahl zwischen Produktions- und Testnet-Umgebungen.

Wichtig: Teste deine Trading-Logik immer im BitMEX-Testnet, bevor du in Produktion deployst. Testnet-API-Keys werden separat über das Testnet-Interface erzeugt und sind nicht mit Produktions-Keys austauschbar.

Order-Side-Enumeration

Trading-Methoden verwenden die Enum-Werte bmsBuy und bmsSell, um die Order-Richtung anzugeben. Diese sind spezifisch für die BitMEX-Komponente.

WebSocket- vs. REST-Nutzung

Nutze WebSocket-Subscriptions für Echtzeit-Datenstreaming, wo niedrige Latenz entscheidend ist (Live-Preisanzeigen, Orderbuch-Visualisierung, Execution-Monitoring). Nutze die REST-API für On-Demand-Operationen wie Orderplatzierung, Positionsabfragen und das Abrufen historischer Daten. Die beiden Interfaces ergänzen sich und können parallel verwendet werden.

Rate Limits

BitMEX erzwingt Rate Limits für REST-API-Aufrufe. Die Limits variieren je Endpoint, liegen aber typischerweise bei 60 Requests pro Minute für die meisten Trading-Endpoints und 30 Requests pro Minute für Order-Änderungen und -Stornierungen. Überwache die Rate-Limit-Header in den Antworten, um nicht vorübergehend gesperrt zu werden. WebSocket-Subscriptions unterliegen nicht den REST-Rate-Limits.

Instrument-Symbole

BitMEX verwendet ein eigenes Format für Instrument-Symbole. Der Perpetual-Bitcoin-Kontrakt heißt XBTUSD, während Futures-Kontrakte ein Verfallsdatum-Suffix enthalten (z. B. XBTM25). Nutze GetInstrumentsActive, um alle aktuell handelbaren Instrumente und ihre Symbole zu ermitteln.

Tipp: Kombiniere die Methode CancelAllOrdersAfter mit einem periodischen Timer in deiner Anwendung als Sicherheitsnetz. Wenn deine Anwendung abstürzt oder die Verbindung verliert, werden alle Orders nach dem angegebenen Timeout automatisch storniert — Schutz vor unerwarteten Marktbewegungen.