Aggiornamento API FXCM per sgcWebSockets

· Funzionalità
Integrazione dell'API di trading forex FXCM in Delphi

L'API FXCM fornisce accesso programmatico a uno dei più grandi broker forex retail al mondo, abilitando lo streaming di dati di mercato in tempo reale, l'esecuzione di ordini e il recupero di candele storiche. Il componente TsgcWSAPI_FXCM per Delphi avvolge le interfacce WebSocket (socket.io) e HTTP di FXCM in un'unica classe semplice da usare, permettendoti di costruire sistemi di trading automatizzati, market scanner e dashboard di portafoglio senza occuparti dei dettagli del protocollo di basso livello.

Indice

Panoramica e architettura

FXCM espone la sua piattaforma di trading attraverso un protocollo ibrido che combina una connessione WebSocket persistente (costruita su socket.io) per lo streaming in tempo reale con endpoint HTTP standard per le operazioni request/response. Il componente TsgcWSAPI_FXCM astrae entrambi i livelli di trasporto dietro un'interfaccia Delphi unificata, così interagisci con un singolo componente indipendentemente dal fatto che la chiamata sottostante usi WebSocket o HTTP.

L'API supporta tre aree funzionali principali:

Area Descrizione Trasporto
Dati di mercato Streaming dei prezzi in tempo reale e scoperta dei simboli WebSocket + HTTP
Trading Tables Stato dell'account, posizioni, ordini e offerte WebSocket + HTTP
Esecuzione ordini Piazza, modifica e chiude ordini di trading HTTP

Configurazione

Prima di connetterti all'API FXCM, devi configurare due proprietà essenziali sul componente TsgcWSAPI_FXCM:

Proprietà Tipo Descrizione
FXCM.AccessToken String Il tuo access token API, ottenuto da FXCM Trading Station Web
FXCM.Demo Boolean Imposta a True per l'ambiente demo, False per il trading live
Nota: per ottenere il tuo Access Token, accedi a FXCM Trading Station Web, vai nelle impostazioni del tuo account e genera un nuovo token API. Inizia sempre lo sviluppo con FXCM.Demo := True per evitare di piazzare trade reali.

Per iniziare

Configurare il componente FXCM richiede solo tre passi: crea un client WebSocket, collega il componente API e configura le tue credenziali. Una volta attivato il client, il componente gestisce automaticamente l'handshake socket.io e l'autenticazione 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;

Metodi dei dati di mercato

I metodi dei dati di mercato ti permettono di scoprire gli strumenti disponibili, sottoscriverti agli aggiornamenti dei prezzi in tempo reale e gestire le tue sottoscrizioni attive.

Metodo Descrizione
GetSymbols Restituisce un elenco di tutti i simboli di trading disponibili (coppie di valute, CFD, ecc.)
SubscribeMarketData Sottoscrive agli aggiornamenti dei prezzi in tempo reale per un simbolo dato
UnSubscribeMarketData Smette di ricevere gli aggiornamenti dei prezzi in tempo reale per un simbolo dato
UpdateSubscriptions Filtra la tabella delle offerte per mostrare solo i simboli a cui sei attualmente sottoscritto

Sottoscrivere ai dati di mercato

Una volta connesso, chiama GetSymbols per scoprire gli strumenti disponibili, poi sottoscriviti a qualsiasi simbolo per lo streaming dei prezzi bid/ask:

// Recupera tutti i simboli di trading disponibili
ShowMessage(oFXCM.GetSymbols);
// Sottoscrive agli aggiornamenti in tempo reale dei prezzi EUR/USD
oFXCM.SubscribeMarketData('EUR/USD');
// Sottoscrive a coppie aggiuntive
oFXCM.SubscribeMarketData('GBP/USD');
oFXCM.SubscribeMarketData('USD/JPY');
// Filtra la tabella delle offerte per mostrare solo i simboli sottoscritti
oFXCM.UpdateSubscriptions;

Metodi delle trading table

FXCM organizza i dati dell'account in trading table. Puoi sottoscriverti per ricevere aggiornamenti continui al variare dello stato, oppure richiedere uno snapshot una tantum dello stato corrente.

Trading table disponibili

Nome tabella Descrizione
Offer Prezzi bid/ask correnti, high/low e info di sessione di trading per ogni strumento
OpenPosition Tutte le posizioni attualmente aperte con P&L, margine e prezzi di entrata
ClosedPosition Posizioni chiuse di recente con P&L realizzato
Order Ordini di entrata pendenti e i loro parametri
Summary Riepilogo aggregato delle posizioni per strumento
LeverageProfile Impostazioni di leva per strumento e account
Account Saldo dell'account, equity, margine usato e margine utilizzabile
Properties Impostazioni a livello di account e proprietà di trading

Metodi di sottoscrizione e snapshot

