FXCM API-update sgcWebSockets

· Componenten
FXCM Forex Trading-API-integratie in Delphi

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

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:

GebiedBeschrijvingTransport
MarktdataRealtime-prijs-streaming en symbol-discoveryWebSocket + HTTP
Trading-tablesAccountstatus, posities, orders en offersWebSocket + HTTP
Order-uitvoeringOrders plaatsen, wijzigen en sluitenHTTP

Configuratie

Voordat je verbinding maakt met de FXCM-API, moet je twee essentiële eigenschappen configureren op het TsgcWSAPI_FXCM-component:

EigenschapTypeBeschrijving
FXCM.AccessTokenStringJe API-access-token, verkregen via FXCM Trading Station Web
FXCM.DemoBooleanZet op True voor de demo-omgeving, False voor live trading
Opmerking: Om je access-token te krijgen, log je in op FXCM Trading Station Web, ga je naar je accountinstellingen en genereer je een nieuw API-token. Begin altijd met ontwikkeling met 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.

MethodeBeschrijving
GetSymbolsRetourneert een lijst van alle beschikbare handelssymbolen (currency pairs, CFDs, enz.)
SubscribeMarketDataAbonneert op realtime-prijsupdates voor een bepaald symbool
UnSubscribeMarketDataStopt het ontvangen van realtime-prijsupdates voor een bepaald symbool
UpdateSubscriptionsFiltert 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

TabelnaamBeschrijving
OfferHuidige bid-/ask-prijzen, high/low en handelssessie-info per instrument
OpenPositionAlle momenteel open posities met P&L, marge en instapprijzen
ClosedPositionRecent gesloten posities met gerealiseerde P&L
OrderWachtende entry-orders en hun parameters
SummaryGeaggregeerd positie-overzicht per instrument
LeverageProfileLeverage-instellingen per instrument en account
AccountAccountsaldo, equity, gebruikte marge en bruikbare marge
PropertiesInstellingen op accountniveau en trading-eigenschappen

Abonnements- en snapshot-methoden

MethodeBeschrijving
SubscribeTradingTablesAbonneert op continue updates voor een opgegeven trading-table
UnSubscribeTradingTablesStopt het ontvangen van updates voor een opgegeven trading-table
SnapshotTradingTablesHaalt 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.

MethodeBeschrijving
TradingOrderPlaatst een nieuwe order, wijzigt een bestaande order of sluit een open positie, afhankelijk van de meegegeven parameters
Opmerking: De 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.

MethodeParametersBeschrijving
GetHistoricalDataSymbol, TimeFrame, NumPeriodsHaalt candle-data op voor een gegeven instrument op het opgegeven tijdsframe en aantal periodes

Ondersteunde tijdsframes

WaardeBeschrijving
m1Candles van 1 minuut
m5Candles van 5 minuten
m15Candles van 15 minuten
m30Candles van 30 minuten
H1Candles van 1 uur
H4Candles van 4 uur
D1Dag-candles
W1Week-candles
M1Maand-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.

Tip: Combineer 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.