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
- Konfiguration
- Erste Schritte
- Marktdaten-Methoden
- Trading-Tabellen-Methoden
- Trading-Orders
- Historische Daten
- Vollständiges Code-Beispiel
- Hinweise und Best Practices
Ü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 |
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 |
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.
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.