Metodo Descrizione
SubscribeTradingTables Sottoscrive agli aggiornamenti continui per una trading table specificata
UnSubscribeTradingTables Smette di ricevere aggiornamenti per una trading table specificata
SnapshotTradingTables Recupera uno snapshot una tantum dello stato corrente di una trading table
// Sottoscrive agli aggiornamenti in tempo reale delle posizioni aperte
oFXCM.SubscribeTradingTables('OpenPosition');
// Sottoscrive agli aggiornamenti del saldo dell'account
oFXCM.SubscribeTradingTables('Account');
// Ottiene uno snapshot una tantum di tutti gli ordini pendenti
ShowMessage(oFXCM.SnapshotTradingTables('Order'));
// Smette di ricevere gli aggiornamenti delle posizioni
oFXCM.UnSubscribeTradingTables('OpenPosition');

Ordini di trading

Il metodo TradingOrder fornisce un'interfaccia unificata per piazzare, modificare e chiudere ordini tramite l'API HTTP di FXCM. Tutte le operazioni sugli ordini sono eseguite tramite questo singolo metodo, con parametri diversi che controllano l'azione intrapresa.

Metodo Descrizione
TradingOrder Piazza un nuovo ordine, modifica un ordine esistente o chiude una posizione aperta in base ai parametri forniti
Nota: il metodo TradingOrder invia le richieste tramite HTTP. Conferma sempre i risultati di esecuzione controllando lo stato aggiornato nelle trading table (OpenPosition, Order) dopo aver inviato un ordine.

Dati storici

Il metodo GetHistoricalData recupera dati di candele OHLC (Open, High, Low, Close) per qualsiasi strumento disponibile in un determinato time frame. È essenziale per il backtest di strategie, la costruzione di grafici e l'analisi tecnica.

Metodo Parametri Descrizione
GetHistoricalData Symbol, TimeFrame, NumPeriods Recupera dati di candele per uno strumento dato al time frame specificato e numero di periodi

Time frame supportati

Valore Descrizione
m1 Candele da 1 minuto
m5 Candele da 5 minuti
m15 Candele da 15 minuti
m30 Candele da 30 minuti
H1 Candele da 1 ora
H4 Candele da 4 ore
D1 Candele giornaliere
W1 Candele settimanali
M1 Candele mensili
// Ottiene le ultime 100 candele da 5 minuti per EUR/USD
ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
// Ottiene le ultime 50 candele giornaliere per GBP/USD
ShowMessage(oFXCM.GetHistoricalData('GBP/USD', 'D1', 50));

Esempio di codice completo

L'esempio seguente dimostra un workflow completo: connessione all'ambiente demo FXCM, recupero dei simboli disponibili, sottoscrizione ai dati di mercato in tempo reale e fetch dei dati storici delle candele.

var
  oClient: TsgcWebSocketClient;
  oFXCM: TsgcWSAPI_FXCM;
begin
  // Crea e configura il client WebSocket
  oClient := TsgcWebSocketClient.Create(nil);
  oFXCM := TsgcWSAPI_FXCM.Create(nil);
  oFXCM.Client := oClient;
  // Configura le credenziali FXCM
  oFXCM.FXCM.AccessToken := 'your_access_token';
  oFXCM.FXCM.Demo := True;
  // Connetti a FXCM
  oClient.Active := True;
  // Ottieni tutti i simboli disponibili
  ShowMessage(oFXCM.GetSymbols);
  // Sottoscrive ai dati di mercato in tempo reale per EUR/USD
  oFXCM.SubscribeMarketData('EUR/USD');
  // Ottieni le ultime 100 candele da 5 minuti
  ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
end;

Note e best practice

Demo vs. ambiente live

Sviluppa e testa sempre con FXCM.Demo := True. L'ambiente demo fornisce la stessa superficie API e lo stesso formato dati dell'ambiente live, ma usa fondi virtuali. Passa a FXCM.Demo := False solo dopo test approfonditi.

Gestione della connessione

La connessione socket.io sottostante invia heartbeat periodici per mantenere la sessione attiva. Se la connessione cade, il componente tenterà di riconnettersi automaticamente. Monitora gli eventi OnDisconnect e OnError del client WebSocket per gestire le interruzioni di rete in modo elegante.

Limiti di velocità

FXCM impone rate limit sulle richieste HTTP. Evita di chiamare metodi come GetHistoricalData o TradingOrder in loop stretti. Per i dati in tempo reale, preferisci le sottoscrizioni WebSocket al polling con HTTP.

Suggerimento: combina SubscribeMarketData per i prezzi live con SubscribeTradingTables('OpenPosition') e SubscribeTradingTables('Account') per costruire una dashboard di trading in tempo reale completa che mostra sia le condizioni di mercato sia lo stato del tuo portafoglio.