Actualización de la API de XTB en sgcWebSockets

· Features
Integración de la API de trading XTB xStation5 en Delphi

XTB es una de las principales plataformas de trading online de Europa, que ofrece acceso a forex, índices, materias primas, acciones y criptomonedas a través de su plataforma xStation5. El componente TsgcWSAPI_XTB proporciona una integración completa en Delphi con la API de xStation5 mediante una única conexión WebSocket — cubre autenticación, obtención de datos de mercado, gestión de cuenta, ejecución de operaciones y suscripciones en tiempo real. Este artículo recorre todos los métodos disponibles y muestra cómo empezar en minutos.

Tabla de contenidos

Visión general de la arquitectura

A diferencia de muchos exchanges de criptomonedas que reparten la funcionalidad entre endpoints REST y canales WebSocket, la API XTB xStation5 funciona íntegramente sobre una única conexión WebSocket. Cada petición — desde obtener una lista de símbolos hasta colocar una operación — se envía y recibe como mensaje JSON por el mismo socket. Se gestiona automáticamente un segundo socket de streaming para las suscripciones en tiempo real (saldo, velas, ticks, operaciones, etc.).

El componente TsgcWSAPI_XTB abstrae todo esto por ti. Solo tienes que asignar un TsgcWebSocketClient, configurar tus credenciales, activar el cliente y llamar a métodos de alto nivel como GetAllSymbols o SubscribeTickPrices.

Autenticación

La autenticación se gestiona automáticamente cuando el cliente WebSocket se conecta, usando las credenciales que has establecido en el grupo de propiedades XTB. También puedes invocar estos métodos explícitamente si lo necesitas.

Método Descripción
Login Autentica contra el servidor xStation5 usando UserId y Password. Se llama automáticamente al conectarse.
Logout Finaliza la sesión autenticada y desconecta del servidor.

Métodos de datos de mercado

Estos métodos obtienen información de instrumentos, precios, gráficos, noticias y horarios de trading del servidor xStation5. Todas las llamadas son de tipo petición/respuesta sobre la conexión WebSocket.

Método Descripción
GetAllSymbols Devuelve una lista de todos los instrumentos disponibles en la plataforma.
GetSymbol Devuelve información detallada de un símbolo concreto.
GetTickPrices Devuelve los precios tick actuales (bid/ask) para los símbolos indicados.
GetTradingHours Devuelve los horarios de trading para los instrumentos indicados.
GetCalendar Devuelve el calendario económico con próximos eventos.
GetChartLastRequest Devuelve datos de velas de gráfico desde un timestamp dado hasta el presente.
GetChartRangeRequest Devuelve datos de velas de gráfico para un rango de fechas concreto.
GetNews Devuelve temas de noticias de la plataforma de trading XTB.
GetStepRules Devuelve las step rules para el cálculo de volúmenes.
GetServerTime Devuelve la hora actual del servidor.
GetVersion Devuelve el número de versión de la API.

Métodos de cuenta

Los métodos de cuenta te permiten consultar tu perfil de usuario, niveles de margen y cálculos de beneficio sin salir de la sesión WebSocket.

Método Descripción
GetCurrentUserData Devuelve información sobre el usuario que ha iniciado sesión (nombre, divisa, apalancamiento, etc.).
GetMarginLevel Devuelve el nivel de margen, el equity y el balance actuales de la cuenta.
GetMarginTrade Calcula el margen esperado para un instrumento y volumen dados.
GetIbsHistory Devuelve el historial de comisiones del Introducing Broker (IB).
GetProfitCalculation Calcula el beneficio estimado para un escenario de operación dado.

Métodos de trading

Estos métodos cubren desde leer posiciones abiertas e históricas hasta colocar y supervisar transacciones de trading.

Método Descripción
GetTrades Devuelve una lista de las operaciones actualmente abiertas. Pasa True para incluir solo las posiciones abiertas.
GetTradesHistory Devuelve las operaciones cerradas dentro de un rango temporal indicado.
GetTradeRecords Devuelve los registros de operación para los números de orden indicados.
TradeTransaction Ejecuta una transacción de trading (abrir, cerrar, modificar o eliminar una orden).
TradeTransactionStatus Comprueba el estado actual de una transacción de trading enviada previamente.

Suscripciones de streaming

Streaming methods open real-time data channels on a dedicated streaming connection. Each subscription has a corresponding unsubscribe method to stop receiving updates.

