WebSocket API Referansı
Balina pozisyonları, fonlama oranları, likidasyonlar ve AI onay skorları için gerçek zamanlı veri akışı. Otomatik yeniden bağlantı, verimli veri sıkıştırma ve çoklu akış abonelikleri ile saniyenin altında gecikme.
Genel Bakış
WebSocket API, gerçek zamanlı kripto para türev verileri için düşük gecikmeli, çift yönlü iletişim sağlar. REST endpoint'lerini her 5-30 saniyede bir sorgulamak yerine, WebSocket bağlantıları piyasa koşulları değiştiğinde güncellemeleri anında iletir. Alım satım botları, uyarı sistemleri ve gerçek zamanlı panolar için idealdir.
WebSocket'in REST'e göre temel avantajları:
Piyasayı hareketlendiren olaylar için saniyenin altında gecikme (likidasyonlar, balina hareketleri)
Delta kodlamalı güncellemelerle verimli bant genişliği kullanımı
Tek bağlantı üzerinde birden fazla eşzamanlı abonelik
Sunucu tarafında filtreleme ve toplama
Otomatik kalp atışı ve yeniden bağlantı işleme
Kotanıza karşı daha düşük API istek sayısı
WebSocket bağlantıları tüm API katmanları için mevcuttur. Ücretsiz katman kullanıcıları fonlama oranları ve likidasyon akışlarına abone olabilir. Trader ve Pro katmanları balina pozisyonları, açık pozisyon ve onay skorlarını açar.
Kimlik Doğrulama
WebSocket bağlantıları, REST endpoint'leriyle aynı kimlik doğrulamayı kullanır. API anahtarınızı bir sorgu parametresi olarak geçirin veya bağlandıktan sonra ilk mesajda gönderin.
Bağlantı URL'si
Temel WebSocket URL'si: wss://ws.smartmoneyapi.com/stream
Bağlantı URL'sine API anahtarınızı ekleyin:
wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789
Bağlantı Yaşam Döngüsü
İlk Bağlantı
WebSocket endpoint'ine bağlandığınızda, sunucu kimlik doğrulama belirtecinizi doğrular ve bir bağlantı onayı gönderir.
{
"type": "connection_ack",
"connection_id": "conn_1a2b3c4d5e6f7g8h",
"server_version": "1.2.4",
"timestamp": "2026-03-21T14:35:22Z",
"api_tier": "pro",
"max_subscriptions": 50,
"max_symbols_per_sub": 100
}
Kalp Atışı (Ping/Pong)
Sunucu her 30 saniyede bir periyodik kalp atışı ping'leri gönderir. İstemciniz bağlantıyı canlı tutmak için bir pong mesajıyla yanıt vermelidir. Sunucu 10 saniye içinde bir pong yanıtı almazsa bağlantı kapatılır.
const ws = new WebSocket("wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789");
ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
// Ping'e pong ile yanıt ver
ws.send(JSON.stringify({
type: "pong",
id: msg.id
}));
}
};
ws.onopen = () => {
console.log("WebSocket'e bağlandı");
};
Abonelikler
Bağlandıktan sonra, abonelik mesajlarını kullanarak veri akışlarına abone olun. Her abonelik, piyasa verileri değiştiğinde güncellemeler üretir.
Abonelik Mesajı Formatı
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"],
"params": {
"min_position_size": 10,
"exchanges": ["bybit", "binance"]
}
}
Abonelikten Çıkma Mesajı Formatı
{
"type": "unsubscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT"]
}
Balina Pozisyonları Akışı
İzlenen tüm semboller ve borsalardaki büyük balina pozisyonları için gerçek zamanlı güncellemeler. Balinalar pozisyon açtığında, kapattığında veya değiştirdiğinde güncellemeler gönderilir. Giriş fiyatı, mevcut fiyat, P&L, kaldıraç ve likidasyon riskini içerir.
{
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Güncelleme Mesajı
{
"type": "data",
"channel": "whale_positions",
"symbol": "BTCUSDT",
"data": {
"wallet_address": "0x1234...",
"exchange": "bybit",
"direction": "long",
"position_size": 25.3,
"entry_price": 41200.0,
"current_price": 43200.5,
"pnl": 50701.50,
"pnl_percent": 4.86,
"leverage": 8,
"liquidation_price": 33760.0,
"timestamp": "2026-03-21T14:35:45Z"
}
}
Fonlama Oranları Akışı
Bybit, Binance ve Hyperliquid üzerinden gerçek zamanlı fonlama oranı güncellemeleri. Her 1 dakikada veya oranlar önemli ölçüde değiştiğinde güncellemeler gönderilir. Bireysel borsa oranlarını ve toplu metrikleri içerir.
{
"type": "subscribe",
"channel": "funding_rates",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Güncelleme Mesajı
{
"type": "data",
"channel": "funding_rates",
"symbol": "BTCUSDT",
"data": {
"timestamp": "2026-03-21T14:00:00Z",
"bybit": {
"rate": 0.000120,
"next_rate": 0.000145
},
"binance": {
"rate": 0.000098,
"next_rate": 0.000115
},
"hyperliquid": {
"rate": 0.000140,
"next_rate": 0.000160
},
"aggregated": {
"mean": 0.000119,
"median": 0.000120,
"spread": 0.000062
}
}
}
Likidasyonlar Akışı
Kaldıraçlı pozisyonların zorla kapatılmasını gösteren gerçek zamanlı likidasyon beslemesi. Pozisyon büyüklüğü, likidasyon fiyatı, yön (long/short) ve borsayı içerir. Likidasyon kaskadlarını ve yüksek etkili piyasa hareketlerini belirlemek için kullanışlıdır.
{
"type": "subscribe",
"channel": "liquidations",
"params": {
"min_size_usd": 50000
}
}
Güncelleme Mesajı
{
"type": "data",
"channel": "liquidations",
"data": {
"exchange": "binance",
"symbol": "BTCUSDT",
"direction": "long",
"position_size": 12.5,
"liquidation_price": 41000.0,
"size_usd": 512500.0,
"timestamp": "2026-03-21T14:35:12Z"
}
}
Açık Pozisyon Akışı
Her semboldeki tüm kaldıraçlı yatırımcılar için toplam açık pozisyon. OI artışlarını (kaldıraçlı işlemlere daha fazla para girişi) ve azalışlarını (pozisyonların kapanması) takip edin. OI'nin fiyat hareketinden sapması, gizli boğa/ayı tükenişini belirler.
{
"type": "subscribe",
"channel": "open_interest",
"symbols": ["BTCUSDT", "ETHUSDT"]
}
Onay Skorları Akışı
Balina pozisyonları, zincir üstü sinyaller, fonlama oranları ve duygu verilerini birleştiren gerçek zamanlı AI onay skorları. Altta yatan sinyaller değiştiğinde skorlar güncellenir, alım satım algoritmaları için canlı giriş/çıkış sinyalleri sağlar.
{
"type": "subscribe",
"channel": "confirmation_scores",
"symbols": ["BTCUSDT", "ETHUSDT", "SOLUSDT"]
}
Otomatik Yeniden Bağlantı Mantığı
Ağ sorunları veya sunucu bakımı bağlantıların kesilmesine neden olabilir. Sunucu yüküne saygı gösterirken hatalardan otomatik olarak kurtulmak için üstel geri çekme yeniden bağlantı mantığını uygulayın.
Önerilen Yeniden Bağlantı Stratejisi
class SmartMoneyWebSocket {
constructor(token, options = {}) {
this.token = token;
this.maxReconnectDelay = options.maxReconnectDelay || 30000;
this.reconnectDelay = 1000;
this.subscriptions = new Map();
this.connect();
}
connect() {
this.ws = new WebSocket(
`wss://ws.smartmoneyapi.com/stream?token=${this.token}`
);
this.ws.onopen = () => {
console.log("Bağlandı");
this.reconnectDelay = 1000; // Geri çekmeyi sıfırla
this.resubscribe(); // Yeniden bağlandıktan sonra yeniden abone ol
};
this.ws.onmessage = (event) => {
const msg = JSON.parse(event.data);
if (msg.type === "ping") {
this.ws.send(JSON.stringify({ type: "pong", id: msg.id }));
}
this.onMessage(msg);
};
this.ws.onclose = () => this.reconnect();
this.ws.onerror = (err) => console.error("WebSocket hatası:", err);
}
reconnect() {
console.log(`Yeniden bağlanıyor: ${this.reconnectDelay}ms`);
setTimeout(() => {
this.connect();
this.reconnectDelay = Math.min(
this.reconnectDelay * 1.5,
this.maxReconnectDelay
);
}, this.reconnectDelay);
}
subscribe(channel, symbols, params) {
const key = `${channel}:${symbols.join(",")}`;
this.subscriptions.set(key, { channel, symbols, params });
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
resubscribe() {
for (const { channel, symbols, params } of this.subscriptions.values()) {
this.ws.send(JSON.stringify({ type: "subscribe", channel, symbols, params }));
}
}
onMessage(msg) {
if (msg.type === "data") {
console.log(`Güncelleme: ${msg.channel}/${msg.symbol}`, msg.data);
}
}
}
const client = new SmartMoneyWebSocket("sk_live_abc123xyz789");
client.subscribe("whale_positions", ["BTCUSDT", "ETHUSDT"]);
client.subscribe("funding_rates", ["BTCUSDT"]);
client.subscribe("liquidations", [], { min_size_usd: 100000 });
Kod Örnekleri
Python WebSocket İstemcisi
import asyncio
import json
import websockets
async def stream_whale_positions():
uri = "wss://ws.smartmoneyapi.com/stream?token=sk_live_abc123xyz789"
async with websockets.connect(uri) as websocket:
# Bağlantı onayını bekle
ack = await websocket.recv()
print(f"Bağlandı: {ack}")
# Balina pozisyonlarına abone ol
await websocket.send(json.dumps({
"type": "subscribe",
"channel": "whale_positions",
"symbols": ["BTCUSDT", "ETHUSDT"]
}))
# Güncellemeleri dinle
while True:
try:
msg = await websocket.recv()
data = json.loads(msg)
if data["type"] == "ping":
# Ping'e yanıt ver
await websocket.send(json.dumps({
"type": "pong",
"id": data["id"]
}))
elif data["type"] == "data":
print(f"Yeni pozisyon: {data['data']}")
except websockets.exceptions.ConnectionClosed:
print("Bağlantı kapandı, yeniden bağlanıyor...")
await asyncio.sleep(1)
asyncio.run(stream_whale_positions())
Abone olurken filtrele: Uygulamanızda filtreleme yapmak yerine, sunucu tarafında veri filtrelemek için params nesnesini kullanın (min_position_size, min_size_usd).
Toplu abonelikler: Sembol başına bir abonelik yerine tek bir mesajda birden fazla sembole abone olun.
Kullanılmayanları abonelikten çıkarın: Bir akışa artık ihtiyacınız olmadığında, bant genişliğini korumak ve mesaj hacmini azaltmak için abonelikten çıkın.
Gzip sıkıştırmasını kullanın: WebSocket istemcinizde mesaj sıkıştırmayı etkinleştirerek bant genişliği tasarrufu sağlayın (%20-40 azalma).
Bağlantı sağlığını izleyin: Ping/pong gecikmesini ve otomatik yeniden bağlantıları takip ederek ağ sorunlarını teşhis edin.
Bağlantı kesildiğinde mesajları tamponlayın: Bağlantı kesildiğinde, strateji sinyallerini sıraya alın ve yeniden bağlandığınızda bunları uygulayın.
Hemen Akışa Başlayın
API anahtarınızı alın ve gerçek zamanlı alım satım sistemleri oluşturmaya başlayın. WebSocket yayını tüm kademelerde mevcuttur.
API Anahtarı Al
Gerçek Zamanlı Alım Satım Sistemleri Oluşturun
Balina pozisyonlarını, fonlama oranlarını ve AI onay skorlarını saniyenin altında gecikme ile takip edin.
Planları Görüntüle