Bir bot çalışırken borsa API’si aniden hata döndürmeye başlıyor ve hatanın metni piyasayla ilgili hiçbir şey söylemiyor. Bot da genellikle bunu okumuyor: emri gönderemediğini görüyor, yeniden deniyor, tekrar reddediliyor. Her yeniden deneme sınırı biraz daha aşıyor ve döngü kendini besliyor.
Sınır istek sayısı değil, ağırlık
Çoğu borsa basit bir “dakikada kaç istek” sayacı kullanmıyor. Her uç noktaya bir ağırlık veriliyor ve dakikalık bütçe o ağırlıklar üzerinden tükeniyor.
Fark pratikte büyük. Tek bir fiyat sorgusu bir birim yiyebilirken, emir defterinin tamamını derinlemesine çeken bir çağrı elli birim yiyebiliyor, dolayısıyla “dakikada on istek atıyorum” cümlesi bütçe hakkında hiçbir şey söylemiyor. Hangi çağrıları attığın söylüyor.
İkinci bir katman da var: bazı borsalarda emir gönderme için ayrı, daha dar bir sayaç işliyor. Veri çekme bütçesini doldurmak emir gönderme hakkını da tüketiyor olabiliyor.
Aşıldığında ne oluyor
Üç aşama var ve üçü giderek sertleşiyor.
Reddetme. İstek 429 ile geri dönüyor. Genellikle bir bekleme süresi de veriliyor.
Geçici yasak. Aynı davranış sürerse IP adresin birkaç dakikadan birkaç saate kadar engelleniyor ve o pencere boyunca açık pozisyonlarına hiçbir şekilde dokunamıyorsun. Piyasa beklemiyor.
Kalıcı işaretleme. Tekrarlayan ihlallerde API anahtarı kısıtlanabiliyor ve bunu geri açmak destek üzerinden yürüyor.
İkinci aşama gerçek risk. Bot veri çekemediği için değil, pozisyonu kapatamadığı için para kaybediyor.
Yeniden deneme nasıl yazılır
Sabit aralıklı yeniden deneme sorunu büyütüyor. Doğru olan üstel geri çekilme: bekleme süresi her denemede ikiye katlanıyor, üzerine de küçük bir rastgelelik ekleniyor.
Rastgelelik önemli. Aynı anda sınıra çarpan birden çok bileşen, aynı aralıkla denediklerinde hep birlikte tekrar çarpıyorlar.
Bir de üst sınır koy. Beş denemeden sonra bot yeniden denemeyi bırakıp uyarı üretmeli, çünkü altıncı denemenin başaracağına dair bir sebep kalmıyor.
Emir yolunu ayrı tut
En pratik korumalardan biri şu: veri çekme ile emir gönderme aynı bütçeyi paylaşıyorsa, veri tarafına bir tavan koy.
Gösterge hesaplamak için dakikada kaç çağrı gerektiği önceden bilinebiliyor: o sayıyı sabitle, kalan bütçenin tamamını emirlere ayır ve böylece sıradan bir grafik yenileme döngüsünün bir stop emrinin gönderilmesini engellemesi imkânsız hâle gelsin. Bir satırlık ayar.
İzlenecek tek sayı
Borsalar kalan bütçeyi cevap başlıklarında bildiriyor. Bu değeri logla ve dakikalık en yüksek kullanımı takip et.
Kullanım tavanın yüzde yetmişini aşmaya başladıysa bir sonraki piyasa hareketinde sınıra çarpıyorsun, çünkü oynaklık arttığında bot daha sık sorgulama yapıyor. Sınırı canlıda öğrenmek yerine bu sayıyı izlemek çok daha ucuz.