Subscribe Unsubscribe Descripción
SubscribeBalance UnSubscribeBalance Real-time balance and equity updates.
SubscribeCandles UnSubscribeCandles Live candle/chart updates for a symbol.
SubscribeKeepAlive UnSubscribeKeepAlive Periodic keep-alive heartbeat messages.
SubscribeNews UnSubscribeNews Real-time news feed from the platform.
SubscribeProfits UnSubscribeProfits Real-time profit/loss updates on open positions.
SubscribeTickPrices UnSubscribeTickPrices Precios tick bid/ask en vivo para un símbolo.
SubscribeTrades UnSubscribeTrades Actualizaciones en tiempo real cuando se abren, cierran o modifican operaciones.
SubscribeTradeStatus UnSubscribeTradeStatus Cambios de estado de transacciones de trading en tiempo real.
SubscribePing Se suscribe al ping de streaming para mantener viva la conexión (no es necesario desuscribirse).
Nota: las suscripciones de streaming requieren primero un inicio de sesión correcto. El ID de sesión de streaming se obtiene automáticamente durante la autenticación.

Métodos de utilidad

Método Descripción
Ping Envía un ping al servidor para verificar que la conexión está viva y evitar timeouts.

Primeros pasos — ejemplo de código

El siguiente ejemplo crea una conexión al servidor demo de XTB, autentica, obtiene símbolos y datos de usuario, se suscribe a precios tick en vivo y a actualizaciones de saldo, y obtiene las operaciones abiertas.

var
  oClient: TsgcWebSocketClient;
  oXTB: TsgcWSAPI_XTB;
begin
  // Create the WebSocket client
  oClient := TsgcWebSocketClient.Create(nil);
  // Create the XTB API component
  oXTB := TsgcWSAPI_XTB.Create(nil);
  oXTB.Client := oClient;
  // Configure credentials
  oXTB.XTB.UserId := 'your_user_id';
  oXTB.XTB.Password := 'your_password';
  oXTB.XTB.Demo := True;
  // Connect and authenticate
  oClient.Active := True;
  // After the login event fires, call API methods:
  oXTB.GetAllSymbols;
  oXTB.GetCurrentUserData;
  // Subscribe to real-time tick prices for EURUSD
  oXTB.SubscribeTickPrices('EURUSD', 0, 0);
  // Subscribe to balance updates
  oXTB.SubscribeBalance;
  // Get all open trades
  oXTB.GetTrades(False);
end;

Gestionar las respuestas

Todas las respuestas llegan de forma asíncrona a través de los eventos del componente. Asigna manejadores a eventos como OnXTBResponse y OnXTBStreamingResponse para procesar los datos JSON devueltos. Cada respuesta incluye un identificador de comando que te permite enrutarla a la lógica de procesamiento adecuada.

Referencia de configuración

Toda la configuración se agrupa bajo la propiedad XTB del componente TsgcWSAPI_XTB.

Propiedad Tipo Descripción
XTB.UserId String El ID de usuario de tu cuenta XTB.
XTB.Password String La contraseña de tu cuenta XTB.
XTB.Demo Boolean Pon True para conectarte al servidor demo; False para el servidor real de producción.

Consejos y notas

Demo vs. real

Desarrolla y prueba siempre con XTB.Demo := True. El servidor demo expone la misma API que producción, pero se conecta a un entorno sandbox con fondos virtuales. Cambia a False solo cuando estés listo para operar en real.

Keep-alive de la conexión

El servidor XTB desconecta las sesiones inactivas tras un periodo de timeout. Usa SubscribePing o llama periódicamente a Ping para mantener viva la conexión. El método SubscribeKeepAlive sobre la conexión de streaming cumple un propósito similar.

Arquitectura de conexión única

A diferencia de los exchanges con endpoints REST separados, XTB enruta cada comando a través de mensajes WebSocket. Esto simplifica la arquitectura del componente: solo necesitas un TsgcWebSocketClient y un TsgcWSAPI_XTB — no se requieren componentes HTTP adicionales.

Gestión de errores

Si una petición falla, el servidor devuelve una respuesta JSON de error con un código y una descripción. Gestiónalos en tu evento de respuesta comprobando el campo status. Los problemas habituales son credenciales inválidas, sesiones caducadas y rate-limiting por peticiones excesivas.

Rate limits: la API de XTB aplica límites de peticiones por segundo. Evita enviar ráfagas de peticiones en bucles muy ajustados. Espacia tus llamadas o usa suscripciones de streaming para datos que se actualicen con frecuencia.