FXCM API, dünyanın en büyük bireysel forex aracı kurumlarından birine programatik erişim sağlar; gerçek zamanlı piyasa verisi akışını, sipariş yürütmeyi ve geçmiş mum (candle) verilerinin alınmasını mümkün kılar. Delphi için TsgcWSAPI_FXCM bileşeni, FXCM'in WebSocket (socket.io) ve HTTP arayüzlerini tek, kullanımı kolay bir sınıfa sarar; böylece alt düzey protokol ayrıntılarıyla uğraşmadan otomatik işlem sistemleri, piyasa tarayıcıları ve portföy gösterge panoları oluşturabilirsiniz.
İçindekiler
- Genel Bakış ve Mimari
- Yapılandırma
- Başlarken
- Piyasa Verisi Metotları
- İşlem Tablosu Metotları
- İşlem Siparişleri
- Geçmiş Veriler
- Tam Kod Örneği
- Notlar ve En İyi Uygulamalar
Genel Bakış ve Mimari
FXCM, işlem platformunu, gerçek zamanlı akış için kalıcı bir WebSocket bağlantısını (socket.io üzerine kurulu) istek/yanıt işlemleri için standart HTTP uç noktalarıyla birleştiren hibrit bir protokol aracılığıyla sunar. TsgcWSAPI_FXCM bileşeni, her iki taşıma katmanını da birleşik bir Delphi arayüzünün arkasında soyutlar; böylece alttaki çağrının WebSocket mi yoksa HTTP mi kullandığından bağımsız olarak tek bir bileşenle etkileşim kurarsınız.
API üç ana işlevsel alanı destekler:
| Alan | Açıklama | Taşıma |
|---|---|---|
| Piyasa Verileri | Gerçek zamanlı fiyat akışı ve sembol keşfi | WebSocket + HTTP |
| İşlem Tabloları | Hesap durumu, pozisyonlar, siparişler ve teklifler | WebSocket + HTTP |
| Sipariş Yürütme | İşlem siparişlerini verme, değiştirme ve kapatma | HTTP |
Yapılandırma
FXCM API'sine bağlanmadan önce, TsgcWSAPI_FXCM bileşeninde iki temel özelliği yapılandırmanız gerekir:
| Özellik | Tür | Açıklama |
|---|---|---|
FXCM.AccessToken |
String | FXCM Trading Station Web'den edindiğiniz API erişim belirteciniz |
FXCM.Demo |
Boolean | Demo ortamı için True, canlı işlemler için False olarak ayarlayın |
FXCM.Demo := True ile başlayın.
Başlarken
FXCM bileşenini kurmak yalnızca üç adım gerektirir: bir WebSocket istemcisi oluşturun, API bileşenini ekleyin ve kimlik bilgilerinizi yapılandırın. İstemci etkinleştirildiğinde, bileşen socket.io el sıkışmasını ve HTTP bearer-token kimlik doğrulamasını otomatik olarak halleder.
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;
Piyasa Verisi Metotları
Piyasa verisi metotları, mevcut enstrümanları keşfetmenize, gerçek zamanlı fiyat güncellemelerine abone olmanıza ve etkin aboneliklerinizi yönetmenize olanak tanır.
| Metot | Açıklama |
|---|---|
GetSymbols |
Mevcut tüm işlem sembollerinin (döviz çiftleri, CFD'ler vb.) bir listesini döndürür |
SubscribeMarketData |
Belirli bir sembol için gerçek zamanlı fiyat güncellemelerine abone olur |
UnSubscribeMarketData |
Belirli bir sembol için gerçek zamanlı fiyat güncellemeleri almayı durdurur |
UpdateSubscriptions |
Teklif tablosunu yalnızca şu anda abone olduğunuz sembolleri görüntüleyecek şekilde filtreler |
Piyasa Verilerine Abone Olma
Bağlandıktan sonra, mevcut enstrümanları keşfetmek için GetSymbols çağırın, ardından alış/satış fiyatlarının akışı için herhangi bir sembole abone olun:
// 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;
İşlem Tablosu Metotları
FXCM, hesap verilerini işlem tablolarında düzenler. Durum değiştikçe sürekli güncellemeler almak için abone olabilir veya mevcut durumun tek seferlik bir anlık görüntüsünü isteyebilirsiniz.
Mevcut İşlem Tabloları
| Tablo Adı | Açıklama |
|---|---|
| Offer | Her enstrüman için mevcut alış/satış fiyatları, en yüksek/en düşük ve işlem seansı bilgileri |
| OpenPosition | Kâr/zarar, teminat ve giriş fiyatlarıyla birlikte şu anda açık olan tüm pozisyonlar |
| ClosedPosition | Gerçekleşen kâr/zarar ile yakın zamanda kapatılan pozisyonlar |
| Order | Bekleyen giriş siparişleri ve parametreleri |
| Summary | Enstrüman başına toplu pozisyon özeti |
| LeverageProfile | Enstrüman ve hesap başına kaldıraç ayarları |
| Account | Hesap bakiyesi, özkaynak, kullanılan teminat ve kullanılabilir teminat |
| Properties | Hesap düzeyinde ayarlar ve işlem özellikleri |
Abonelik ve Anlık Görüntü Metotları
| Metot | Açıklama |
|---|---|
SubscribeTradingTables |
Belirtilen bir işlem tablosu için sürekli güncellemelere abone olur |
UnSubscribeTradingTables |
Belirtilen bir işlem tablosu için güncelleme almayı durdurur |
SnapshotTradingTables |
Bir işlem tablosunun mevcut durumunun tek seferlik bir anlık görüntüsünü alır |
// 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');
İşlem Siparişleri
TradingOrder metodu, FXCM HTTP API aracılığıyla sipariş verme, değiştirme ve kapatma için birleşik bir arayüz sağlar. Tüm sipariş işlemleri bu tek metot aracılığıyla gerçekleştirilir; alınan eylemi farklı parametreler denetler.
| Metot | Açıklama |
|---|---|
TradingOrder |
Sağlanan parametrelere bağlı olarak yeni bir sipariş verir, mevcut bir siparişi değiştirir veya açık bir pozisyonu kapatır |
TradingOrder metodu istekleri HTTP aracılığıyla gönderir. Bir sipariş gönderdikten sonra, güncellenmiş durum için işlem tablolarını (OpenPosition, Order) kontrol ederek yürütme sonuçlarını her zaman doğrulayın.
Geçmiş Veriler
GetHistoricalData metodu, belirtilen bir zaman diliminde mevcut herhangi bir enstrüman için OHLC (Açılış, En Yüksek, En Düşük, Kapanış) mum verilerini alır. Bu, strateji geriye dönük testleri, grafik oluşturma ve teknik analiz yapma için temel öneme sahiptir.
| Metot | Parametreler | Açıklama |
|---|---|---|
GetHistoricalData |
Symbol, TimeFrame, NumPeriods | Belirli bir enstrüman için belirtilen zaman diliminde ve dönem sayısında mum verilerini alır |
Desteklenen Zaman Dilimleri
| Değer | Açıklama |
|---|---|
m1 |
1 dakikalık mumlar |
m5 |
5 dakikalık mumlar |
m15 |
15 dakikalık mumlar |
m30 |
30 dakikalık mumlar |
H1 |
1 saatlik mumlar |
H4 |
4 saatlik mumlar |
D1 |
Günlük mumlar |
W1 |
Haftalık mumlar |
M1 |
Aylık mumlar |
// 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));
Tam Kod Örneği
Aşağıdaki örnek, eksiksiz bir iş akışını gösterir: FXCM demo ortamına bağlanma, mevcut sembolleri alma, gerçek zamanlı piyasa verilerine abone olma ve geçmiş mum verilerini getirme.
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;
Notlar ve En İyi Uygulamalar
Demo ve Canlı Ortam Karşılaştırması
Her zaman FXCM.Demo := True ile geliştirin ve test edin. Demo ortamı, canlı ortamla aynı API yüzeyini ve veri biçimini sağlar ancak sanal fon kullanır. FXCM.Demo := False'a yalnızca kapsamlı testten sonra geçin.
Bağlantı Yönetimi
Alttaki socket.io bağlantısı, oturumu canlı tutmak için periyodik heartbeat'ler gönderir. Bağlantı kesilirse, bileşen otomatik olarak yeniden bağlanmayı dener. Ağ kesintilerini düzgün bir şekilde ele almak için WebSocket istemcisinin OnDisconnect ve OnError olaylarını izleyin.
Hız Sınırları
FXCM, HTTP istekleri üzerinde hız sınırları uygular. GetHistoricalData veya TradingOrder gibi metotları sıkı döngülerde çağırmaktan kaçının. Gerçek zamanlı veriler için, HTTP ile yoklama yapmak yerine WebSocket aboneliklerini tercih edin.
SubscribeMarketData'yı SubscribeTradingTables('OpenPosition') ve SubscribeTradingTables('Account') ile birleştirin.
