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
- Configuración
- Primeros pasos
- Métodos de market data
- Métodos de trading tables
- Órdenes de trading
- Datos históricos
- Ejemplo de código completo
- Notas y buenas prácticas
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 |
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 |
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.
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.
