API Forex.com: REST y Lightstreamer

· Componentes

La próxima versión de sgcWebSockets — la 2026.5.0 — añade soporte nativo de la API de trading Forex.com / StoneX / CityIndex: gestión de órdenes REST más streaming en tiempo real con Lightstreamer, todo a través de un único componente Delphi que puedes soltar en un formulario.

Tres componentes nuevos cubren toda la superficie: TsgcHTTP_API_Forex para el trading REST, TsgcWSPClient_Lightstreamer para el canal de streaming nativo Lightstreamer TLCP 2.5, y TsgcWSAPI_Forex como fachada unificada que los conecta y publica eventos tipados OnForex* para precios, órdenes, posiciones, cotizaciones y margen de cuenta.

Qué se incluye

Todos los endpoints y adaptadores de streaming que el servidor en vivo de Forex.com sirve hoy en día están soportados de serie.

Trading REST
LogOn / LogOff / Ping / GetServiceStatus, además de los cinco endpoints de órdenes: NewTradeOrder, UpdateTradeOrder, NewStopLimitOrder, UpdateStopLimitOrder y CancelOrder. Cada uno trae tres overloads — JSON crudo, parámetros escalares o un objeto de orden tipado con soporte completo de brackets IfDone y cierres parciales.
Datos de cuenta y mercado
GetClientAndTradingAccount, ListOpenPositions, ListActiveStopLimitOrders, GetOrder, ListTradeHistory, ListStopLimitOrderHistory, SimulateTrade, GetMarketInformation, ListCfdMarkets, FullSearchWithTags, GetPriceBars y GetPriceTicks.
Streaming en tiempo real
Cinco adaptadores de datos Lightstreamer bajo el adapter set STREAMINGALLPRICES, ORDERS, QUOTES, CLIENTACCOUNTMARGIN y TRADEMARGIN. Cada uno entrega registros parseados a un evento tipado: OnForexPriceTick, OnForexOrderUpdate, OnForexPositionUpdate, OnForexAccountMargin, OnForexQuote.
Componente fachada unificado
TsgcWSAPI_Forex agrega el cliente REST y el cliente Lightstreamer interno detrás de un único componente visual. Llamas a Connect — primero corre el LogOn REST, su token Session se reenvía al handshake de Lightstreamer como LS_password, y arranca el streaming. Un componente, una llamada.
Reconexión automática
La gestiona el WatchDog del cliente WebSocket subyacente. Antes de cada intento de reconexión la fachada refresca el token de sesión REST; los frames TLCP LOOP rebindan y reproducen todas las suscripciones activas tras una caída de red. La expiración de sesión vuelve a ejecutar LogOn de forma transparente.
Cobertura de plataformas
Delphi 7 a Delphi 13, edición Professional y superiores. Windows, macOS, Linux, iOS y Android donde el compilador lo soporte. Se entrega con un mirror .NET (net40+, .NET Standard 2.0, .NET 5-9) respaldado por la DLL nativa de sgcWebSockets.

Bajo el capó

La parte de streaming de esta integración es la más interesante. Forex.com entrega datos en tiempo real sobre Lightstreamer — un protocolo de streaming propietario usado por varios brokers y proveedores de datos financieros. Hasta ahora no existía un cliente TLCP nativo para Delphi; las integraciones existentes con plataformas basadas en Lightstreamer envuelven el SDK JavaScript o Java de Lightstreamer mediante embeds de navegador o procesos externos.

TsgcWSPClient_Lightstreamer es una implementación nativa hecha desde cero del protocolo Lightstreamer TLCP 2.5: create_session, bind_session, control (subscribe / unsubscribe), el manejador LOOP de auto-rebind y el replay de suscripciones tras la reconexión — anunciado en el cable mediante la cabecera de subprotocolo Sec-WebSocket-Protocol: TLCP-2.5.0.lightstreamer.com. Esto convierte a sgcWebSockets en la primera librería de componentes Delphi con soporte TLCP nativo, y el cliente es deliberadamente genérico: se entrega como su propio componente reutilizable, no soldado a Forex.com, de modo que el mismo camino de código sirve para cualquier broker basado en Lightstreamer (IG Markets, por ejemplo) o proveedor de datos.

Direccionamiento de ítems. Cada adaptador de Forex.com usa la misma forma de ítem ID.{numericId} — el id numérico es un MarketId, ClientAccountId o TradingAccountId, y el selector DataAdapter en el frame SUB (PRICES / ORDERS / QUOTES / CLIENTACCOUNTMARGIN / TRADEMARGIN) decide qué dataset se transmite para ese id. No hay prefijos legacy PRICE.{id}.

Patrón order-object. Las peticiones de trade siguen el mismo diseño estilo Kucoin usado en otras partes de la librería: TsgcHTTPForexTradeOrder, TsgcHTTPForexStopLimitOrder y TsgcHTTPForexCancelOrder. Construyes la orden una vez, modificas algunos campos y la envías de nuevo. Los brackets IfDone tipados (stop / limit / guaranteed-stop / trailing-stop adjuntos), arrays Close para semánticas de cierre parcial, PositionMethodId (netting vs. hedging) y los campos Reference del cliente son ciudadanos de primera clase.

Ejemplo de código

Coloca la fachada en un formulario, configura las credenciales, engancha el evento de price tick y llama a Connect y WatchMarket. El fragmento siguiente es un ejemplo completo y funcional.

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

Hay una demo completa en VCL en Demos\05.Crypto\22.Forex. Está dividida en tres pestañas:

Disponibilidad

Disponible en la próxima versión de sgcWebSockets — la 2026.5.0. Los actuales licenciatarios de Enterprise y All-Access la reciben como parte de su suscripción; las licencias Professional la reciben con su renovación.

Regístrate para obtener una cuenta demo gratuita de Forex.com (incluyendo UserName / Password / AppKey) en www.forex.com, con la referencia completa de la API en docs.labs.gaincapital.com.

Enlaces