BitMEX to wiodąca giełda instrumentów pochodnych kryptowalut specjalizująca się w lewarowanym handlu kontraktami futures i wieczysto-wieczystymi. Komponent TsgcWSAPI_Bitmex zapewnia programistom Delphi dostęp zarówno do WebSocket, jak i REST API, umożliwiając strumieniowanie danych rynkowych w czasie rzeczywistym, realizację zleceń, zarządzanie pozycjami i kompleksowe operacje na koncie w ramach jednego komponentu.
Spis treści
- Przegląd
- Pierwsze kroki
- WebSocket API
- REST API: dane rynkowe
- REST API: trading
- REST API: pozycje
- Przykład kodu
- Konfiguracja i uwagi
Przegląd
W przeciwieństwie do wielu komponentów giełdowych obsługujących tylko WebSocket, komponent TsgcWSAPI_Bitmex oferuje podejście z podwójnym interfejsem. WebSocket API zapewnia strumieniowanie w czasie rzeczywistym transakcji, aktualizacji arkusza zleceń, kwotowań i danych konta przez subskrypcje tematyczne. REST API (dostępne przez właściwość REST_API) zapewnia synchroniczne metody żądanie-odpowiedź do składania zleceń, zarządzania pozycjami i pobierania danych rynkowych. Ta kombinacja jest idealna do budowania kompletnych aplikacji tradingowych wymagających zarówno kanałów danych na żywo, jak i precyzyjnej realizacji zleceń.
Pierwsze kroki
Utwórz komponenty TsgcWebSocketClient i TsgcWSAPI_Bitmex, połącz je i skonfiguruj dane uwierzytelniające. Połączenie WebSocket jest aktywowane przez klienta, a REST API jest dostępne przez właściwość 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;
Uwaga: Publiczne subskrypcje WebSocket i publiczne punkty końcowe REST nie wymagają danych uwierzytelniających API. Uwierzytelnianie jest potrzebne tylko dla prywatnych tematów (execution, margin, order, position) i metod REST tradingu/pozycji.
WebSocket API
BitMEX WebSocket API używa modelu subskrypcji tematycznych. Subskrybujesz temat (opcjonalnie filtrowany według instrumentu) i otrzymujesz ciągły strumień aktualizacji. Komponent udostępnia trzy podstawowe metody WebSocket.
| Metoda | Opis |
|---|---|
Subscribe |
Subskrybuje strumień tematu, opcjonalnie filtrowany według symbolu instrumentu. |
Unsubscribe |
Odsubskrybowuje wcześniej subskrybowany strumień tematu. |
Authenticate |
Uwierzytelnia sesję WebSocket w celu dostępu do prywatnych tematów. |
Dostępne tematy
Tematy definiują typ odbieranych danych. Możesz subskrybować wiele tematów jednocześnie. Format subskrypcji to topic:symbol, gdzie filtr symbolu jest opcjonalny.
| Temat | Wymagane uwierzytelnianie | Opis |
|---|---|---|
trade |
No | Realizacje transakcji na giełdzie w czasie rzeczywistym. |
instrument |
No | Dane instrumentów, w tym stopy finansowania i informacje rozliczeniowe. |
orderBookL2 |
No | Pełny arkusz zleceń poziomu 2 z aktualizacjami przyrostowymi. |
quote |
No | Najlepsze oferty kupna i sprzedaży na szczycie arkusza. |
execution |
Yes | Realizacje transakcji i wypełnienia twojego konta. |
margin |
Yes | Aktualizacje salda marginu konta i dostępnego salda. |
order |
Yes | Twoje otwarte zlecenia i aktualizacje statusu zleceń. |
position |
Yes | Twoje otwarte pozycje i aktualizacje niezrealizowanego P&L. |
Przykłady subskrypcji WebSocket
// 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: dane rynkowe
REST API jest dostępne przez właściwość REST_API komponentu. Metody danych rynkowych zwracają ciągi JSON, które możesz parsować w swojej aplikacji. Są to synchroniczne wywołania zwracające natychmiast żądane dane.
| Metoda | Opis |
|---|---|
GetInstruments |
Pobiera listę wszystkich instrumentów dostępnych na giełdzie. |
GetInstrumentsActive |
Pobiera tylko aktywnie handlowane instrumenty. |
GetOrderBook |
Pobiera aktualną migawkę arkusza zleceń dla instrumentu. |
GetQuotes |
Pobiera ostatnie dane kwotowań (bid/ask). |
GetTrades |
Pobiera ostatnie publiczne dane transakcji. |
GetExecutions |
Pobiera surowe dane realizacji twojego konta. |
GetExecutionsTradeHistory |
Pobiera historię realizacji transakcji twojego konta. |
// 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
Metody tradingu umożliwiają składanie, modyfikowanie i anulowanie zleceń. REST API obsługuje wiele typów zleceń, w tym rynkowe, limitowane, stop i stop-limit. Wszystkie metody tradingu wymagają uwierzytelniania.
| Metoda | Opis |
|---|---|
PlaceOrder |
Składa nowe zlecenie z pełną kontrolą parametrów. |
PlaceMarketOrder |
Składa zlecenie rynkowe realizowane natychmiast po najlepszej cenie. |
PlaceLimitOrder |
Składa zlecenie limitowane po określonej cenie. |
PlaceStopOrder |
Składa zlecenie stop (rynkowe) wyzwalane po osiągnięciu ceny stop. |
PlaceStopLimitOrder |
Składa zlecenie stop-limit z ceną wyzwalania i ceną limitu. |
AmendOrder |
Modyfikuje cenę, ilość lub inne parametry istniejącego zlecenia. |
CancelOrder |
Anuluje konkretne zlecenie według identyfikatora. |
CancelAllOrders |
Anuluje wszystkie otwarte zlecenia naraz. |
CancelAllOrdersAfter |
Ustawia mechanizm bezpieczeństwa anulujący wszystkie zlecenia po upłynięciu limitu czasu. |
GetOrders |
Pobiera wszystkie zlecenia, opcjonalnie filtrowane według statusu. |
Przykłady składania zleceń
// 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);
Uwaga: Metoda CancelAllOrdersAfter działa jako mechanizm bezpieczeństwa. Anuluje wszystkie zlecenia, jeśli nie zostanie odnowiona w określonym limicie czasu. Jest to przydatne jako mechanizm bezpieczeństwa zapobiegający niekontrolowanym zleceniom, gdy aplikacja utraci łączność.
REST API: pozycje
Metody zarządzania pozycjami umożliwiają zapytania, zamykanie i konfigurowanie otwartych pozycji, w tym ustawień dźwigni i marginu.
| Metoda | Opis |
|---|---|
GetPosition |
Pobiera aktualną pozycję dla instrumentu. |
ClosePosition |
Zamyka otwartą pozycję poprzez złożenie rynkowego zlecenia zamykającego. |
SetPositionIsolate |
Przełącza między trybem marginu krzyżowego i izolowanego dla pozycji. |
SetPositionLeverage |
Ustawia mnożnik dźwigni dla pozycji. |
SetPositionRiskLimit |
Ustawia limit ryzyka dla pozycji. |
SetPositionTransferMargin |
Przenosi margin do lub z izolowanej pozycji. |
Przykłady zarządzania pozycjami
// 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'));
Przykład kodu
Poniższy przykład demonstruje kompletny przepływ łączący subskrypcje WebSocket i wywołania REST API: połączenie, subskrypcja transakcji na żywo, zapytanie o arkusz zleceń i złożenie zlecenia limitowanego.
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));
Konfiguracja i uwagi
Dane uwierzytelniające API
Wygeneruj klucz API i sekret z ustawień konta BitMEX. Możesz tworzyć klucze z określonymi uprawnieniami (order, withdraw, itp.). W przypadku botów tradingowych utwórz klucz tylko z uprawnieniami, których potrzebujesz i unikaj włączania uprawnień do wypłat, chyba że jest to absolutnie konieczne.
Obsługa testnetu
BitMEX udostępnia środowisko testowe na testnet.bitmex.com do programowania i testowania. Skonfiguruj komponent, aby używać punktu końcowego testnetu i testować integrację z symulowanymi środkami przed uruchomieniem produkcyjnym. Grupa właściwości Bitmex zawiera ustawienia do wyboru między środowiskami produkcyjnymi i testowymi.
Enumeracja strony zlecenia
Metody tradingu używają wartości enumeracji bmsBuy i bmsSell do określenia kierunku zlecenia. Są one specyficzne dla komponentu BitMEX.
Użycie WebSocket vs REST
Używaj subskrypcji WebSocket do strumieniowania danych w czasie rzeczywistym, gdzie niskie opóźnienie jest krytyczne (wyświetlanie cen na żywo, wizualizacja arkusza zleceń, monitorowanie realizacji). Używaj REST API dla operacji na żądanie, takich jak składanie zleceń, zapytania o pozycje i pobieranie danych historycznych. Oba interfejsy uzupełniają się i mogą być używane jednocześnie.
Limity częstotliwości
BitMEX egzekwuje limity częstotliwości wywołań REST API. Limity różnią się w zależności od punktu końcowego, ale zazwyczaj wynoszą 60 żądań na minutę dla większości punktów końcowych tradingu i 30 żądań na minutę dla modyfikacji i anulowania zleceń. Monitoruj nagłówki limitów częstotliwości w odpowiedziach, aby uniknąć tymczasowego zablokowania. Subskrypcje WebSocket nie podlegają limitom częstotliwości REST.
Symbole instrumentów
BitMEX używa własnego formatu symboli instrumentów. Wieczysty kontrakt Bitcoin to XBTUSD, natomiast kontrakty futures zawierają sufiks daty wygaśnięcia (np. XBTM25). Użyj GetInstrumentsActive, aby odkryć wszystkie aktualnie handlowane instrumenty i ich symbole.
CancelAllOrdersAfter z periodycznym timerem w aplikacji jako siatką bezpieczeństwa. Jeśli aplikacja ulegnie awarii lub utraci łączność, wszystkie zlecenia zostaną automatycznie anulowane po określonym limicie czasu, chroniąc cię przed nieoczekiwanymi ruchami rynkowymi.
