BitMEX is een toonaangevende cryptocurrency-derivatenbeurs gespecialiseerd in leveraged trading van futures en perpetual contracts. De component TsgcWSAPI_Bitmex biedt Delphi-ontwikkelaars zowel WebSocket- als REST-API-toegang, voor realtime market data-streaming, order-uitvoering, positiebeheer en uitgebreide accountbewerkingen vanuit één component.
Inhoudsopgave
- Overzicht
- Aan de slag
- WebSocket-API
- REST-API: market data
- REST-API: trading
- REST-API: posities
- Codevoorbeeld
- Configuratie en opmerkingen
Overzicht
In tegenstelling tot veel exchange-componenten die alleen WebSocket ondersteunen, biedt de TsgcWSAPI_Bitmex-component een dubbele interface. De WebSocket-API levert realtime streaming van trades, order book-updates, quotes en accountdata via topic-gebaseerde subscriptions. De REST-API (toegankelijk via de REST_API-eigenschap) biedt synchrone request-response-methoden voor het plaatsen van orders, het beheren van posities en het opvragen van market data. Deze combinatie is ideaal voor het bouwen van complete trading-toepassingen die zowel live datafeeds als nauwkeurige order-uitvoering nodig hebben.
Aan de slag
Maak een TsgcWebSocketClient- en een TsgcWSAPI_Bitmex-component aan, koppel ze, en configureer je credentials. De WebSocket-verbinding wordt geactiveerd via de client, terwijl de REST-API wordt benaderd via de eigenschap REST_API.
oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
Opmerking: publieke WebSocket-subscriptions en publieke REST-endpoints vereisen geen API-credentials. Authenticatie is alleen nodig voor privé-topics (execution, margin, order, position) en trading-/position-REST-methoden.
WebSocket-API
De BitMEX WebSocket-API gebruikt een topic-gebaseerd subscription-model. Je abonneert je op een topic (optioneel gefilterd op instrument) en ontvangt een doorlopende stroom updates. De component biedt drie kernmethoden voor WebSocket.
| Methode | Beschrijving |
|---|---|
Subscribe |
Abonneer je op een topic-stream, optioneel gefilterd op instrument-symbool. |
Unsubscribe |
Schrijf je uit van een eerder geabonneerde topic-stream. |
Authenticate |
Authenticeer de WebSocket-sessie voor toegang tot privé-topics. |
Beschikbare topics
Topics bepalen het type data dat je ontvangt. Je kunt je gelijktijdig op meerdere topics abonneren. Het subscription-formaat is topic:symbol waarbij het symbool-filter optioneel is.
| Topic | Auth vereist | Beschrijving |
|---|---|---|
trade |
Nee | Live trade-uitvoeringen op de beurs. |
instrument |
Nee | Instrumentdata inclusief funding rates en settlement-info. |
orderBookL2 |
Nee | Volledig Level 2-orderbook met incrementele updates. |
quote |
Nee | Top-of-book beste bid- en ask-quotes. |
execution |
Ja | De trade-uitvoeringen en fills van je account. |
margin |
Ja | Margin-saldo en beschikbaar saldo-updates van je account. |
order |
Ja | Je openstaande orders en order-statusupdates. |
position |
Ja | Je openstaande posities en ongerealiseerde P&L-updates. |
WebSocket-subscription-voorbeelden
// Subscribe to XBTUSD trades
oBitmex.Subscribe('trade:XBTUSD');
// Subscribe to the Level 2 order book
oBitmex.Subscribe('orderBookL2:XBTUSD');
// Subscribe to best bid/ask quotes
oBitmex.Subscribe('quote:XBTUSD');
// Authenticate for private topics
oBitmex.Authenticate;
// Subscribe to your order updates (requires auth)
oBitmex.Subscribe('order');
// Subscribe to your position updates (requires auth)
oBitmex.Subscribe('position');
// Unsubscribe from trades
oBitmex.Unsubscribe('trade:XBTUSD');
REST-API: market data
De REST-API wordt benaderd via de REST_API-eigenschap van de component. Market-datamethoden geven JSON-strings terug die je in je toepassing kunt parsen. Dit zijn synchrone aanroepen die direct met de opgevraagde data terugkeren.
| Methode | Beschrijving |
|---|---|
GetInstruments |
Haal een lijst op van alle instrumenten die op de beurs beschikbaar zijn. |
GetInstrumentsActive |
Haal alleen actief verhandelde instrumenten op. |
GetOrderBook |
Haal de huidige order book-snapshot voor een instrument op. |
GetQuotes |
Haal recente quote (bid/ask)-data op. |
GetTrades |
Haal recente publieke trade-data op. |
GetExecutions |
Haal de ruwe execution-data van je account op. |
GetExecutionsTradeHistory |
Haal de trade execution-historie van je account op. |
// Get the order book for XBTUSD
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// Get all active instruments
ShowMessage(oBitmex.REST_API.GetInstrumentsActive);
// Get recent trades
ShowMessage(oBitmex.REST_API.GetTrades('XBTUSD'));
// Get recent quotes
ShowMessage(oBitmex.REST_API.GetQuotes('XBTUSD'));
REST-API: trading
Met trading-methoden kun je orders plaatsen, aanpassen en annuleren. De REST-API ondersteunt meerdere ordertypen waaronder market-, limit-, stop- en stop-limit-orders. Alle trading-methoden vereisen authenticatie.
| Methode | Beschrijving |
|---|---|
PlaceOrder |
Plaats een nieuwe order met volledige parametercontrole. |
PlaceMarketOrder |
Plaats een market-order die direct wordt uitgevoerd tegen de beste prijs. |
PlaceLimitOrder |
Plaats een limit-order op een opgegeven prijs. |
PlaceStopOrder |
Plaats een stop (market)-order die wordt geactiveerd bij een stopprijs. |
PlaceStopLimitOrder |
Plaats een stop-limit-order met zowel trigger- als limietprijs. |
AmendOrder |
Wijzig de prijs, hoeveelheid of andere parameters van een bestaande order. |
CancelOrder |
Annuleer een specifieke order via de identifier. |
CancelAllOrders |
Annuleer alle openstaande orders in één keer. |
CancelAllOrdersAfter |
Stel een dead man's switch in die alle orders annuleert na een timeout. |
GetOrders |
Haal alle orders op, optioneel gefilterd op status. |
Voorbeelden van order-plaatsing
// Place a limit order: Buy 100 contracts of XBTUSD at $30,000
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
// Place a market order: Sell 50 contracts of XBTUSD
ShowMessage(oBitmex.REST_API.PlaceMarketOrder(bmsSell, 'XBTUSD', 50));
// Place a stop order: triggers when price reaches $28,000
ShowMessage(oBitmex.REST_API.PlaceStopOrder(bmsSell, 'XBTUSD', 100, 28000));
// Place a stop-limit order: triggers at $28,000, limit price $27,500
ShowMessage(oBitmex.REST_API.PlaceStopLimitOrder(bmsSell, 'XBTUSD', 100, 28000, 27500));
// Cancel a specific order
ShowMessage(oBitmex.REST_API.CancelOrder('order-id-here'));
// Cancel all open orders
ShowMessage(oBitmex.REST_API.CancelAllOrders);
Opmerking: de methode CancelAllOrdersAfter fungeert als een dead man's switch. Het annuleert alle orders als het niet binnen de opgegeven timeout wordt vernieuwd. Dit is een nuttig veiligheidsmechanisme om weggelopen orders te voorkomen als je toepassing de verbinding verliest.
REST-API: posities
Met positiebeheer-methoden kun je je open posities opvragen, sluiten en configureren, inclusief leverage- en margin-instellingen.
| Methode | Beschrijving |
|---|---|
GetPosition |
Haal de huidige positie voor een instrument op. |
ClosePosition |
Sluit een open positie door een sluitende market-order te plaatsen. |
SetPositionIsolate |
Schakel tussen cross- en isolated margin-modus voor een positie. |
SetPositionLeverage |
Stel de leverage-multiplier in voor een positie. |
SetPositionRiskLimit |
Stel de risk limit in voor een positie. |
SetPositionTransferMargin |
Verplaats margin naar of vanaf een isolated positie. |
Voorbeelden van positiebeheer
// Get current position for XBTUSD
ShowMessage(oBitmex.REST_API.GetPosition('XBTUSD'));
// Set leverage to 10x
ShowMessage(oBitmex.REST_API.SetPositionLeverage('XBTUSD', 10));
// Switch to isolated margin mode
ShowMessage(oBitmex.REST_API.SetPositionIsolate('XBTUSD', True));
// Close the position at market price
ShowMessage(oBitmex.REST_API.ClosePosition('XBTUSD'));
Codevoorbeeld
Het volgende voorbeeld laat een complete workflow zien waarin zowel WebSocket-subscriptions als REST-API-aanroepen worden gecombineerd: verbinden, abonneren op live trades, het order book opvragen en een limit-order plaatsen.
oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
// Subscribe to trades
oBitmex.Subscribe('trade:XBTUSD');
// REST: Get order book
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// REST: Place a limit order
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
Configuratie en opmerkingen
API-credentials
Genereer je API-sleutel en -secret via de BitMEX-accountinstellingen. Je kunt sleutels aanmaken met specifieke rechten (order, withdraw, enz.). Maak voor trading-bots een sleutel aan met alleen de rechten die je nodig hebt en schakel withdrawal-rechten niet in tenzij absoluut noodzakelijk.
Testnet-ondersteuning
BitMEX biedt een testnet-omgeving op testnet.bitmex.com voor ontwikkeling en testen. Configureer de component om het testnet-endpoint te gebruiken om je integratie met gesimuleerde fondsen te testen voordat je live gaat. De Bitmex-eigenschapgroep bevat instellingen om tussen productie- en testnet-omgevingen te kiezen.
Order Side-enumeratie
Trading-methoden gebruiken de enumeratiewaarden bmsBuy en bmsSell om de order-richting te specificeren. Deze zijn specifiek voor de BitMEX-component.
WebSocket vs REST-gebruik
Gebruik WebSocket-subscriptions voor realtime data-streaming waar lage latentie kritisch is (live prijsweergave, order book-visualisatie, execution-monitoring). Gebruik de REST-API voor on-demand bewerkingen zoals het plaatsen van orders, het opvragen van posities en het ophalen van historische data. De twee interfaces vullen elkaar aan en kunnen gelijktijdig worden gebruikt.
Rate limits
BitMEX hanteert rate limits op REST-API-aanroepen. De limieten variëren per endpoint, maar zijn meestal 60 requests per minuut voor de meeste trading-endpoints en 30 requests per minuut voor order-aanpassing en -annulering. Houd de rate limit-headers in antwoorden in de gaten om niet tijdelijk geblokkeerd te worden. WebSocket-subscriptions vallen niet onder REST-rate limits.
Instrumentsymbolen
BitMEX gebruikt zijn eigen formaat voor instrumentsymbolen. Het perpetual Bitcoin-contract is XBTUSD, terwijl futures-contracten een vervaldatum-suffix bevatten (bijv. XBTM25). Gebruik GetInstrumentsActive om alle momenteel verhandelbare instrumenten en hun symbolen te ontdekken.
CancelAllOrdersAfter met een periodieke timer in je toepassing als vangnet. Als je toepassing crasht of verbinding verliest, worden alle orders automatisch geannuleerd na de opgegeven timeout, wat je beschermt tegen onverwachte marktbewegingen.
