← Makalelere geri dön
June 3, 2025
5 dakikalık okuma

CCXT: WebSocket Emir Defteri Metodları Gerçekte Nasıl Çalışır

CCXT: WebSocket Emir Defteri Metodları Gerçekte Nasıl Çalışır
#CCXT
#WebSocket
#emir defteri
#borsalar
#API
#trading
#kripto para

Merhaba! Bugün işlem sistemi geliştiricileri için en önemli konulardan birine dalacağız — CCXT'de emir defterleri almak için WebSocket metodlarının nasıl çalıştığına. "Metot belgede var ama pratikte çalışmıyor, neden?" veya "100'den fazla işlem çiftini izlemek için hangi metodu seçmeliyim?" gibi sorularla hiç karşılaştıysanız, bu makale tam size göre.

Giriş: Bu Neden Önemli

Piyasa verisi toplamak için CCXT ile çalışırken pek çok kişi kritik sorularla karşılaşır:

  • Hangi WebSocket emir defteri metodları farklı borsalarda gerçekten destekleniyor?
  • Metodlar trafik hacmi ve veri yapısı açısından nasıl farklılaşıyor?
  • Otomatik testler "✓" gösterirken metot pratikte neden çalışmayabilir?

Bu makalede — popüler metodların, özelliklerinin ve 75'ten fazla borsadaki gerçek durumun ayrıntılı analizi.

Temel Metodlara Genel Bakış

WebSocket emir defteri metodlarına genel bakış Emir defteri verisi için dört ana WebSocket metodu: tekli abonelik, toplu abonelik, kitabın tepesini izleme ve tek seferlik anlık görüntü

Modern borsa API'leri, WebSocket üzerinden emir defteri verisi almanın birkaç yolunu sunar. Her birini inceleyelim:

1. watchOrderBook - Klasik Yaklaşım

Bu, tek bir işlem çifti için emir defteri güncellemelerine abone olmak üzere kullanılan ana metoddur.

Temel özellikler:

  • Amaç: Bir çift için emir defteri güncellemelerine abone ol
  • Bağlantı türü: Kalıcı WebSocket bağlantısı
  • Veri: Tam emir defteri (genellikle her taraf için 100–1000 seviye)
  • Trafik: Orta ile yüksek arasında, güncelleme sıklığına ve derinliğe bağlı

Kullanım örneği:

const exchange = new ccxt.pro.binance();
const orderbook = await exchange.watchOrderBook('BTC/USDT');
console.log(orderbook);

2. watchOrderBookForSymbols - Toplu Abonelik

Bu metot, borsa destekliyorsa aynı anda birden fazla işlem çiftine abone olmayı sağlar.

Temel özellikler:

  • Amaç: Aynı anda birden fazla çifte abone ol
  • Bağlantı türü: Kalıcı WebSocket, çoğunlukla birden fazla çift için tek bağlantı
  • Veri: Her çift için — tam emir defteri
  • Trafik: Çok sayıda çiftle çok yüksek (100–1000 seviye × 2 taraf × çift sayısı)

Örnek yanıt:

