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
- Configuração
- Primeiros Passos
- Métodos de Dados de Mercado
- Métodos de Tabelas de Trading
- Ordens de Trading
- Dados Históricos
- Exemplo de Código Completo
- Notas e Boas Práticas
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 |
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 |
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.
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.
