Aktualizacja API FXCM w sgcWebSockets

· Features
Integracja API FXCM Forex Trading w Delphi

API FXCM zapewnia programowy dostęp do jednego z największych detalicznych brokerów forex na świecie, umożliwiając strumieniowanie danych rynkowych w czasie rzeczywistym, realizację zleceń i pobieranie historycznych świec. Komponent TsgcWSAPI_FXCM dla Delphi opakowuje interfejsy WebSocket (socket.io) i HTTP FXCM w jedną, łatwą w użyciu klasę, pozwalając budować zautomatyzowane systemy handlowe, skanery rynku i dashboardy portfela bez zajmowania się niskopoziomowymi szczegółami protokołu.

Spis treści

Przegląd i architektura

FXCM udostępnia swoją platformę handlową przez hybrydowy protokół łączący trwałe połączenie WebSocket (oparte na socket.io) do strumieniowania w czasie rzeczywistym ze standardowymi endpointami HTTP dla operacji żądanie/odpowiedź. Komponent TsgcWSAPI_FXCM ukrywa oba warstwy transportu za jednolitym interfejsem Delphi, więc pracujesz z jednym komponentem niezależnie od tego, czy wywołanie używa WebSocket czy HTTP.

API obsługuje trzy główne obszary funkcjonalne:

Obszar Opis Transport
Dane rynkowe Strumieniowanie cen w czasie rzeczywistym i odkrywanie symboli WebSocket + HTTP
Tabele handlowe Stan konta, pozycje, zlecenia i oferty WebSocket + HTTP
Realizacja zleceń Składanie, modyfikowanie i zamykanie zleceń handlowych HTTP

Konfiguracja

Przed połączeniem z API FXCM musisz skonfigurować dwie kluczowe właściwości komponentu TsgcWSAPI_FXCM:

Właściwość Typ Opis
FXCM.AccessToken String Twój token dostępu API, uzyskany z FXCM Trading Station Web
FXCM.Demo Boolean Ustaw na True dla środowiska demo, False dla handlu na żywo
Uwaga: Aby uzyskać token dostępu, zaloguj się do FXCM Trading Station Web, przejdź do ustawień konta i wygeneruj nowy token API. Zawsze rozpoczynaj tworzenie z FXCM.Demo := True, aby uniknąć składania prawdziwych zleceń.

Pierwsze kroki

Konfiguracja komponentu FXCM wymaga jedynie trzech kroków: utwórz klienta WebSocket, dołącz komponent API i skonfiguruj dane uwierzytelniające. Po aktywacji klienta komponent automatycznie obsługuje uścisk dłoni socket.io i uwierzytelnianie tokenu HTTP bearer.

var
  oClient: TsgcWebSocketClient;
  oFXCM: TsgcWSAPI_FXCM;
begin
  oClient := TsgcWebSocketClient.Create(nil);
  oFXCM := TsgcWSAPI_FXCM.Create(nil);
  oFXCM.Client := oClient;
  oFXCM.FXCM.AccessToken := 'your_access_token';
  oFXCM.FXCM.Demo := True;
  oClient.Active := True;
end;

Metody danych rynkowych

Metody danych rynkowych umożliwiają odkrywanie dostępnych instrumentów, subskrypcję aktualizacji cen w czasie rzeczywistym i zarządzanie aktywnymi subskrypcjami.

Metoda Opis
GetSymbols Zwraca listę wszystkich dostępnych symboli handlowych (pary walutowe, CFD itp.)
SubscribeMarketData Subskrybuje aktualizacje cen w czasie rzeczywistym dla danego symbolu
UnSubscribeMarketData Zatrzymuje odbieranie aktualizacji cen w czasie rzeczywistym dla danego symbolu
UpdateSubscriptions Filtruje tabelę ofert, aby wyświetlać tylko aktualnie subskrybowane symbole

Subskrypcja danych rynkowych

Po połączeniu wywołaj GetSymbols, aby odkryć dostępne instrumenty, a następnie subskrybuj dowolny symbol dla strumieniowania cen bid/ask:

// Retrieve all available trading symbols
ShowMessage(oFXCM.GetSymbols);
// Subscribe to real-time EUR/USD price updates
oFXCM.SubscribeMarketData('EUR/USD');
// Subscribe to additional pairs
oFXCM.SubscribeMarketData('GBP/USD');
oFXCM.SubscribeMarketData('USD/JPY');
// Filter the offer table to show only subscribed symbols
oFXCM.UpdateSubscriptions;

Metody tabel handlowych

FXCM organizuje dane konta w tabele handlowe. Możesz subskrybować ciągłe aktualizacje w miarę zmiany stanu lub poprosić o jednorazową migawkę bieżącego stanu.

Dostępne tabele handlowe

Nazwa tabeli Opis
Offer Bieżące ceny bid/ask, wartości wysokie/niskie i informacje o sesji handlowej dla każdego instrumentu
OpenPosition Wszystkie aktualnie otwarte pozycje z P&L, depozytem i cenami wejścia
ClosedPosition Ostatnio zamknięte pozycje ze zrealizowanym P&L
Order Oczekujące zlecenia wejścia i ich parametry
Summary Zagregowane podsumowanie pozycji dla każdego instrumentu
LeverageProfile Ustawienia dźwigni dla każdego instrumentu i konta
Account Saldo konta, kapitał własny, użyty depozyt i dostępny depozyt
Properties Ustawienia konta i właściwości handlowe

