OKX · API uygulamalı
OKX API yaygın hataları ve sorun giderme listesi: bu tabloya bakıp düzelt
Algo betiği yazanların onda dokuzu stratejide değil, kırmızı bir hata satırında takılır: betik çalışır, terminale anlaşılmaz bir code ve İngilizce yığını düşer, insan donar kalır. İyi haber şu ki OKX API'nin hataları yalnızca birkaç sık türden ibaret; her birinin neye benzediğini, hangi nedene karşılık geldiğini bilince sorun giderme çok daha hızlı olur.
Bu yazıda biz (MeowQuant editör ekibi) kendi başımıza gelen ve toplulukta defalarca gördüğümüz hataları bir listede topladık; çekirdeği bir hata kodu eşleştirme tablosu — bir sorun çıktığında önce tabloda hata kodu ya da anahtar kelimeyle yerini bul, sonra altındaki madde madde sorun gidermeye bak. Okuyunca çoğu hatayı kırmızı yazıya bakakalmadan birkaç dakikada kendin çözebilmelisin.
Önce hatayı okumayı öğren: code + msg
Hata gidermenin ilk adımı, hatanın kendisini anlamaktır. OKX arayüzü hata verince üç bilgi döndürür:
- HTTP durum kodu: en kaba katman, örneğin 401 (kimlik doğrulama sorunu), 429 (çok fazla istek), 400 (isteğin kendisinde sorun).
- code: OKX'in kendi sayısal hata kodu, sorun türünü en kesin gösterir. Sorun gidermenin ana dayanağı budur.
- msg: bir metin açıklaması, yönü doğrulamana yardım eder, bazen doğrudan hangi alanın hatalı olduğunu söyler.
ccxt kullanıyorsan bu ham hataları daha okunaklı istisna türlerine sarar; örneğin kimlik doğrulama sorununda AuthenticationError, istek sınırında RateLimitExceeded, bakiye yetersizliğinde InsufficientFunds fırlatır. İstisna mesajında da genelde OKX'in ham code ve msg'si bulunur. İyi bir alışkanlık, bunları try/except ile net yazdırmaktır:
import ccxt
okx = ccxt.okx({
'apiKey': 'senin_apiKey',
'secret': 'senin_secret',
'password': 'senin_Passphrase',
'enableRateLimit': True,
})
try:
balance = okx.fetch_balance()
print('USDT kullanılabilir:', balance['USDT']['free'])
except ccxt.AuthenticationError as e:
print('Kimlik doğrulama başarısız, üç bilgiyi ve sistem saatini kontrol et:', e)
except ccxt.RateLimitExceeded as e:
print('İstek sınırına takıldı, istekleri yavaşlat:', e)
except ccxt.BaseError as e:
print('Başka hata, ham code/msg degerine bak:', e)
İstisnadaki o code ve msg'yi olduğu gibi not al, aşağıdaki tabloyla karşılaştır, hangi tür soruna düştüğünü çoğunlukla bulabilirsin.
Sık hatalar eşleştirme tablosu
Aşağıdaki tablo yeni başlayanların en sık çarptığı birkaç hatayı kapsar. Hata kodları OKX'in güncel API v5 dokümanındaki değerleri esas alır (OKX zaman zaman kod değerlerini değiştirebilir, uymayanla karşılaşırsan msg metnini ve resmî dokümanı esas al); önemli olan «neden → nasıl düzeltilir» eşleşmesini doğru kurmaktır.
| Hata (code / anahtar kelime) | Büyük olasılıkla neden | Nasıl düzeltilir |
|---|---|---|
| 50011 Too Many Requests / istek sınırı |
İstekler çok sık, arayüz istek sınırı koruması devreye girdi | enableRateLimit'i aç; yine çarparsa üstel geri çekilmeli yeniden deneme ekle, gecikmesiz while döngüsü kullanma |
| Invalid sign kimlik doğrulama başarısız |
İmza yanlış: çoğu zaman Passphrase yanlış, ya da apiKey/secret kopyalanırken hata var, ya da sistem saati yanlış | Üç bilgide boşluk/eksik karakter var mı tek tek kontrol et; password'a Passphrase yazıldığını doğrula; sistem saatini ayarla |
| API key geçersiz APIKey does not exist |
apiKey yanlış kopyalanmış, silinmiş ya da yanlış ortamda kullanılmış (gerçek hesap Key'i demo hesap Key'i sanılmış) | apiKey'i panelden yeniden kopyala; bu Key'in hâlâ var ve silinmemiş olduğunu doğrula; sandbox anahtarının ortamla uyumlu olduğunu doğrula |
| Passphrase hatası passphrase incorrect |
ccxt'in password alanına Key oluştururken belirlenen Passphrase yerine giriş şifresi yazılmış |
password'ı o Key'i oluştururken belirlediğin Passphrase olarak değiştir; hatırlamıyorsan Key'i silip yeniden oluştur |
| Yetersiz bakiye Insufficient balance |
Emir tutarı hesabın kullanılabilir bakiyesini aşıyor ya da para başka hesapta (örneğin fon hesabı vs işlem hesabı) | Emir miktarını küçült; paranın işlem için kullanılan hesapta olduğunu doğrula; demo hesapta sanal sermayeyi sıfırlayabilirsin |
| Zaman damgası dolması timestamp expired |
Yerel sistem saati çok sapmış, imza zaman damgası OKX toleransını aştı | NTP otomatik saat ayarını açıp sistem saatini doğru senkronize et; bulut sunucular genelde varsayılan açıktır |
| Yetki yetersiz permission denied |
Bu Key'de gerekli yetki yok (sık: sadece okuma işaretli, işlem işaretsiz) | API yönetimine dönüp bu Key'e «İşlem» yetkisini ekle, yeniden oluşturmaya gerek yok |
| IP beyaz listede değil IP not allowed |
Key'e IP beyaz listesi kurulmuş ama mevcut çıkış IP listede yok (ağ değişti/proxy açıldı/internet IP değişti) | Mevcut çıkış IP'yi bu Key'in beyaz listesine ekle; IP sık değişiyorsa şimdilik beyaz liste kurmamayı düşün |
| İşlem çifti yok instrument does not exist |
symbol biçimi yanlış ya da spot emrinde vadeli biçim kullanılmış | Spot'u BTC/USDT yaz (büyük harf, eğik çizgili); önce load_markets() ile mevcut çiftlere bak |
| Miktar/hassasiyet uymuyor size too small |
Emir miktarı bu çiftin en düşük emir miktarından küçük ya da hassasiyet basamağı yanlış | load_markets() ile bu çiftin limits ve precision değerlerine bakıp istenene göre yuvarla |
Madde madde nasıl düzeltilir
Tablo yön verir, bu bölüm ayrıntı verir. Çarptığın maddeyi seçip aşağı bak.
Kimlik doğrulama türü (Invalid sign / geçersiz API key / Passphrase hatası)
Bu yeni başlayan hatalarının en yoğun bölgesidir; aşağıdaki sırayla kontrol et, isabet oranı en yüksek budur:
- Önce Passphrase'i kontrol et. ccxt'teki
passwordalanına yazılması gereken, Key'i oluştururken belirlediğin o Passphrase dizisidir; giriş şifresi değil, secret de değil. Bu madde kimlik doğrulama hatalarının yarısından fazlasını kapsar. - Sonra apiKey / secret yanlış kopyalanmış mı bak. Sık olan, yapıştırırken baş-son fazladan boşluk ya da bir iki eksik karakterdir. Panelden yeniden kopyalamak en sağlamı.
- Sistem saatini de kontrol et. Saat yanlış olunca imza zaman damgası dolar, belirtisi yine kimlik doğrulama hatasıdır. NTP saat ayarını aç.
Yetki yetersiz
Tipik belirti «bakiye sorgulanabiliyor, emir verilemiyor»dur. Bakiye sorgulamak okuma yetkisi, emir vermek işlem yetkisidir; ikisi ayrı verilir. OKX panelindeki API yönetimine dönüp bu Key'i bul, «İşlem»i ekle yeter, yeniden oluşturmaya gerek yok. Eğer çekim de işaretlediysen, bırakma — algo çalıştıran Key'de çekim yetkisi asla açılmaz.
Yetersiz bakiye
Lafzi anlamda para yetmemesi dışında gizli bir neden daha var: OKX'in farklı hesapları (fon hesabı, işlem hesabı vb.) vardır, paran emir verilen hesapta olmayabilir. Paranın işlem hesabına aktarıldığını doğrula. Demo hesapta sanal sermaye biterse demo arayüzünden sıfırlamak yeter — bu da önce demo hesapta alıştırma yapmanın faydasıdır, deneme yanılma gerçek para harcamaz.
symbol / hassasiyet türü
ccxt'te spot işlem çiftleri tek tip BÜYÜK/BÜYÜK ve düz eğik çizgilidir, örneğin BTC/USDT. BTCUSDT, küçük harf ya da vadeli biçim hata verir. Miktar çok küçük ya da hassasiyet yanlışsa load_markets() ile bu çiftin en düşük emir miktarına ve hassasiyetine bakıp istenene göre doldur. Bu konunun eksiksiz emir örneği API'ye giriş yazımızda var.
OK30001 davet kodumuzla OKX'e kayıt ol, komisyonda indirim olur, API ile verilen emirler de aynı indirime tabidir. OKX'e kayıt olup API açmak için buraya tıkla →
İstek sınırı ve geri çekilmeli yeniden deneme
İstek sınırı (50011 / Too Many Requests), betikçilerin en sık çarptığı ve en çok önceden önlemesi gereken hata türüdür. Yanlış bir şey yapmandan değil, isteklerin çok sık olması üzerine borsanın korumasının devreye girmesinden kaynaklanır. İki katmanda ele al:
Birinci katman: ccxt'in kendi hız sınırlamasını aç. Başlatırken 'enableRateLimit': True ekle, ccxt istekler arasına makul aralık koyar; çoğu durumda bu adım yeter:
okx = ccxt.okx({
'apiKey': 'senin_apiKey',
'secret': 'senin_secret',
'password': 'senin_Passphrase',
'enableRateLimit': True, # Otomatik hız sınırlama, önce aç
})
İkinci katman: üstel geri çekilmeli yeniden deneme ekle. Stratejin bazı anlarda gerçekten çok sık istek yapıyorsa (örneğin aynı anda çok çiftin verisini çekiyorsa), tek başına otomatik hız sınırlama yine ara sıra çarpabilir. Bu durumda kritik isteğe bir yeniden deneme katmanı sar: bir çarpışta 1 saniye bekleyip tekrar dene, sonra 2, 4 saniye, kademe kademe uzat, yeterince çarpınca vazgeçip hata fırlat.
import ccxt, time
def with_retry(fn, max_tries=5):
delay = 1
for i in range(max_tries):
try:
return fn()
except ccxt.RateLimitExceeded:
print(f'İstek sınırı, {i+1}. deneme, {delay}s bekleyip tekrar')
time.sleep(delay)
delay *= 2 # Üstel geri çekilme: 1 → 2 → 4 → 8 ...
raise RuntimeError('Birçok denemeye rağmen istek sınırı, vazgeçildi')
# Kullanım: istek sınırına takılacak çağrıyı buna ver
ticker = with_retry(lambda: okx.fetch_ticker('BTC/USDT'))
print(ticker['last'])
Bir kötü örnek: while True: içine hemen API çağrısı koyup arasına hiç gecikme koymama. Böyle bir döngü bir saniyede onlarca yüzlerce istek atar, anında istek sınırına çarpar, kötü durumda tüm Key kısa süre kısıtlanır. Her yüksek frekanslı döngüde mutlaka aralık bırak.
Test: bizim düştüğümüz bir tuzak
fetch_ticker çağırdık, araya hiç gecikme koymadık, enableRateLimit'i açmayı da unuttuk. Bir dakika dolmadan terminal RateLimitExceeded (50011'e karşılık) basmaya başladı, sonraki isteklerin neredeyse tamamı boşa gitti. İki adım attık: önce başlatmaya 'enableRateLimit': True ekledik, sonra her çiftin isteğini yukarıdaki with_retry geri çekilme fonksiyonuna sardık. Değiştirip yeniden çalıştırınca on küsur çiftin hepsi düzgün döndü, ara ara bir iki kez geri çekilme tetiklenip bir iki saniye bekleyince geçti, tüm tarama turu istek sınırı vermeden tamamlandı. Ders çok net: döngüde API dövüyorsan, hız sınırı ve geri çekilme standart donanımdır, isteğe bağlı değil.
Sık sorulan sorular
OKX API hatası nasıl okunur?
OKX'in arayüzü hata verince bir code (sayısal hata kodu) ve bir msg (metin açıklaması) ile HTTP durum kodu döndürür. Önce code'a bak, sorun türünü en kesin gösterir; msg yönü doğrulamana yardım eder. ccxt'te hata genellikle ilgili istisna türüne sarılır (örneğin AuthenticationError, RateLimitExceeded, InsufficientFunds), istisna mesajında da çoğunlukla OKX'in ham code ve msg'si bulunur. Bu metni olduğu gibi aratmak çoğu zaman yerini bulmaya yeter.
Neden sürekli kimlik doğrulama hatası / Invalid sign alıyorum?
Kimlik doğrulama hatalarının en sık üç nedeni: bir, ccxt'teki password alanına OKX'in Passphrase'ini değil (yanlışlıkla giriş şifresini) yazmak; iki, apiKey ya da secret kopyalanırken fazladan boşluk ya da eksik karakter kalması; üç, sistem saati yanlış olduğu için imza zaman damgasının dolması. Bu sırayla tek tek kontrol et, çoğu Invalid sign böyle çözülür.
İstek sınırına (50011 / Too Many Requests) takıldım, ne yapmalıyım?
İstek sınırı, isteklerin çok sık olması üzerine devreye giren bir korumadır. En kolay çözüm, ccxt'i başlatırken enableRateLimit'i açmaktır; istekler arasına otomatik aralık koyar. Yine çarpıyorsan koda üstel geri çekilmeli yeniden deneme ekle — bir çarpışta 1 saniye, sonra 2, 4 saniye bekle, kademe kademe uzat. Hiçbir gecikme koymadan while True ile API'yi dövme.
Bakiye sorgulayabiliyorum ama emir verince yetki yetersiz diyor, neden?
Bakiye sorgulamak okuma yetkisi, emir vermek işlem yetkisidir; ikisi Key oluşturulurken ayrı verilir. Sorgulayıp emir verememek genelde sadece okuma işaretlenip işlem işaretlenmediği anlamına gelir. OKX panelindeki API yönetimine girip bu Key'e işlem yetkisini ekle yeter, yeniden oluşturmaya gerek yok.
Zaman damgası dolması (timestamp expired) ne demek?
OKX istekteki zaman damgasına bir tolerans tanır; bilgisayarının ya da sunucunun sistem saati yanlışsa, toleransı aşacak kadar saparsa, imza zaman damgası dolduğu için reddedilir. Çözüm sistem saatini doğru ağ saatine senkronize etmek, NTP otomatik saat ayarını açmaktır. Bulut sunucular genelde varsayılan açıktır, yerel makineler ara sıra kayar.
«İşlem çifti bulunamadı» hatası neden çıkar?
Çoğu zaman symbol biçimi yanlış yazılmıştır. ccxt'te spot işlem çiftleri büyük harf ve düz eğik çizgilidir, örneğin BTC/USDT; BTCUSDT, btc/usdt diye yazmak ya da spot emrinde vadeli biçim kullanmak işlem çifti bulunamadı hatası verir. Emin değilsen önce print(okx.load_markets().keys()) ile mevcut çiftlerin tam olarak nasıl göründüğüne bak.
Hata giderme eşiğini aşınca betiğin durup dururken kilitlenmez. Sırada vakit ayırmaya değer olan şey, risk yönetimini koda yazmaktır — hatadan daha korkutucusu, betiğin hata vermeden sürekli yanlış emir vermesidir. Yeni kodu önce demo hesaba atmayı da unutma, hata gidermek gerçek para harcamaz.
Hatalar oturdu, gerçek strateji çalıştırmaya hazır mısın?
Önce hesabı ve API'yi hazırla, demo hesapta akışı ve hataları oturt, sonra gerçeğe geç. Davet koduyla açılan yeni hesapta komisyon indirimi olur, API ile verilen emirler de aynı indirime tabidir.
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.