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
- Erste Schritte
- WebSocket-API
- REST-API: Marktdaten
- REST-API: Trading
- REST-API: Positionen
- Code-Beispiel
- Konfiguration und Hinweise
Ü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.
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.
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.
