De FXCM-API biedt programmatische toegang tot een van 's werelds grootste retail-forexbrokers, en maakt realtime-marktdata-streaming, orderuitvoering en historische candle-ophaling mogelijk. Het TsgcWSAPI_FXCM-component voor Delphi verpakt de WebSocket (socket.io)- en HTTP-interfaces van FXCM in één eenvoudig te gebruiken klasse, zodat je geautomatiseerde handelssystemen, marktscanners en portfolio-dashboards kunt bouwen zonder je met low-level-protocoldetails bezig te houden.
Inhoudsopgave
- Overzicht en architectuur
- Configuratie
- Aan de slag
- Marktdata-methoden
- Trading-table-methoden
- Trading-orders
- Historische data
- Compleet code-voorbeeld
- Opmerkingen en best practices
Overzicht en architectuur
FXCM biedt zijn handelsplatform aan via een hybride protocol dat een persistente WebSocket-verbinding (op basis van socket.io) voor realtime-streaming combineert met standaard HTTP-endpoints voor request/response-operaties. Het TsgcWSAPI_FXCM-component abstraheert beide transportlagen achter een verenigde Delphi-interface, zodat je met één component werkt ongeacht of de onderliggende aanroep WebSocket of HTTP gebruikt.
De API ondersteunt drie belangrijke functionele gebieden:
| Gebied | Beschrijving | Transport |
|---|---|---|
| Marktdata | Realtime-prijs-streaming en symbol-discovery | WebSocket + HTTP |
| Trading-tables | Accountstatus, posities, orders en offers | WebSocket + HTTP |
| Order-uitvoering | Orders plaatsen, wijzigen en sluiten | HTTP |
Configuratie
Voordat je verbinding maakt met de FXCM-API, moet je twee essentiële eigenschappen configureren op het TsgcWSAPI_FXCM-component:
| Eigenschap | Type | Beschrijving |
|---|---|---|
FXCM.AccessToken | String | Je API-access-token, verkregen via FXCM Trading Station Web |
FXCM.Demo | Boolean | Zet op True voor de demo-omgeving, False voor live trading |
FXCM.Demo := True om te voorkomen dat er echte trades worden geplaatst.
Aan de slag
Het opzetten van het FXCM-component vraagt slechts drie stappen: maak een WebSocket-client, koppel het API-component eraan en configureer je credentials. Zodra de client wordt geactiveerd, regelt het component automatisch de socket.io-handshake en de HTTP-bearer-token-authenticatie.
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;
Marktdata-methoden
Met de marktdata-methoden kun je beschikbare instrumenten ontdekken, je abonneren op realtime-prijsupdates en je actieve abonnementen beheren.
| Methode | Beschrijving |
|---|---|
GetSymbols | Retourneert een lijst van alle beschikbare handelssymbolen (currency pairs, CFDs, enz.) |
SubscribeMarketData | Abonneert op realtime-prijsupdates voor een bepaald symbool |
UnSubscribeMarketData | Stopt het ontvangen van realtime-prijsupdates voor een bepaald symbool |
UpdateSubscriptions | Filtert de offer-tabel zodat alleen de symbolen waarop je geabonneerd bent worden getoond |
Abonneren op marktdata
Eenmaal verbonden roep je GetSymbols aan om beschikbare instrumenten te ontdekken en abonneer je je daarna op elk symbool voor streaming-bid-/ask-prijzen:
// 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;
Trading-table-methoden
FXCM organiseert account-data in trading-tables. Je kunt je abonneren om continue updates te ontvangen wanneer de status verandert, of een eenmalige snapshot van de huidige status opvragen.
Beschikbare trading-tables
| Tabelnaam | Beschrijving |
|---|---|
| Offer | Huidige bid-/ask-prijzen, high/low en handelssessie-info per instrument |
| OpenPosition | Alle momenteel open posities met P&L, marge en instapprijzen |
| ClosedPosition | Recent gesloten posities met gerealiseerde P&L |
| Order | Wachtende entry-orders en hun parameters |
| Summary | Geaggregeerd positie-overzicht per instrument |
| LeverageProfile | Leverage-instellingen per instrument en account |
| Account | Accountsaldo, equity, gebruikte marge en bruikbare marge |
| Properties | Instellingen op accountniveau en trading-eigenschappen |
Abonnements- en snapshot-methoden
| Methode | Beschrijving |
|---|---|
SubscribeTradingTables | Abonneert op continue updates voor een opgegeven trading-table |
UnSubscribeTradingTables | Stopt het ontvangen van updates voor een opgegeven trading-table |
SnapshotTradingTables | Haalt een eenmalige snapshot op van de huidige status van een trading-table |
// 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');
Trading-orders
De TradingOrder-methode biedt een verenigde interface voor het plaatsen, wijzigen en sluiten van orders via de FXCM HTTP-API. Alle orderoperaties worden uitgevoerd via deze ene methode, waarbij verschillende parameters de te ondernemen actie sturen.
| Methode | Beschrijving |
|---|---|
TradingOrder | Plaatst een nieuwe order, wijzigt een bestaande order of sluit een open positie, afhankelijk van de meegegeven parameters |
TradingOrder-methode verstuurt requests via HTTP. Bevestig uitvoeringsresultaten altijd door de trading-tables (OpenPosition, Order) te raadplegen voor bijgewerkte status na het indienen van een order.
Historische data
De GetHistoricalData-methode haalt OHLC (Open, High, Low, Close)-candle-data op voor elk beschikbaar instrument op een opgegeven tijdsframe. Dit is essentieel voor het backtesten van strategieën, het bouwen van grafieken en het uitvoeren van technische analyse.
| Methode | Parameters | Beschrijving |
|---|---|---|
GetHistoricalData | Symbol, TimeFrame, NumPeriods | Haalt candle-data op voor een gegeven instrument op het opgegeven tijdsframe en aantal periodes |
Ondersteunde tijdsframes
| Waarde | Beschrijving |
|---|---|
m1 | Candles van 1 minuut |
m5 | Candles van 5 minuten |
m15 | Candles van 15 minuten |
m30 | Candles van 30 minuten |
H1 | Candles van 1 uur |
H4 | Candles van 4 uur |
D1 | Dag-candles |
W1 | Week-candles |
M1 | Maand-candles |
// 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));
Compleet code-voorbeeld
Het volgende voorbeeld demonstreert een complete workflow: verbinding maken met de FXCM-demo-omgeving, beschikbare symbolen ophalen, je abonneren op realtime-marktdata en historische candle-data ophalen.
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;
Opmerkingen en best practices
Demo- versus live-omgeving
Ontwikkel en test altijd met FXCM.Demo := True. De demo-omgeving biedt dezelfde API-oppervlakte en hetzelfde dataformaat als de live-omgeving, maar gebruikt virtueel geld. Schakel pas naar FXCM.Demo := False na grondige testing.
Verbindingsbeheer
De onderliggende socket.io-verbinding stuurt periodieke heartbeats om de sessie levend te houden. Als de verbinding wegvalt, probeert het component automatisch opnieuw verbinding te maken. Monitor de events OnDisconnect en OnError van de WebSocket-client om netwerk-onderbrekingen elegant af te handelen.
Rate-limits
FXCM hanteert rate-limits op HTTP-requests. Vermijd het aanroepen van methoden zoals GetHistoricalData of TradingOrder in strakke loops. Geef voor realtime-data de voorkeur aan WebSocket-abonnementen boven HTTP-polling.
SubscribeMarketData voor live-prijzen met SubscribeTradingTables('OpenPosition') en SubscribeTradingTables('Account') om een compleet realtime-handelsdashboard te bouwen dat zowel marktomstandigheden als de status van je portfolio laat zien.
