MeowQuant bağımsız bir üçüncü taraf bilgi sitesidir, OKX'in resmî sitesi değildir. Kayıt düğmesi OK30001 davet kodunu içerir ve bu sayede tanıtım hizmet ücreti alabiliriz. Tam açıklama →

OKX · API ileri

OKX gerçek zamanlı veriye WebSocket ile bağlanmak: ileri stratejiler REST yoklamasını neden bırakır

Strateji uzun süre çalışınca muhtemelen şu garip durumla karşılaşırsın: mantıkta hata yok ama gerçek hesaptaki gerçekleşmeler hep yarım adım geç oluyor. Koda baktığında sorun çoğu zaman stratejide değil, veriyi alma biçimindedir — hâlâ REST ile tekrar tekrar «fiyat şu an kaç» diye soruyorsundur. Bu yoklamanın doğasında gecikme vardır, frekans artınca bir de istek sınırına çarpar. Stratejinin tepkisini hızlandırmak için veri bağlantısını genelde yoklamadan WebSocket akışına çevirmen gerekir.

Bu yazıda biz (MeowQuant editör ekibi) WebSocket'in OKX'te nasıl kullanılacağını netleştiriyoruz: REST yoklamasından farkı, ileri stratejilerin onu neden kullandığı, OKX'in hangi kanalları olduğu, ccxt.pro'nun watch_ticker ve watch_orders'ı ile akış yazmak, bağlantı kopması ve kalp atışının nasıl ele alınacağı ve — çok önemli bir cümle — kime uygun olduğu. Sonucu baştan söyleyelim: bu ileri seviye bir içeriktir, yeni başlayanın basit stratejisi için REST yeter, «profesyonel görünmek» için erkenden WS'ye geçme.

REST yoklaması vs WebSocket akışı

İkisinin farkı bir günlük yaşam benzetmesiyle netleşir. REST yoklaması, her birkaç saniyede bir karşı tarafı arayıp «yeni mesaj var mı» diye sormak gibidir; çoğu zaman aldığın yanıt «yok»tur, boşa arama; WebSocket ise karşı tarafla kapanmayan bir hat kurmak gibidir, onun bir mesajı olur olmaz doğrudan sana söyler, hiçbir şey sormana gerek kalmaz.

Teknik düzeye inince:

BoyutREST yoklaması (fetch_)WebSocket akışı (watch_)
Veri alma biçimiSen tekrar tekrar istek gönderirsinTek kalıcı bağlantı kur, borsa kendiliğinden iter
GecikmeYoklama aralığıyla sınırlı, doğası gereği geçVeri değişir değişmez iter, gecikme düşük
İstek tüketimiYüksek frekanslı yoklama istek sınırına çarparTek bağlantı, istek kotasını neredeyse tüketmez
Kendi emir/hesabınGerçekleşti mi diye tekrar tekrar sorgulamalıÖzel kanal emir gerçekleşmeyi, hesap değişimini gerçek zamanlı iter
Uygulama karmaşıklığıEşzamanlı, sezgisel, ayıklaması kolayEşzamansız, bağlantı kopması ve kalp atışı ele alınmalı
UygunYeni başlayan, düşük frekanslı stratejiİleri, zamana duyarlı strateji

Kısacası: REST basit ama yavaş, WebSocket hızlı ama biraz fazla kod yazmak gerekir. Hangisini seçeceğin, stratejinin «hıza» ne kadar önem verdiğine bağlıdır.

Strateji neden WS kullanmalı

Yukarıdaki karşılaştırmayı stratejiye fayda sağlayan üç noktaya yoğunlaştıralım:

  • Gecikme düşük, tepki hızlı. Fiyat değişir değişmez eline iter, strateji daha erken tepki verir. Dalgalanma yiyen, fiyat farkı kapan stratejiler için bu gecikme farkı kazançla kazanamamanın sınırı olabilir.
  • İstek tasarrufu, istek sınırına çarpmaz. WS tek kalıcı bağlantıdır, yoklama gibi tekrar tekrar istek göndermez, doğal olarak istek sınırını az tetikler. Çok çift izlemek isteyince bu avantaj özellikle belirgindir.
  • Kendi durumunu gerçek zamanlı bil. Özel kanal emir gerçekleşmeni, pozisyon değişimini, bakiye değişimini kendiliğinden iter, tekrar tekrar fetch_open_orders ile sorgulamana gerek kalmaz. Strateji buna göre daha zamanında ayarlanır, arayüz de tasarruf eder.

