Aktualizacja API Bitmex w sgcWebSockets

· Funkcje

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

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.

Ważne: Zawsze testuj logikę tradingową na testnecie BitMEX przed wdrożeniem produkcyjnym. Klucze API testnetu są generowane oddzielnie z interfejsu testowego i nie są wymienne z kluczami produkcyjnymi.

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.

Wskazówka: Połącz metodę 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.