L'API FXCM fournit un accès programmatique à l'un des plus grands brokers de forex retail au monde, permettant le streaming de données de marché en temps réel, l'exécution d'ordres et la récupération de chandeliers historiques. Le composant TsgcWSAPI_FXCM pour Delphi encapsule les interfaces WebSocket (socket.io) et HTTP de FXCM dans une seule classe facile à utiliser, te permettant de construire des systèmes de trading automatisés, des scanners de marché et des tableaux de bord de portefeuille sans gérer les détails de protocole bas niveau.
Table des matières
- Vue d'ensemble et architecture
- Configuration
- Premiers pas
- Méthodes de données de marché
- Méthodes de tables de trading
- Ordres de trading
- Données historiques
- Exemple de code complet
- Notes et bonnes pratiques
Vue d'ensemble et architecture
FXCM expose sa plateforme de trading via un protocole hybride qui combine une connexion WebSocket persistante (construite sur socket.io) pour le streaming en temps réel avec des endpoints HTTP standard pour les opérations requête/réponse. Le composant TsgcWSAPI_FXCM abstrait les deux couches de transport derrière une interface Delphi unifiée, donc tu interagis avec un seul composant que l'appel sous-jacent utilise WebSocket ou HTTP.
L'API prend en charge trois domaines fonctionnels majeurs :
| Domaine | Description | Transport |
|---|---|---|
| Données de marché | Streaming de prix en temps réel et découverte de symboles | WebSocket + HTTP |
| Tables de trading | État du compte, positions, ordres et offres | WebSocket + HTTP |
| Exécution d'ordres | Place, modifie et clôture des ordres de trading | HTTP |
Configuration
Avant de te connecter à l'API FXCM, tu dois configurer deux propriétés essentielles sur le composant TsgcWSAPI_FXCM :
| Propriété | Type | Description |
|---|---|---|
FXCM.AccessToken |
String | Ton jeton d'accès API, obtenu depuis FXCM Trading Station Web |
FXCM.Demo |
Boolean | Défini sur True pour l'environnement démo, False pour le trading en direct |
FXCM.Demo := True pour éviter de passer de vrais trades.
Premiers pas
Configurer le composant FXCM ne demande que trois étapes : créer un client WebSocket, attacher le composant API et configurer tes identifiants. Une fois le client activé, le composant gère automatiquement le handshake socket.io et l'authentification 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éthodes de données de marché
Les méthodes de données de marché te permettent de découvrir les instruments disponibles, de t'abonner aux mises à jour de prix en temps réel et de gérer tes abonnements actifs.
| Méthode | Description |
|---|---|
GetSymbols |
Renvoie une liste de tous les symboles de trading disponibles (paires de devises, CFD, etc.) |
SubscribeMarketData |
S'abonne aux mises à jour de prix en temps réel pour un symbole donné |
UnSubscribeMarketData |
Arrête de recevoir les mises à jour de prix en temps réel pour un symbole donné |
UpdateSubscriptions |
Filtre la table d'offres pour n'afficher que les symboles auxquels tu es actuellement abonné |
S'abonner aux données de marché
Une fois connecté, appelle GetSymbols pour découvrir les instruments disponibles, puis abonne-toi à n'importe quel symbole pour le streaming des prix bid/ask :
// 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éthodes de tables de trading
FXCM organise les données de compte en tables de trading. Tu peux t'abonner pour recevoir des mises à jour continues à mesure que l'état change, ou demander un snapshot ponctuel de l'état actuel.
Tables de trading disponibles
| Nom de la table | Description |
|---|---|
| Offer | Prix bid/ask actuels, high/low et infos de session de trading pour chaque instrument |
| OpenPosition | Toutes les positions actuellement ouvertes avec P&L, marge et prix d'entrée |
| ClosedPosition | Positions récemment clôturées avec P&L réalisé |
| Order | Ordres d'entrée en attente et leurs paramètres |
| Summary | Résumé agrégé des positions par instrument |
| LeverageProfile | Paramètres de levier par instrument et compte |
| Account | Solde de compte, equity, marge utilisée et marge utilisable |
| Properties | Paramètres au niveau du compte et propriétés de trading |
Méthodes d'abonnement et de snapshot
| Méthode | Description |
|---|---|
SubscribeTradingTables |
S'abonne aux mises à jour continues pour une table de trading spécifiée |
UnSubscribeTradingTables |
Arrête de recevoir les mises à jour pour une table de trading spécifiée |
SnapshotTradingTables |
Récupère un snapshot ponctuel de l'état actuel d'une table 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');
Ordres de trading
La méthode TradingOrder fournit une interface unifiée pour placer, modifier et clôturer des ordres via l'API HTTP FXCM. Toutes les opérations sur les ordres sont effectuées via cette seule méthode, différents paramètres contrôlant l'action prise.
| Méthode | Description |
|---|---|
TradingOrder |
Place un nouvel ordre, modifie un ordre existant ou clôture une position ouverte selon les paramètres fournis |
TradingOrder envoie des requêtes via HTTP. Confirme toujours les résultats d'exécution en vérifiant les tables de trading (OpenPosition, Order) pour l'état mis à jour après avoir soumis un ordre.
Données historiques
La méthode GetHistoricalData récupère les données de chandeliers OHLC (Open, High, Low, Close) pour tout instrument disponible à un intervalle de temps spécifié. C'est essentiel pour backtester des stratégies, construire des graphiques et effectuer de l'analyse technique.
| Méthode | Paramètres | Description |
|---|---|---|
GetHistoricalData |
Symbol, TimeFrame, NumPeriods | Récupère les données de chandeliers pour un instrument donné à l'intervalle de temps spécifié et le nombre de périodes |
Intervalles de temps pris en charge
| Valeur | Description |
|---|---|
m1 |
Chandeliers de 1 minute |
m5 |
Chandeliers de 5 minutes |
m15 |
Chandeliers de 15 minutes |
m30 |
Chandeliers de 30 minutes |
H1 |
Chandeliers de 1 heure |
H4 |
Chandeliers de 4 heures |
D1 |
Chandeliers journaliers |
W1 |
Chandeliers hebdomadaires |
M1 |
Chandeliers mensuels |
// 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));
Exemple de code complet
L'exemple suivant illustre un workflow complet : se connecter à l'environnement démo FXCM, récupérer les symboles disponibles, s'abonner aux données de marché en temps réel et récupérer des données de chandeliers historiques.
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;
Notes et bonnes pratiques
Environnement démo vs en direct
Développe et teste toujours avec FXCM.Demo := True. L'environnement démo fournit la même surface d'API et le même format de données que l'environnement en direct, mais utilise des fonds virtuels. Passe à FXCM.Demo := False uniquement après des tests approfondis.
Gestion des connexions
La connexion socket.io sous-jacente envoie des heartbeats périodiques pour maintenir la session en vie. Si la connexion tombe, le composant tentera de se reconnecter automatiquement. Surveille les événements OnDisconnect et OnError du client WebSocket pour gérer les interruptions réseau gracieusement.
Limites de débit
FXCM applique des limites de débit sur les requêtes HTTP. Évite d'appeler des méthodes comme GetHistoricalData ou TradingOrder dans des boucles serrées. Pour les données en temps réel, préfère les abonnements WebSocket au polling HTTP.
SubscribeMarketData pour les prix en direct avec SubscribeTradingTables('OpenPosition') et SubscribeTradingTables('Account') pour construire un tableau de bord de trading complet en temps réel qui affiche à la fois les conditions de marché et l'état de ton portefeuille.