Ama «fayda»nın bir önkoşulu olduğuna dikkat: stratejin gerçekten zamana duyarlı olmalı. Saatte bir kontrol eden düşük frekanslı bir grid çalıştırıyorsan, WS'nin o gecikme avantajının senin için hiçbir anlamı yoktur, tersine boşuna karmaşıklık getirir.

OKX WS'nin kanalları

OKX'in WebSocket (API v5) kanalları kabaca iki türe ayrılır; bu ayrımı anlarsan sonra kod yazmak kolaylaşır:

Açık kanallar (Public). Herkese açık piyasa verisi iter, herkes abone olabilir, kimlik doğrulaması gerekmez. Sık kullanılanlar:

  • Fiyat (tickers): son gerçekleşme fiyatı, en iyi alış-satış, 24 saatlik değişim vb.
  • Mum (candles): çeşitli periyotların mum güncellemesi.
  • Emir defteri derinliği (books): alış-satış emir derinliği.
  • Tek tek gerçekleşmeler (trades): piyasada olan her bir gerçekleşme.

Özel kanallar (Private). Kendi hesabınla ilgili veriyi iter, abone olmadan önce API Key ile kimlik doğrulaması gerekir (yine apiKey, secret, Passphrase üçlüsü). Sık kullanılanlar:

  • Emir (orders): emirlerinin durum değişimi, gerçekleşme bildirimi.
  • Pozisyon (positions): vadeli pozisyonun değişimi.
  • Hesap (account): bakiye, marjin vb. değişimi.

Tek cümleyle belle: açık kanal piyasaya bakar, özel kanal kendine. İstersen yalnızca açık kanala abone olup piyasa odaklı strateji yaparsın, istersen aynı anda özel kanala da abone olup kendi emir sonuçlarını gerçek zamanlı takip edersin.

ccxt.pro ile fiyat alma (watch_ticker)

WS'ye bağlanmanın en kolay yolu yine ccxt'ten geçer — WebSocket uzantısının adı ccxt.pro'dur ve artık ana ccxt paketine dahil edilmiştir. Sıradan ccxt REST kullanır, fetch_ ailesini; ccxt.pro WS kullanır, watch_ ailesini. Altında kalıcı bağlantı olduğu için kod eşzamansız (async) döngü olarak yazılır.

Aşağıdaki kod BTC/USDT'nin fiyatına abone olur, fiyat güncellendikçe yazdırır:

import asyncio
import ccxt.pro as ccxtpro     # WS sürümü, watch_ ailesi

async def main():
    okx = ccxtpro.okx()        # Açık fiyat için kimlik doğrulaması gerekmez
    symbol = 'BTC/USDT'
    try:
        while True:
            ticker = await okx.watch_ticker(symbol)   # Yeni fiyat olunca döner
            print(ticker['symbol'], ticker['last'])
    finally:
        await okx.close()       # Çıkışta kalıcı bağlantıyı kapat

asyncio.run(main())

REST'ten temel fark await okx.watch_ticker(...)'tadır: sen aktif olarak çekmezsin, «orada asılı durup itilmeyi beklersin», yeni fiyat olunca döner. Onu while True döngüsüne koyunca sürekli fiyat alan bir akışa dönüşür. Sondaki await okx.close()'a dikkat — kalıcı bağlantı bitince kendiliğinden kapatılmalı, asılı bırakma.

Özel emir kanalına bağlanma (watch_orders)

Açık fiyat dışında, ileri bir kullanım da aynı anda kendi emirlerini izlemektir. watch_orders, emrinin durumu değişir değişmez (kısmi gerçekleşme, tam gerçekleşme, iptal) sana iter; tekrar tekrar fetch_open_orders'tan çok daha zamanındadır. Özel kanal olduğu için bilgileri eklemen gerekir:

import asyncio
import ccxt.pro as ccxtpro

