Atualização da API FXCM no sgcWebSockets

· Recursos
Integração da API FXCM Forex Trading em Delphi

A API da FXCM oferece acesso programático a uma das maiores corretoras forex de varejo do mundo, permitindo streaming de dados de mercado em tempo real, execução de ordens e recuperação de candles históricos. O componente TsgcWSAPI_FXCM para Delphi encapsula as interfaces WebSocket (socket.io) e HTTP da FXCM em uma única classe de fácil utilização, permitindo criar sistemas de trading automatizado, scanners de mercado e dashboards de portfólio sem lidar com detalhes de protocolo de baixo nível.

Índice

Visão geral e Arquitetura

A FXCM expõe sua plataforma de trading por meio de um protocolo híbrido que combina uma conexão WebSocket persistente (baseada em socket.io) para streaming em tempo real com endpoints HTTP padrão para operações de requisição/resposta. O componente TsgcWSAPI_FXCM abstrai ambas as camadas de transporte em uma interface Delphi unificada, para que você interaja com um único componente independentemente de a chamada subjacente usar WebSocket ou HTTP.

A API suporta três áreas funcionais principais:

Área Descrição Transporte
Dados de Mercado Streaming de preços em tempo real e descoberta de símbolos WebSocket + HTTP
Tabelas de Trading Estado da conta, posições, ordens e ofertas WebSocket + HTTP
Execução de Ordens Colocar, modificar e fechar ordens de trading HTTP

Configuração

Antes de conectar à API da FXCM, você deve configurar duas propriedades essenciais no componente TsgcWSAPI_FXCM:

Propriedade Tipo Descrição
FXCM.AccessToken String Seu token de acesso à API, obtido no FXCM Trading Station Web
FXCM.Demo Boolean Defina como True para o ambiente demo, False para trading real
Nota: Para obter seu Access Token, faça login no FXCM Trading Station Web, acesse as configurações da sua conta e gere um novo token de API. Sempre inicie o desenvolvimento com FXCM.Demo := True para evitar colocar ordens reais.

Primeiros Passos

Configurar o componente FXCM requer apenas três etapas: criar um cliente WebSocket, anexar o componente de API e configurar suas credenciais. Depois que o cliente for ativado, o componente gerencia automaticamente o handshake socket.io e a autenticação HTTP 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 Dados de Mercado

Os métodos de dados de mercado permitem descobrir instrumentos disponíveis, assinar atualizações de preço em tempo real e gerenciar suas assinaturas ativas.

Método Descrição
GetSymbols Retorna uma lista de todos os símbolos de negociação disponíveis (pares de moedas, CFDs, etc.)
SubscribeMarketData Assina atualizações de preço em tempo real para um símbolo específico
UnSubscribeMarketData Para de receber atualizações de preço em tempo real para um símbolo específico
UpdateSubscriptions Filtra a tabela de ofertas para exibir apenas os símbolos para os quais você está assinado

Assinando Dados de Mercado

Após conectar, chame GetSymbols para descobrir os instrumentos disponíveis e depois assine qualquer símbolo para receber preços bid/ask em 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 Tabelas de Trading

A FXCM organiza os dados da conta em tabelas de trading. Você pode assinar atualizações contínuas conforme o estado muda, ou solicitar um snapshot único do estado atual.

Tabelas de Trading Disponíveis

Nome da Tabela Descrição
Offer Preços bid/ask atuais, máximos/mínimos e informações da sessão de trading para cada instrumento
OpenPosition Todas as posições abertas com P&L, margem e preços de entrada
ClosedPosition Posições fechadas recentemente com P&L realizado
Order Ordens de entrada pendentes e seus parâmetros
Summary Resumo agregado de posições por instrumento
LeverageProfile Configurações de alavancagem por instrumento e conta
Account Saldo da conta, patrimônio, margem usada e margem disponível
Properties Configurações no nível da conta e propriedades de trading

Métodos de Assinatura e Snapshot

Método Descrição
SubscribeTradingTables Assina atualizações contínuas de uma tabela de trading específica
UnSubscribeTradingTables Para de receber atualizações de uma tabela de trading específica
SnapshotTradingTables Recupera um snapshot único do estado atual de uma tabela de trading
// 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');

Ordens de Trading

O método TradingOrder fornece uma interface unificada para colocar, modificar e fechar ordens pela API HTTP da FXCM. Todas as operações de ordem são realizadas por meio deste único método, com diferentes parâmetros controlando a ação executada.

Método Descrição
TradingOrder Coloca uma nova ordem, modifica uma ordem existente ou fecha uma posição aberta, dependendo dos parâmetros fornecidos
Nota: O método TradingOrder envia requisições via HTTP. Sempre confirme os resultados de execução verificando as tabelas de trading (OpenPosition, Order) para o estado atualizado após enviar uma ordem.

Dados Históricos

O método GetHistoricalData recupera dados de candle OHLC (Abertura, Máxima, Mínima, Fechamento) para qualquer instrumento disponível em um período de tempo especificado. Isso é essencial para backtesting de estratégias, construção de gráficos e análise técnica.

Método Parâmetros Descrição
GetHistoricalData Symbol, TimeFrame, NumPeriods Recupera dados de candle para um instrumento específico no período de tempo e número de períodos indicados

Períodos de Tempo Suportados

Valor Descrição
m1 Candles de 1 minuto
m5 Candles de 5 minutos
m15 Candles de 15 minutos
m30 Candles de 30 minutos
H1 Candles de 1 hora
H4 Candles de 4 horas
D1 Candles diários
W1 Candles semanais
M1 Candles mensais
// 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));

Exemplo de Código Completo

O exemplo a seguir demonstra um fluxo de trabalho completo: conectar ao ambiente demo da FXCM, recuperar símbolos disponíveis, assinar dados de mercado em tempo real e buscar dados históricos de candle.

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 e Boas Práticas

Ambiente Demo vs. Real

Sempre desenvolva e teste com FXCM.Demo := True. O ambiente demo fornece a mesma interface de API e formato de dados que o ambiente real, mas usa fundos virtuais. Mude para FXCM.Demo := False somente após testes minuciosos.

Gerenciamento de Conexão

A conexão socket.io subjacente envia heartbeats periódicos para manter a sessão ativa. Se a conexão cair, o componente tentará reconectar automaticamente. Monitore os eventos OnDisconnect e OnError do cliente WebSocket para tratar interrupções de rede de forma adequada.

Limites de Taxa

A FXCM aplica limites de taxa nas requisições HTTP. Evite chamar métodos como GetHistoricalData ou TradingOrder em loops contínuos. Para dados em tempo real, prefira assinaturas WebSocket em vez de polling com HTTP.

Dica: Combine SubscribeMarketData para preços ao vivo com SubscribeTradingTables('OpenPosition') e SubscribeTradingTables('Account') para criar um dashboard de trading em tempo real completo que mostra tanto as condições de mercado quanto o estado do seu portfólio.