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
- Configurazione
- Per iniziare
- Metodi dei dati di mercato
- Metodi delle trading table
- Ordini di trading
- Dati storici
- Esempio di codice completo
- Note e best practice
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 |
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 |
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.
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.