async def main():
    okx = ccxtpro.okx({
        'apiKey':   'senin_apiKey',
        'secret':   'senin_secret',
        'password': 'senin_Passphrase',   # Özel kanal kimlik doğrulaması ister
    })
    try:
        while True:
            orders = await okx.watch_orders()    # Emrin değişir değişmez iter
            for o in orders:
                print(o['symbol'], o['side'], o['status'], o.get('filled'))
    finally:
        await okx.close()

asyncio.run(main())

Bununla stratejin, emir gerçekleştiği an bildirimi alır, buna göre hemen bir sonraki emri asabilir ya da pozisyonu ayarlayabilir; bir sonraki yoklamayı bekleyip «aa, az önceki emir gerçekleşmiş» demez. Bu, grid, piyasa yapıcılığı gibi hızlı ardışık emir gerektiren stratejiler için çok önemlidir. Özel kanal yine senin o gerçek hesap API Key'ini kullanır (Key oluşturmak için API'ye giriş), yetkisi yalnızca «Okuma» ve «İşlem», «Çekim»i işaretleme.

Özel kanalla kendi emir akışını gerçek zamanlı almak için önce yetkisi düzgün ayarlanmış bir API Key'in olmalı. Betik çalıştırmak için özel bir hesabın yoksa ayrı bir tane açmanı öneririz. OK30001 davet kodumuzla OKX'e kayıt ol, komisyonda indirim olur, API ile verilen emirler de aynı indirimden yararlanır. OKX'e kayıt olup API açmak için buraya tıkla →

Bağlantı yeniden kurma ve kalp atışı

Kalıcı bağlantının en büyük gerçek sorunu şudur: kopar. Ağ bir titrer, borsa rutin yeniden başlatır, bağlantı gider. WS stratejisinin ne kadar sağlam yazıldığı büyük ölçüde bağlantı kopmasını nasıl ele aldığına bağlıdır. İki şey mutlaka yapılmalı:

Kalp atışı / canlı tutma. WebSocket protokolü, bağlantının hâlâ canlı olduğunu düzenli ping/pong ile teyit eder. Bir süre ses çıkmazsa borsa bu bağlantıyı ölü sayıp keser. Neyse ki ccxt.pro içeride genelde canlı tutmayı senin için halleder, sen esas olarak programın uzun süre bloklanmamasını, mesaj alıp vermenin takılmamasını sağla yeter.

Bağlantı yeniden kurma + tekrar abone olma. Bağlantı kopunca otomatik yeniden bağlanmalı, ve yeniden bağlanınca kanala tekrar abone olmalı ve mevcut gerçek durumu bir kez yeniden sorgulamalı (örneğin mevcut açık emir ve pozisyonu yeniden çekmeli), çünkü bağlantı kopukken olan itmeleri alamazsın. Yaygın yazım, watch_ çağrısını try/except'e koyup bağlantı istisnasını yakalayınca yeniden bağlanıp yeniden abone olmaktır:

import asyncio
import ccxt.pro as ccxtpro

async def main():
    okx = ccxtpro.okx()
    symbol = 'BTC/USDT'
    while True:
        try:
            ticker = await okx.watch_ticker(symbol)
            print(ticker['last'])
        except ccxtpro.NetworkError as e:
            print('Bağlantı istisnası, az sonra yeniden bağlan ve abone ol:', e)
            await asyncio.sleep(2)          # Bir adım geri çekilip yeniden bağlan, dövme
            # Yeniden bağlanınca duruma göre mevcut pozisyon/açık emri bir kez yeniden sorgula
        except Exception as e:
            print('Başka istisna:', e)
            await asyncio.sleep(2)

asyncio.run(main())

Buradaki nokta kodun ne kadar şık olduğu değil, şu ilkedir: bağlantı koptuktan sonra durumun değişmediğini varsayma, önce yeniden sorgula sonra devam et. Bu, algo risk yönetimi yazımızda anlattığımız «yeniden bağlanınca önce durumu sorgula, sonra eyleme geç» ile aynı şeydir — bağlantı kaybı sırasında piyasa çoktan kımıldamış olabilir, kör kör devam etmek karışıklık çıkarır.

Test: gecikme karşılaştırması

