FXCM API Update sgcWebSockets

· Features
FXCM Forex Trading API-Integration in Delphi

Die FXCM-API bietet programmatischen Zugriff auf einen der weltweit größten Retail-Forex-Broker und ermöglicht Echtzeit-Marktdaten-Streaming, Order-Ausführung und den Abruf historischer Candles. Die Komponente TsgcWSAPI_FXCM für Delphi kapselt die WebSocket-(socket.io-) und HTTP-Schnittstellen von FXCM in einer einzigen, einfach zu nutzenden Klasse, sodass du automatisierte Trading-Systeme, Markt-Scanner und Portfolio-Dashboards bauen kannst, ohne dich mit Low-Level-Protokoll-Details herumzuschlagen.

Inhaltsverzeichnis

Überblick und Architektur

FXCM stellt seine Trading-Plattform über ein Hybridprotokoll bereit, das eine persistente WebSocket-Verbindung (auf Basis von socket.io) für Echtzeit-Streaming mit Standard-HTTP-Endpunkten für Request/Response-Operationen kombiniert. Die Komponente TsgcWSAPI_FXCM abstrahiert beide Transportschichten hinter einer einheitlichen Delphi-Schnittstelle, sodass du immer mit einer einzigen Komponente arbeitest – unabhängig davon, ob der zugrunde liegende Aufruf WebSocket oder HTTP verwendet.

Die API unterstützt drei große Funktionsbereiche:

Bereich Beschreibung Transport
Marktdaten Echtzeit-Preis-Streaming und Symbol-Discovery WebSocket + HTTP
Trading-Tabellen Kontostand, Positionen, Orders und Angebote WebSocket + HTTP
Order-Ausführung Trading-Orders platzieren, ändern und schließen HTTP

Konfiguration

Bevor du dich mit der FXCM-API verbindest, musst du zwei zentrale Eigenschaften an der Komponente TsgcWSAPI_FXCM konfigurieren:

Eigenschaft Typ Beschreibung
FXCM.AccessToken String Dein API-Access-Token, das du in FXCM Trading Station Web erzeugst
FXCM.Demo Boolean Auf True setzen für die Demo-Umgebung, False für Live-Trading
Hinweis: Um dein Access-Token zu beziehen, melde dich in FXCM Trading Station Web an, gehe zu den Kontoeinstellungen und erzeuge ein neues API-Token. Beginne die Entwicklung immer mit FXCM.Demo := True, damit du keine echten Trades platzierst.

Erste Schritte

Das Einrichten der FXCM-Komponente erfordert nur drei Schritte: einen WebSocket-Client erstellen, die API-Komponente anhängen und die Zugangsdaten konfigurieren. Sobald der Client aktiviert ist, übernimmt die Komponente den socket.io-Handshake und die HTTP-Bearer-Token-Authentifizierung automatisch.

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;

Marktdaten-Methoden

Über die Marktdaten-Methoden findest du verfügbare Instrumente, abonnierst Echtzeit-Preis-Updates und verwaltest deine aktiven Abonnements.

Methode Beschreibung
GetSymbols Gibt eine Liste aller verfügbaren Trading-Symbole zurück (Währungspaare, CFDs usw.)
SubscribeMarketData Abonniert Echtzeit-Preis-Updates für ein bestimmtes Symbol
UnSubscribeMarketData Stoppt den Empfang von Echtzeit-Preis-Updates für ein bestimmtes Symbol
UpdateSubscriptions Filtert die Offer-Tabelle, sodass nur die aktuell abonnierten Symbole angezeigt werden

Marktdaten abonnieren

Sobald die Verbindung steht, rufe GetSymbols auf, um verfügbare Instrumente zu entdecken, und abonniere dann ein beliebiges Symbol für Streaming-Bid-/Ask-Preise:

// Alle verfügbaren Trading-Symbole abrufen
ShowMessage(oFXCM.GetSymbols);
// Echtzeit-Preis-Updates für EUR/USD abonnieren
oFXCM.SubscribeMarketData('EUR/USD');
// Weitere Paare abonnieren
oFXCM.SubscribeMarketData('GBP/USD');
oFXCM.SubscribeMarketData('USD/JPY');
// Offer-Tabelle so filtern, dass nur abonnierte Symbole erscheinen
oFXCM.UpdateSubscriptions;

Trading-Tabellen-Methoden

FXCM organisiert die Kontodaten in Trading-Tabellen. Du kannst kontinuierliche Updates abonnieren, sobald sich der Zustand ändert, oder einen einmaligen Snapshot des aktuellen Zustands anfordern.

Verfügbare Trading-Tabellen

Tabellenname Beschreibung
Offer Aktuelle Bid-/Ask-Preise, Hoch/Tief und Trading-Session-Infos pro Instrument
OpenPosition Alle derzeit offenen Positionen mit P&L, Margin und Eintrittspreisen
ClosedPosition Kürzlich geschlossene Positionen mit realisiertem P&L
Order Ausstehende Entry-Orders und ihre Parameter
Summary Aggregierte Positionsübersicht pro Instrument
LeverageProfile Hebel-Einstellungen pro Instrument und Konto
Account Kontostand, Eigenkapital, genutzte Margin und verfügbare Margin
Properties Einstellungen auf Kontoebene und Trading-Eigenschaften

