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
- Konfiguracja
- Pierwsze kroki
- Metody danych rynkowych
- Metody tabel handlowych
- Zlecenia handlowe
- Dane historyczne
- Pełny przykład kodu
- Uwagi i najlepsze praktyki
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 |
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 |
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.
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.