📋 Editör ekibi testi · 2026-06-07
09:50'de OKX demo hesabında aynı BTC/USDT için aynı anda iki betik çalıştırıp veri alma biçimini karşılaştırdık: biri REST ile her 3 saniyede bir fetch_ticker yoklaması yaptı, biri ccxt.pro'nun watch_ticker'ı ile akış aldı. Sonuç çok netti — yoklama tarafının fiyat güncellemesi belirgin biçimde «kademe kademe» sıçradı, iki güncelleme arasında en fazla neredeyse 3 saniye fark vardı (çünkü o sadece 3 saniyede bir soruyordu); WS tarafında fiyat neredeyse kesintisiz yenileniyordu, piyasa kımıldar kımıldamaz itiyordu, his olarak çok daha hızlıydı. Milisaniyeyi tam ölçmeye girmedik (demo ortamı gerçek hesap ağını temsil etmez), ama «yoklamanın akıştan geç kaldığı» bir bakışta belliydi. Düşük frekanslı stratejide bu fark önemsiz, ama dalgalanma yiyen, fiyat farkı kapan strateji yapıyorsan bu birkaç saniye gerçek bir dezavantaj. Bu karşılaştırma şunu da doğruladı: WS'ye geçmesi gereken strateji erken geçsin; geçmesi gerekmeyende REST aslında daha rahat.

Kime uygun

En çok netleştirilmesi gereken soruya dönelim: WebSocket'e ihtiyacın var mı? Ölçütümüz çok basit —

Önce REST önerdiğimiz durumlar: yeni başlayansın; strateji düşük frekanslı (birkaç dakikada, hatta birkaç saatte bir kontrol); mantık basit, gecikmeye duyarsız. REST eşzamanlı, sezgisel, ayıklaması kolaydır; bu senaryolarda fazlasıyla yeter, üstelik eşzamansızlık ve yeniden bağlanma tuzakları olmadan enerjini stratejinin kendisine ayırırsın.

WS'ye geçmeye değen durumlar: strateji gecikmeye duyarlı (dalgalanma yeme, piyasa yapıcılığı, fiyat farkı arbitrajı); aynı anda çok çift izleyeceksin, yoklama istek sınırına çarpmaya başlıyor; ardışık emir için emir gerçekleşmesinin gerçek zamanlı bildirimine ihtiyacın var. Bu senaryolara gelince WS'nin getirdiği gerçek zamanlılık ve verim, o eşzamansız ve yeniden bağlanma kodlarını fazladan yazmaya değer.

Tek cümleyle özet: profesyonel görünmek için erkenden WS'ye geçme. Önce REST ile stratejiyi oturt, gerçekten yoklamanın tavanına çarpınca — yavaşlayınca ya da istek sınırına çarpınca — WebSocket'e yükselt; bu sıra hem en az çaba ister hem de stratejiyi kavramadan teknik karmaşıklığa takılmamanı sağlar. Hangisini kullanırsan kullan, yeni kodu önce demo hesapta doğrula.

Risk uyarısı: Kripto varlık fiyatları şiddetle dalgalanır, anapara büyük ölçüde erijebilir, hatta sıfırlanabilir. WebSocket stratejinin tepkisini hızlandırır ama «daha hızlı» aynı zamanda hata olunca daha hızlı uygulanması demektir — mantık ya da bağlantı kopması ele alımı hatalıysa zarar da büyür; vadeli işlem ve kaldıraçlı işlem %100 anapara kaybına yol açabilir. Bu yazı bir teknik ve uygulama derlemesidir, yatırım tavsiyesi oluşturmaz, yalnızca tamamını kaybetmeyi göze alabileceğin parayı kullan, yerel yasalara da uy.

Sık sorulan sorular

REST yoklaması ile WebSocket akışı arasındaki fark nedir?

REST yoklaması, borsaya tekrar tekrar «fiyat şu an kaç» diye sormandır; her seferinde bir istek gönderip bir yanıt beklersin, hem gecikme olur hem de kolayca istek sınırına çarparsın. WebSocket ise tek bir kalıcı bağlantı kurar; borsada yeni veri olunca sana kendiliğinden iter, sen sürekli sormazsın. Piyasaya hızlı tepki vermesi gereken stratejiler için akışın gerçek zamanlılığı ve verimi yoklamadan belirgin biçimde üstündür.

Strateji neden WebSocket kullanmalı?