Abonnement- und Snapshot-Methoden

Methode Beschreibung
SubscribeTradingTables Abonniert kontinuierliche Updates für eine bestimmte Trading-Tabelle
UnSubscribeTradingTables Stoppt den Empfang von Updates für eine bestimmte Trading-Tabelle
SnapshotTradingTables Holt einen einmaligen Snapshot des aktuellen Zustands einer Trading-Tabelle
// Echtzeit-Updates für offene Positionen abonnieren
oFXCM.SubscribeTradingTables('OpenPosition');
// Updates zum Kontostand abonnieren
oFXCM.SubscribeTradingTables('Account');
// Einmaligen Snapshot aller ausstehenden Orders holen
ShowMessage(oFXCM.SnapshotTradingTables('Order'));
// Positions-Updates beenden
oFXCM.UnSubscribeTradingTables('OpenPosition');

Trading-Orders

Die Methode TradingOrder bietet eine vereinheitlichte Schnittstelle, um Orders über die FXCM-HTTP-API zu platzieren, zu ändern und zu schließen. Alle Order-Operationen laufen über diese eine Methode; die ausgeführte Aktion wird über die Parameter gesteuert.

Methode Beschreibung
TradingOrder Platziert eine neue Order, ändert eine bestehende Order oder schließt eine offene Position – abhängig von den übergebenen Parametern
Hinweis: Die Methode TradingOrder sendet Requests über HTTP. Bestätige die Ausführung immer, indem du nach dem Absenden einer Order die Trading-Tabellen (OpenPosition, Order) auf den aktualisierten Zustand prüfst.

Historische Daten

Die Methode GetHistoricalData liefert OHLC-(Open-, High-, Low-, Close-)Candle-Daten für jedes verfügbare Instrument in einem angegebenen Zeitrahmen. Das ist unverzichtbar für das Backtesting von Strategien, das Erstellen von Charts und die technische Analyse.

Methode Parameters Beschreibung
GetHistoricalData Symbol, TimeFrame, NumPeriods Holt Candle-Daten für ein Instrument im angegebenen Zeitrahmen und der gewünschten Anzahl an Perioden

Unterstützte Zeitrahmen

Wert Beschreibung
m1 1-Minuten-Candles
m5 5-Minuten-Candles
m15 15-Minuten-Candles
m30 30-Minuten-Candles
H1 1-Stunden-Candles
H4 4-Stunden-Candles
D1 Tages-Candles
W1 Wochen-Candles
M1 Monats-Candles
// Die letzten 100 Fünf-Minuten-Candles für EUR/USD holen
ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
// Die letzten 50 Tages-Candles für GBP/USD holen
ShowMessage(oFXCM.GetHistoricalData('GBP/USD', 'D1', 50));

Vollständiges Code-Beispiel

Das folgende Beispiel zeigt einen kompletten Ablauf: Verbindung zur FXCM-Demo-Umgebung, Abrufen der verfügbaren Symbole, Abonnement von Echtzeit-Marktdaten und Abruf historischer Candle-Daten.

var
  oClient: TsgcWebSocketClient;
  oFXCM: TsgcWSAPI_FXCM;
begin
  // WebSocket-Client erstellen und konfigurieren
  oClient := TsgcWebSocketClient.Create(nil);
  oFXCM := TsgcWSAPI_FXCM.Create(nil);
  oFXCM.Client := oClient;
  // FXCM-Zugangsdaten konfigurieren
  oFXCM.FXCM.AccessToken := 'your_access_token';
  oFXCM.FXCM.Demo := True;
  // Verbindung zu FXCM aufbauen
  oClient.Active := True;
  // Alle verfügbaren Symbole abrufen
  ShowMessage(oFXCM.GetSymbols);
  // Echtzeit-Marktdaten für EUR/USD abonnieren
  oFXCM.SubscribeMarketData('EUR/USD');
  // Die letzten 100 Fünf-Minuten-Candles holen
  ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
end;

Hinweise und Best Practices

Demo- vs. Live-Umgebung

Entwickle und teste immer mit FXCM.Demo := True. Die Demo-Umgebung bietet dieselbe API-Oberfläche und dasselbe Datenformat wie die Live-Umgebung, nutzt aber virtuelles Geld. Wechsle erst nach gründlichem Test auf FXCM.Demo := False.

Verbindungsmanagement

Die zugrunde liegende socket.io-Verbindung sendet regelmäßig Heartbeats, um die Session aktiv zu halten. Bricht die Verbindung ab, versucht die Komponente automatisch, eine neue aufzubauen. Beobachte die Ereignisse OnDisconnect und OnError des WebSocket-Clients, um Netzwerkunterbrechungen sauber zu behandeln.

Rate Limits

FXCM erzwingt Rate Limits auf HTTP-Anfragen. Vermeide es, Methoden wie GetHistoricalData oder TradingOrder in engen Schleifen aufzurufen. Bevorzuge für Echtzeitdaten WebSocket-Abonnements gegenüber HTTP-Polling.

Tipp: Kombiniere SubscribeMarketData für Live-Preise mit SubscribeTradingTables('OpenPosition') und SubscribeTradingTables('Account'), um ein vollständiges Echtzeit-Trading-Dashboard zu bauen, das sowohl Marktbedingungen als auch deinen Portfoliozustand zeigt.