Actualización de la API FXCM en sgcWebSockets

· Características
Integración de la API FXCM Forex Trading en Delphi

La API de FXCM proporciona acceso programático a uno de los mayores brokers minoristas de forex del mundo, permitiendo streaming de datos de mercado en tiempo real, ejecución de órdenes y recuperación de velas históricas. El componente TsgcWSAPI_FXCM para Delphi envuelve las interfaces WebSocket (socket.io) y HTTP de FXCM en una única clase fácil de usar, lo que te permite construir sistemas de trading automatizados, escáneres de mercado y dashboards de cartera sin lidiar con los detalles de bajo nivel del protocolo.

Tabla de contenidos

Visión general y arquitectura

FXCM expone su plataforma de trading mediante un protocolo híbrido que combina una conexión WebSocket persistente (basada en socket.io) para streaming en tiempo real con endpoints HTTP estándar para operaciones request/response. El componente TsgcWSAPI_FXCM abstrae ambas capas de transporte detrás de una interfaz Delphi unificada, de modo que interactúas con un único componente sin importar si la llamada subyacente usa WebSocket o HTTP.

La API admite tres grandes áreas funcionales:

Área Descripción Transporte
Market data streaming de precios en tiempo real y descubrimiento de símbolos WebSocket + HTTP
Trading tables estado de la cuenta, posiciones, órdenes y ofertas WebSocket + HTTP
Ejecución de órdenes colocar, modificar y cerrar órdenes de trading HTTP

Configuración

Antes de conectar a la API de FXCM debes configurar dos propiedades esenciales en el componente TsgcWSAPI_FXCM:

Propiedad Tipo Descripción
FXCM.AccessToken String tu access token de la API, obtenido desde FXCM Trading Station Web
FXCM.Demo Boolean ponlo a True para el entorno demo, False para trading real
Nota: para obtener tu Access Token inicia sesión en FXCM Trading Station Web, ve a la configuración de tu cuenta y genera un nuevo token de API. Empieza siempre el desarrollo con FXCM.Demo := True para evitar colocar trades reales.

Primeros pasos

Configurar el componente FXCM requiere sólo tres pasos: crear un cliente WebSocket, asociar el componente API y configurar tus credenciales. Una vez activado el cliente, el componente gestiona automáticamente el handshake socket.io y la autenticación HTTP con bearer token.

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;

Métodos de market data

Los métodos de market data te permiten descubrir instrumentos disponibles, suscribirte a actualizaciones de precios en tiempo real y gestionar tus suscripciones activas.

Método Descripción
GetSymbols devuelve una lista de todos los símbolos de trading disponibles (pares de divisas, CFDs, etc.)
SubscribeMarketData se suscribe a actualizaciones de precio en tiempo real para un símbolo dado
UnSubscribeMarketData deja de recibir actualizaciones de precio en tiempo real para un símbolo dado
UpdateSubscriptions filtra la tabla offer para mostrar sólo los símbolos a los que estás suscrito

Suscribirse a market data

Una vez conectado, llama a GetSymbols para descubrir los instrumentos disponibles y suscríbete a cualquier símbolo para recibir precios bid/ask en streaming:

// 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;

Métodos de trading tables

FXCM organiza los datos de cuenta en trading tables. Puedes suscribirte para recibir actualizaciones continuas a medida que cambia el estado, o pedir una snapshot puntual del estado actual.

Trading tables disponibles

Nombre de la tabla Descripción
Offer precios bid/ask actuales, máximos/mínimos e información de sesión de trading para cada instrumento
OpenPosition todas las posiciones abiertas con P&L, margen y precios de entrada
ClosedPosition posiciones recientemente cerradas con P&L realizado
Order órdenes de entrada pendientes y sus parámetros
Summary resumen agregado de posiciones por instrumento
LeverageProfile configuración de apalancamiento por instrumento y cuenta
Account balance de cuenta, equity, margen usado y margen disponible
Properties configuración a nivel de cuenta y propiedades de trading

Métodos de suscripción y snapshot

Método Descripción
SubscribeTradingTables se suscribe a actualizaciones continuas para una trading table concreta
UnSubscribeTradingTables deja de recibir actualizaciones para una trading table concreta
SnapshotTradingTables recupera una snapshot puntual del estado actual de una trading table
// 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');

Órdenes de trading

El método TradingOrder proporciona una interfaz unificada para colocar, modificar y cerrar órdenes a través de la API HTTP de FXCM. Todas las operaciones sobre órdenes se realizan mediante este único método, con distintos parámetros que controlan la acción a realizar.

Método Descripción
TradingOrder coloca una nueva orden, modifica una orden existente o cierra una posición abierta según los parámetros proporcionados
Nota: el método TradingOrder envía las peticiones por HTTP. Confirma siempre los resultados de ejecución consultando las trading tables (OpenPosition, Order) para ver el estado actualizado tras enviar una orden.

Datos históricos

El método GetHistoricalData recupera datos de velas OHLC (Open, High, Low, Close) para cualquier instrumento disponible en un time frame concreto. Es esencial para hacer backtesting de estrategias, construir gráficos y realizar análisis técnico.

Método Parámetros Descripción
GetHistoricalData Symbol, TimeFrame, NumPeriods recupera datos de velas para un instrumento concreto en el time frame y número de periodos indicados

Time frames admitidos

Valor Descripción
m1 velas de 1 minuto
m5 velas de 5 minutos
m15 velas de 15 minutos
m30 velas de 30 minutos
H1 velas de 1 hora
H4 velas de 4 horas
D1 velas diarias
W1 velas semanales
M1 velas mensuales
// 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));

Ejemplo de código completo

El siguiente ejemplo muestra un workflow completo: conectar al entorno demo de FXCM, recuperar los símbolos disponibles, suscribirse a market data en tiempo real y obtener datos de velas históricos.

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;

Notas y buenas prácticas

Entorno demo vs. entorno real

Desarrolla y prueba siempre con FXCM.Demo := True. El entorno demo proporciona la misma superficie de API y formato de datos que el entorno real, pero usa fondos virtuales. Cambia a FXCM.Demo := False sólo después de pruebas exhaustivas.

Gestión de la conexión

La conexión socket.io subyacente envía heartbeats periódicos para mantener viva la sesión. Si la conexión se cae, el componente intentará reconectar automáticamente. Monitoriza los eventos OnDisconnect y OnError del cliente WebSocket para manejar las interrupciones de red con elegancia.

Rate limits

FXCM aplica rate limits sobre las peticiones HTTP. Evita llamar a métodos como GetHistoricalData o TradingOrder en bucles cerrados. Para datos en tiempo real, prefiere suscripciones WebSocket en lugar de polling por HTTP.

Consejo: combina SubscribeMarketData para los precios en vivo con SubscribeTradingTables('OpenPosition') y SubscribeTradingTables('Account') para construir un dashboard de trading en tiempo real completo que muestre tanto las condiciones de mercado como el estado de tu cartera.