Mise à jour de l'API FXCM dans sgcWebSockets

· Fonctionnalités
Intégration de l'API de trading forex FXCM en Delphi

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

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
Note : Pour obtenir ton jeton d'accès, connecte-toi à FXCM Trading Station Web, navigue vers les paramètres de ton compte et génère un nouveau jeton API. Commence toujours le développement avec 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
Note : La méthode 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.

Astuce : Combine 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.