{
  "BTC/USDT": {
    "bids": [[50000.1, 1.5], [50000.0, 2.1]],
    "asks": [[50001.0, 1.2], [50001.1, 0.8]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  },
  "ETH/USDT": {
    "bids": [[3000.5, 10.2], [3000.4, 5.7]],
    "asks": [[3001.0, 8.3], [3001.1, 12.1]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  }
}

Önemli uyarı: Gerçekte tüm borsalarda desteklenmez. Bazen metot API'de mevcut olsa da uygulanmamış olabilir.

3. watchBidsAsks - Optimize Edilmiş İzleme

Birden fazla işlem çiftinde en iyi fiyatları takip etmenin en ekonomik yolu.

Temel özellikler:

  • Amaç: Birden fazla çift için yalnızca en iyi fiyatlara (kitabın tepesi) abone ol
  • Bağlantı türü: Kalıcı WebSocket, çoğunlukla tüm çiftler için tek bağlantı
  • Veri: Her taraf için yalnızca bir fiyat (alış/satış)
  • Trafik: Minimum, çok sayıda çifti izlemek için uygun

Örnek yanıt:

{
  "BTC/USDT": {
    "bids": [[50000.1, 1.5]],
    "asks": [[50001.0, 1.2]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  },
  "ETH/USDT": {
    "bids": [[3000.5, 10.2]],
    "asks": [[3001.0, 8.3]],
    "timestamp": 1717398000000,
    "datetime": "2025-06-03T12:00:00Z"
  }
}

Özellik: Genellikle ticker uç noktası aracılığıyla uygulanır — hem istemci hem de borsa için kaynak tasarrufu sağlar.

4. fetchOrderBookWs - Tek Seferlik İstekler

Emir defteri anlık görüntüsü almak için REST API'ye alternatif.

Temel özellikler:

  • Amaç: WebSocket üzerinden tek seferlik emir defteri isteği (REST benzeri)
  • Bağlantı türü: Geçici WebSocket, veri alındıktan sonra bağlantı kapanır
  • Veri: Emir defteri anlık görüntüsü
  • Trafik: Minimum

Önemli Farklar ve Metot Karşılaştırması

Metodlar arasındaki farkları anlamak, doğru yaklaşımı seçmek için kritik öneme sahiptir:

Kalıcı ve Geçici Bağlantılar

  1. watch metodları* — kalıcı bağlantı oluşturur, gerçek zamanlı akış güncellemeleri alır
  2. fetch metodları* — WebSocket'i yalnızca tek seferlik istek için kullanır, REST API'ye benzer

Trafik Karşılaştırması

watchBidsAsks ile watchOrderBookForSymbols:

  • watchBidsAsks — 100–1000 kat daha az trafik, toplu izleme için ideal
  • watchOrderBookForSymbols — güçlü ancak trafik açısından çok ağır ve tüm borsalar tarafından desteklenmiyor

Trafik hesaplama örneği:

  • 100 çift için watchBidsAsks: ~100 kayıt (çift başına 1 alış/satış)
  • 100 çift için watchOrderBookForSymbols: ~100.000-1.000.000 kayıt (100-1000 seviye × 2 taraf × 100 çift)

Emir Defteri Metodları Trafik Karşılaştırması Tam emir defteri ile kitabın tepesi (Alış/Satış) metodları arasındaki veri yoğunluğunun görsel karşılaştırması

Pratik Örnek: Gate.io ve Gerçeklik ile Belgeleme Karşılaştırması

Belgeleme ile gerçeklik karşılaştırması Temiz API belgelemesi ile gerçek dünya borsa davranışı arasındaki uçurum

Belgelemenin pratiğe uymadığı gerçek bir örneğe bakalım.

Test: Gate.io'da watchOrderBookForSymbols

10 popüler işlem çiftine abone olmaya çalışma:

const symbols = [
  '1CAT/USDT:USDT',
  '1INCH/USDT:USDT',
  'A8/USDT:USDT',
  'AAVE/USDT:USDT',
  'ACE/USDT:USDT',
  'ACH/USDT:USDT',
  'ACT/USDT:USDT',
  'ACX/USDT:USDT',
  'ADA/USDT:USDT',
  'ADX/USDT:USDT'
];

const exchange = new ccxt.pro.gateio();
try {
  const orderbooks = await exchange.watchOrderBookForSymbols(symbols);
  console.log('Başarılı!', orderbooks);
} catch (error) {
  console.error('Hata:', error.message);
}

Gerçek sonuç:

NotSupported: gateio watchOrderBookForSymbols() is not supported yet

Önemli ders: Bir metot API belgelemesinde ilan edilmiş olsa bile bu, belirli bir borsa için çalıştığını garanti etmez. Her zaman pratikte test edin!

Otomatik Denetim: Gerçekte Ne Destekleniyor

Borsa uyumluluk denetim matrisi 75'ten fazla kripto para borsasında gerçek metot desteğini gösteren uyumluluk matrisi

Metot desteğinin gerçek resmini elde etmek için tüm CCXT borsalarını kontrol eden bir betik yazıldı:

const ccxt = require('ccxt');

async function checkAllExchangeMethods() {
    const results = [];
    
    // Desteklenen tüm borsaların listesini al
    const exchangeIds = ccxt.pro.exchanges;
    
    for (const exchangeId of exchangeIds) {
        try {
            const exchange = new ccxt.pro[exchangeId]();
            
            // Metot varlığını kontrol et
            const hasWatchOrderBook = typeof exchange.watchOrderBook === 'function';
            const hasWatchBidsAsks = typeof exchange.watchBidsAsks === 'function';
            const hasWatchOrderBookForSymbols = typeof exchange.watchOrderBookForSymbols === 'function';
            
            // Spot ve vadeli işlem desteğini kontrol et
            const hasSpot = exchange.has['spot'];
            const hasFutures = exchange.has['future'] || exchange.has['swap'];
            
            results.push({
                exchange: exchangeId,
                spot: hasSpot,
                futures: hasFutures,
                watchOrderBook: hasWatchOrderBook,
                watchBidsAsks: hasWatchBidsAsks,
                watchOrderBookForSymbols: hasWatchOrderBookForSymbols
            });
            
        } catch (error) {
            console.error(`${exchangeId} kontrol hatası:`, error.message);
        }
    }
    
    return results;
}

// Kontrolü çalıştır
checkAllExchangeMethods().then(results => {
    console.table(results);
});

Denetim Sonuçları (En İyi Borsaların Bir Bölümü)

Borsa           | Spot (OB/BA/OBS) | Vadeli (OB/BA/OBS)
----------------------------------------------------------
binance         | ✓/✓/✓            | ✓/✓/✓
bybit           | ✓/✓/✓            | ✓/✓/✓
okx             | ✓/✓/✓            | ✓/✓/✓
gateio          | ✓/✓/✓            | ✓/✓/✓
mexc            | ✓/✓/✓            | ✓/✓/✓
kucoin          | ✓/✓/✓            | ✓/✓/✓
huobi           | ✓/✓/✓            | ✓/✓/✓
bitget          | ✓/✓/✓            | ✓/✓/✓

Önemli not:
Betik yalnızca JavaScript nesnesindeki metot varlığını kontrol eder, borsa tarafındaki gerçek desteği değil. Bu nedenle "✓" her zaman işlevsellik anlamına gelmez — Gate.io örneğinde gördüğümüz gibi.

Metot Seçimi İçin Pratik Öneriler

Metot seçimi karar ağacı Kullanım senaryonuza göre doğru WebSocket metodunu seçmek için karar akış şeması

Farklı Kullanım Senaryoları İçin

1. Çok sayıda çifti izleme (100+):

  • watchBidsAsks kullanın
  • Minimum trafik
  • Yalnızca en iyi fiyatları alın
  • Arbitraj botları için ideal

2. Tek bir çift için tam emir defteri oluşturma:

  • watchOrderBook kullanın
  • Tam piyasa derinliği
  • Piyasa yapıcı stratejiler için uygun

3. Birkaç çifti tam derinlikle izleme:

  • Önce watchOrderBookForSymbols deneyin
  • Desteklenmiyorsa — birden fazla watchOrderBook kullanın
  • Borsa bağlantı sayısı sınırlarını göz önünde bulundurun

4. Tek seferlik veri alma:

  • fetchOrderBookWs veya normal REST API kullanın
  • Anlık görüntüler veya başlatma için

Performans Optimizasyonu

Bağlantı optimizasyonu: çoklu vs çoğullanmış Kaotik bireysel bağlantılar (sol) ile optimize edilmiş çoğullanmış WebSocket bağlantısı (sağ)

Bağlantı yönetimi:

// Kötü: birden fazla bağlantı oluşturma
const symbols = ['BTC/USDT', 'ETH/USDT', 'ADA/USDT'];
const orderbooks = await Promise.all(
    symbols.map(symbol => exchange.watchOrderBook(symbol))
);

// İyi: tüm çiftler için tek bağlantı (destekleniyorsa)
try {
    const orderbooks = await exchange.watchOrderBookForSymbols(symbols);
} catch (error) {
    // Bireysel aboneliklere geri dön
    const orderbooks = await Promise.all(
        symbols.map(symbol => exchange.watchOrderBook(symbol))
    );
}

Derinlik yönetimi:

// Trafik tasarrufu için derinliği sınırla
const orderbook = await exchange.watchOrderBook('BTC/USDT', 20); // yalnızca 20 seviye

Hata Yönetimi ve Bağlantı Kurtarma

Hata yönetimi ve üstel geri çekilme ile yeniden deneme Üstel geri çekilme yeniden deneme deseniyle dayanıklı bağlantı kurtarma

WebSocket bağlantıları düşebilir, bu nedenle uygun hata yönetimi önemlidir:

async function robustWatchOrderBook(exchange, symbol, maxRetries = 3) {
    let retries = 0;
    
    while (retries < maxRetries) {
        try {
            const orderbook = await exchange.watchOrderBook(symbol);
            retries = 0; // başarıda sayacı sıfırla
            return orderbook;
        } catch (error) {
            retries++;
            console.error(`Abonelik hatası (deneme ${retries}):`, error.message);
            
            if (retries >= maxRetries) {
                throw new Error(`${maxRetries} denemeden sonra abone olunamadı`);
            }
            
            // Üstel geri çekilme
            await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, retries)));
        }
    }
}