Metody subskrypcji i migawki

Metoda Opis
SubscribeTradingTables Subskrybuje ciągłe aktualizacje dla wskazanej tabeli handlowej
UnSubscribeTradingTables Zatrzymuje odbieranie aktualizacji dla wskazanej tabeli handlowej
SnapshotTradingTables Pobiera jednorazową migawkę bieżącego stanu tabeli handlowej
// Subscribe to real-time updates for open positions
oFXCM.SubscribeTradingTables('OpenPosition');
// Subscribe to account balance updates
oFXCM.SubscribeTradingTables('Account');
// Get a one-time snapshot of all pending orders
ShowMessage(oFXCM.SnapshotTradingTables('Order'));
// Stop receiving position updates
oFXCM.UnSubscribeTradingTables('OpenPosition');

Zlecenia handlowe

Metoda TradingOrder zapewnia ujednolicony interfejs do składania, modyfikowania i zamykania zleceń przez HTTP API FXCM. Wszystkie operacje na zleceniach są wykonywane przez tę jedną metodę, a różne parametry kontrolują podejmowane działanie.

Metoda Opis
TradingOrder Składa nowe zlecenie, modyfikuje istniejące lub zamyka otwartą pozycję, zależnie od podanych parametrów
Uwaga: Metoda TradingOrder wysyła żądania przez HTTP. Zawsze potwierdzaj wyniki realizacji, sprawdzając tabele handlowe (OpenPosition, Order) pod kątem zaktualizowanego stanu po złożeniu zlecenia.

Dane historyczne

Metoda GetHistoricalData pobiera dane świec OHLC (Open, High, Low, Close) dla dowolnego dostępnego instrumentu w określonej ramie czasowej. Jest niezbędna do backtestowania strategii, budowania wykresów i przeprowadzania analizy technicznej.

Metoda Parametry Opis
GetHistoricalData Symbol, TimeFrame, NumPeriods Pobiera dane świec dla danego instrumentu przy określonej ramie czasowej i liczbie okresów

Obsługiwane ramy czasowe

Wartość Opis
m1 Świece 1-minutowe
m5 Świece 5-minutowe
m15 Świece 15-minutowe
m30 Świece 30-minutowe
H1 Świece 1-godzinne
H4 Świece 4-godzinne
D1 Świece dzienne
W1 Świece tygodniowe
M1 Świece miesięczne
// Get the last 100 five-minute candles for EUR/USD
ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
// Get the last 50 daily candles for GBP/USD
ShowMessage(oFXCM.GetHistoricalData('GBP/USD', 'D1', 50));

Pełny przykład kodu

Poniższy przykład demonstruje kompletny przepływ pracy: połączenie ze środowiskiem demo FXCM, pobieranie dostępnych symboli, subskrypcję danych rynkowych w czasie rzeczywistym i pobieranie historycznych danych świec.

var
  oClient: TsgcWebSocketClient;
  oFXCM: TsgcWSAPI_FXCM;
begin
  // Create and configure the WebSocket client
  oClient := TsgcWebSocketClient.Create(nil);
  oFXCM := TsgcWSAPI_FXCM.Create(nil);
  oFXCM.Client := oClient;
  // Configure FXCM credentials
  oFXCM.FXCM.AccessToken := 'your_access_token';
  oFXCM.FXCM.Demo := True;
  // Connect to FXCM
  oClient.Active := True;
  // Get all available symbols
  ShowMessage(oFXCM.GetSymbols);
  // Subscribe to real-time market data for EUR/USD
  oFXCM.SubscribeMarketData('EUR/USD');
  // Get the last 100 five-minute candles
  ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
end;

Uwagi i najlepsze praktyki

Środowisko demo i środowisko produkcyjne

Zawsze twórz i testuj z FXCM.Demo := True. Środowisko demo zapewnia tę samą powierzchnię API i format danych co środowisko produkcyjne, ale używa wirtualnych środków. Przełącz na FXCM.Demo := False dopiero po dokładnym przetestowaniu.

Zarządzanie połączeniem

Bazowe połączenie socket.io wysyła okresowe heartbeaty, aby utrzymać sesję aktywną. Jeśli połączenie zostanie zerwane, komponent spróbuje automatycznie się ponownie połączyć. Monitoruj zdarzenia OnDisconnect i OnError klienta WebSocket, aby obsługiwać przerwy sieciowe.

Limity zapytań

FXCM egzekwuje limity zapytań HTTP. Unikaj wywoływania metod jak GetHistoricalData lub TradingOrder w ciasnych pętlach. Dla danych w czasie rzeczywistym preferuj subskrypcje WebSocket zamiast odpytywania HTTP.

Wskazówka: Połącz SubscribeMarketData dla cen na żywo z SubscribeTradingTables('OpenPosition') i SubscribeTradingTables('Account'), aby zbudować kompletny dashboard handlowy w czasie rzeczywistym pokazujący zarówno warunki rynkowe, jak i stan portfela.