Üç neden: bir, gecikme düşük, fiyat değişir değişmez iter, tepki daha hızlı; iki, istek tasarrufu, yüksek frekanslı yoklama gerekmez, doğal olarak istek sınırına az çarpar; üç, özel kanal kendi emir gerçekleşmeni, hesap değişimini gerçek zamanlı alabilir, tekrar tekrar sorgulamana gerek kalmaz. Grid, piyasa yapıcılığı, yüksek frekans gibi zamana duyarlı stratejilerde WS neredeyse standart donanımdır. Ama yeni başlangıç aşamasındaki basit stratejilerde REST yoklaması genelde yeter.

OKX WebSocket'in hangi kanalları var?

Kabaca iki türe ayrılır. Açık kanallar herkese açık piyasa verisi iter, örneğin fiyat (ticker), mum, emir defteri derinliği, gerçekleşme; herkes abone olabilir, kimlik doğrulaması gerekmez. Özel kanallar kendi hesabınla ilgili veriyi iter, örneğin emir güncellemesi, pozisyon değişimi, hesap bakiyesi; abone olmadan önce API Key ile kimlik doğrulaması gerekir. Açık kanal piyasaya bakar, özel kanal kendine.

ccxt.pro ile sıradan ccxt aynı şey mi?

ccxt.pro, ccxt'in WebSocket uzantısıdır; her borsanın WS'sini de tek bir arayüzde toplar. Sıradan ccxt REST kullanır (fetch_ ailesi), ccxt.pro WS kullanır (watch_ ailesi, örneğin watch_ticker, watch_orders). Artık ccxt.pro ana ccxt paketine dahil edildi, ccxt'i kurduktan sonra eşzamansız watch_ yöntemlerini kullanmak yeter. Altında kalıcı bağlantı olduğu için kod eşzamansız döngü olarak yazılır.

WebSocket bağlantısı koparsa ne yapmalı?

Kalıcı bağlantı kaçınılmaz olarak kopar — ağ titremesi, borsa yeniden başlatması olabilir. İki şey yapılmalı: bir, kalp atışı/canlı tutma, düzenli ping gönder ya da kütüphanenin canlı tutma mekanizmasına güven, bağlantı ölü sayılmasın; iki, bağlantı yeniden kurma, bağlantı istisnasını yakalayıp otomatik yeniden bağlan, ve yeniden bağlanınca kanala tekrar abone ol, mevcut gerçek durumu bir kez yeniden sorgula. ccxt.pro'nun watch_ yöntemlerini kullanırken onu try/except döngüsüne koymak, kopunca yeniden bağlanıp yeniden abone olmak yaygın yazımdır.

Yeni başlayan önce REST mi WebSocket mi kullanmalı?

Önce REST. REST eşzamanlı, sezgisel, ayıklaması kolaydır; yeni başlayanın basit stratejisi (örneğin düşük frekanslı grid, zamanlı kontrol) için fazlasıyla yeter. WebSocket eşzamansızlık, kalıcı bağlantı, yeniden bağlanma gibi karmaşıklıklar getirir; stratejin gerçekten gecikmeye duyarlı olunca ya da yoklama istek sınırına çarpmaya başlayınca WS'ye yükseltmek için geç olmaz. «Profesyonel görünmek» için erkenden WS'ye geçme.

WebSocket iyi bir araçtır ama «neden ihtiyaç duyduğunu zaten bilen» kişiler içindir. Hâlâ temel atıyorsan, önce API'ye girişi oturt, risk yönetimini kur; bunlar WS'ye geçmekten çok daha önemli. Strateji gerçekten hızlanamaz hale gelince dönüp bu yazıya bak.

Stratejiyi hızlandıracak mısın? Önce hesabı ve API'yi hazırla

WebSocket, özel kanal, gerçek zamanlı emir akışı — hepsinin önkoşulu yetkisi düzgün ayarlanmış bir API Key'dir. Davet koduyla açılan yeni hesapta komisyon indirimi olur, API ile verilen emirler de aynı indirime tabidir — önce temeli sağlamlaştır, sonra ileri seviyeyi konuş.

OK30001 OK30001 ile OKX'e kayıt ol →

Kripto varlık fiyatları şiddetle dalgalanır, vadeli işlem ve kaldıraç anaparanın tamamen kaybına yol açabilir. Algoritmik ve otomatik işlem kâr garantisi vermez, yalnızca kaybetmeyi göze alabileceğin parayı kullan.