Veri Kalitesi İzleme

Veri kalitesi doğrulama hattı Doğrulama kontrol noktalarından geçen emir defteri verisi: yapı, tazelik ve spread mantığı

Alınan verinin kalitesini takip etmek önemlidir:

function validateOrderBook(orderbook) {
    // Temel yapıyı kontrol et
    if (!orderbook.bids || !orderbook.asks) {
        throw new Error('Geçersiz emir defteri yapısı');
    }
    
    // Veri tazeliğini kontrol et
    const now = Date.now();
    const dataAge = now - orderbook.timestamp;
    if (dataAge > 10000) { // 10 saniyeden eski
        console.warn('Eski emir defteri verisi:', dataAge, 'ms');
    }
    
    // Fiyat mantığını kontrol et
    const bestBid = orderbook.bids[0] ? orderbook.bids[0][0] : 0;
    const bestAsk = orderbook.asks[0] ? orderbook.asks[0][0] : 0;
    
    if (bestBid >= bestAsk && bestBid > 0 && bestAsk > 0) {
        console.warn('Çapraz spread:', { bestBid, bestAsk });
    }
}

Sonuçlar ve En İyi Uygulamalar

CCXT ile pratik deneyimlere dayanarak temel öneriler şunlardır:

1. Yalnızca Belgelemeye Güvenmeyin

