API Forex.com: REST i Lightstreamer

· Komponenty

Następne wydanie sgcWebSockets — wersja 2026.5.0 — dodaje natywną obsługę API tradingowego Forex.com / StoneX / CityIndex: zarządzanie zleceniami REST plus streaming Lightstreamer w czasie rzeczywistym, wszystko dostarczone przez jeden komponent Delphi, który możesz umieścić na formularzu.

Trzy nowe komponenty pokrywają całą funkcjonalność: TsgcHTTP_API_Forex dla handlu REST, TsgcWSPClient_Lightstreamer dla natywnego kanału streamingowego Lightstreamer TLCP 2.5 oraz TsgcWSAPI_Forex jako zunifikowana fasada łącząca je razem i publikująca typizowane zdarzenia OnForex* dla cen, zleceń, pozycji, kwotowań i marży konta.

Co jest zawarte

Każdy punkt końcowy i adapter strumieniowy, który aktualnie serwuje serwer Forex.com, jest obsługiwany od razu po instalacji.

Trading REST
LogOn / LogOff / Ping / GetServiceStatus, plus pięć punktów końcowych zleceń: NewTradeOrder, UpdateTradeOrder, NewStopLimitOrder, UpdateStopLimitOrder i CancelOrder. Każdy dostępny w trzech przeciążeniach — surowy JSON, parametry skalarne lub typizowany obiekt zlecenia z pełnymi nawiasami IfDone i obsługą częściowego zamknięcia.
Konto i dane rynkowe
GetClientAndTradingAccount, ListOpenPositions, ListActiveStopLimitOrders, GetOrder, ListTradeHistory, ListStopLimitOrderHistory, SimulateTrade, GetMarketInformation, ListCfdMarkets, FullSearchWithTags, GetPriceBars i GetPriceTicks.
Streaming w czasie rzeczywistym
Pięć adapterów danych Lightstreamer w zestawie adapterów STREAMINGALLPRICES, ORDERS, QUOTES, CLIENTACCOUNTMARGIN i TRADEMARGIN. Każdy przekazuje sparsowane rekordy do typizowanego zdarzenia: OnForexPriceTick, OnForexOrderUpdate, OnForexPositionUpdate, OnForexAccountMargin, OnForexQuote.
Zunifikowany komponent fasady
TsgcWSAPI_Forex agreguje klienta REST oraz wewnętrzny klient Lightstreamer za jednym wizualnym komponentem. Wywołaj Connect — najpierw uruchamia się REST LogOn, jego token Session jest przekazywany do handshake Lightstreamer jako LS_password, a streaming startuje. Jeden komponent, jedno wywołanie.
Automatyczne ponowne połączenie
Obsługiwane przez wbudowany mechanizm WatchDog klienta WebSocket. Przed każdą próbą ponownego połączenia fasada odświeża token sesji REST; ramki TLCP LOOP ponownie wiążą i odtwarzają wszystkie aktywne subskrypcje po utracie połączenia sieciowego. Wygaśnięcie sesji powoduje przezroczyste ponowne uruchomienie LogOn.
Zasięg platformowy
Delphi 7 do Delphi 13, edycja Professional i wyższe. Windows, macOS, Linux, iOS i Android tam, gdzie kompilator to obsługuje. Dostarczany z lustrzaną wersją .NET (net40+, .NET Standard 2.0, .NET 5-9) wspieraną przez natywną bibliotekę DLL sgcWebSockets.

Pod maską

Część strumieniowa tej integracji jest najciekawszym elementem. Forex.com dostarcza dane w czasie rzeczywistym przez Lightstreamer — zastrzeżony protokół strumieniowy używany przez wielu brokerów i dostawców danych finansowych. Do tej pory nie istniał natywny klient TLCP dla Delphi; istniejące integracje z platformami opartymi na Lightstreamer owijały SDK JavaScript lub Java Lightstreamer przez osadzenia przeglądarki lub procesy zewnętrzne.

TsgcWSPClient_Lightstreamer to napisana od zera natywna implementacja protokołu Lightstreamer TLCP 2.5: create_session, bind_session, control (subskrybuj / odsubskrybuj), handler automatycznego ponownego wiązania LOOP i odtwarzanie subskrypcji po ponownym połączeniu — reklamowana w sieci przez nagłówek subprotokołu Sec-WebSocket-Protocol: TLCP-2.5.0.lightstreamer.com. Czyni to sgcWebSockets pierwszą biblioteką komponentów Delphi z natywną obsługą TLCP, a klient jest celowo ogólny: dostarczany jako własny wielokrotnego użytku komponent, niezwiązany z Forex.com, więc ta sama ścieżka kodu obsługuje dowolnego brokera opartego na Lightstreamer (np. IG Markets) lub dostawcę danych.

Adresowanie elementów. Każdy adapter Forex.com używa tego samego formatu elementu ID.{numericId} — numeryczny id to MarketId, ClientAccountId lub TradingAccountId, a selektor DataAdapter na ramce SUB (PRICES / ORDERS / QUOTES / CLIENTACCOUNTMARGIN / TRADEMARGIN) decyduje, który zestaw danych jest strumieniowany dla tego id. Nie ma przestarzałych prefiksów PRICE.{id}.

Wzorzec obiektu zlecenia. Żądania transakcji stosują ten sam projekt w stylu Kucoin używany w innych miejscach biblioteki: TsgcHTTPForexTradeOrder, TsgcHTTPForexStopLimitOrder i TsgcHTTPForexCancelOrder. Zbuduj zlecenie raz, zmień kilka pól, wyślij ponownie. Typizowane nawiasy IfDone (dołączony stop / limit / gwarantowany stop / trailing stop), tablice Close dla semantyki częściowego zamknięcia, PositionMethodId (netting vs. hedging) oraz pola Reference klienta są tu pełnoprawnymi elementami.

Przykład kodu

Umieść fasadę na formularzu, ustaw dane uwierzytelniające, podłącz zdarzenie price tick, wywołaj Connect i WatchMarket. Poniższy fragment to kompletny, działający przykład.

var
  Forex: TsgcWSAPI_Forex;
begin
  Forex := TsgcWSAPI_Forex.Create(nil);
  Try
    Forex.Credentials.UserName := 'YOUR_USER';
    Forex.Credentials.Password := 'YOUR_PASSWORD';
    Forex.Credentials.AppKey   := 'YOUR_APPKEY';
    Forex.OnForexPriceTick := OnPriceTick;
    Forex.Connect;                // REST LogOn + Lightstreamer
    Forex.WatchMarket(401484830);    // EUR/USD
    Forex.WatchAccount;           // ORDERS + margin
    // ... run app, receive ticks and order updates ...
  Finally
    Forex.Free;
  End;
end;
procedure TForm1.OnPriceTick(Sender: TObject;
  const aTick: TsgcForexPriceTick);
begin
  Memo1.Lines.Add(Format('%d  bid=%.5f  offer=%.5f  audit=%s',
    [aTick.MarketId, aTick.Bid, aTick.Offer, aTick.AuditId]));
end;

Demo

Pełne demo VCL znajduje się w Demos\05.Crypto\22.Forex. Jest podzielone na trzy zakładki:

Dostępność

Dostępne w następnym wydaniu sgcWebSockets — wersja 2026.5.0. Posiadacze licencji Enterprise i All-Access otrzymują je w ramach swojej subskrypcji; licencje Professional otrzymują je przy odnowieniu.

Zarejestruj darmowe konto demo Forex.com (w tym UserName / Password / AppKey) na www.forex.com, z pełną dokumentacją API na docs.labs.gaincapital.com.

Linki