Üretimde uygulamadan önce metodları her zaman gerçek veriyle test edin. API'de metodun varlığı işlevselliği garanti etmez.

2. Görev İçin Doğru Metodu Seçin

  • Toplu izleme: watchBidsAsks
  • Ayrıntılı analiz: watchOrderBook
  • Tek seferlik istekler: fetchOrderBookWs

3. Trafiği Optimize Edin

Çok sayıda çifti izlemek için watchBidsAsks, watchOrderBookForSymbols'dan 1000 kat daha verimli olabilir.

4. Arızalara Hazır Olun

Sağlam yeniden deneme mantığı ve veri kalitesi izlemesi uygulayın.

5. Üretim Yüklerinde Test Edin

API davranışı, yük altında test isteklerine kıyasla dramatik biçimde farklılık gösterebilir.

Emir Defterleri İçin WebSocket API'lerinin Geleceği

WebSocket API'lerinin evrimi Parçalı borsa bağlantılarından birleşik standartlaştırılmış API protokollerine

Sektör daha standartlaştırılmış yaklaşımlara doğru ilerliyor:

  • Borsalar arasında metot birleştirme
  • Gerçek örneklerle geliştirilmiş belgeleme
  • Daha verimli veri sıkıştırma protokolleri
  • Daha iyi hata ayıklama araçları ve izleme

Sonuç

Emir defterleri için WebSocket API'leri güçlü araçlardır ancak her borsanın özelliklerini derinlemesine anlamayı gerektirir. CCXT, arayüzleri birleştirerek çalışmayı önemli ölçüde basitleştirir, ancak gerçeklik hâlâ belgeden daha karmaşıktır.

Başarının anahtarı test etmek, izlemek ve belirli görevler için doğru metodları seçmektir. Unutmayın: bir borsada çalışan şey, API'ler özdeş görünse bile başka bir borsada çalışmayabilir.

Başarılı bir işlem sistemi yalnızca doğru algoritmalar değil, aynı zamanda güvenilir bir veri altyapısıdır. Ve CCXT WebSocket metodları bu altyapının önemli bir parçasıdır.

Borsa WebSocket API'leriyle deneyiminiz nasıl? Beklenmedik sorunlarla karşılaştınız mı? Yorumlarda paylaşın!

Faydalı Bağlantılar

Atıf

@software{soloviov2025ccxtprowebsocketorderbook,
  author = {Soloviov, Eugen},
  title = {CCXT: How WebSocket Orderbook Methods Really Work},
  year = {2025},
  url = {https://marketmaker.cc/tr/blog/post/ccxt-pro-websocket-orderbook-methods},
  version = {0.1.0},
  description = {CCXT WebSocket emir defteri metodlarının ayrıntılı analizi: watchOrderBook, watchBidsAsks, watchOrderBookForSymbols. 75'ten fazla borsada gerçek testler.}
}
Sorumluluk Reddi: Bu makalede sağlanan bilgiler yalnızca eğitim ve bilgilendirme amaçlıdır ve finansal, yatırım veya ticaret tavsiyesi niteliği taşımaz. Kripto para ticareti önemli bir kayıp riski içerir.

Yazarlar

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

Piyasanın Önünde Olun

Özel yapay zeka ticaret içgörüleri, piyasa analizi ve platform güncellemeleri için bültenimize abone olun.

Gizliliğinize saygı duyuyoruz. İstediğiniz zaman abonelikten çıkabilirsiniz.