Python ile Binance Futures API'sinden Bakiye Sorgulama (İmzalı İstek)

kusha · 03 Ağustos 2026 · 6 dk okuma

Fiyat gibi herkese açık verilerin aksine, hesabınızın bakiyesi gibi özel bilgilere erişmek için Binance'in isteğinizin gerçekten sizin API anahtarınızla gönderildiğini doğrulayabilmesi gerekir. Bu doğrulama, her isteğe eklenen bir imza (signature) ile yapılır.

Bu derste kullanılan API anahtarları yalnızca okuma ve işlem yetkisiyle sınırlı tutulmalı, asla kod içine sabit metin olarak yazılmamalı, bir ortam değişkeninde veya .env dosyasında saklanmalıdır.

API Anahtarlarını Güvenli Saklamak

import os

API_KEY = os.environ["BINANCE_API_KEY"]
API_SECRET = os.environ["BINANCE_API_SECRET"]

İmza Nasıl Oluşturulur

Binance, isteğin parametrelerinin sorgu dizesini (query string), gizli anahtarınızla (secret key) HMAC-SHA256 algoritmasından geçirmenizi ister:

import hmac
import hashlib
import time
from urllib.parse import urlencode

def imzali_parametre_olustur(params: dict) -> dict:
    params["timestamp"] = int(time.time() * 1000)
    sorgu_dizesi = urlencode(params)
    imza = hmac.new(
        API_SECRET.encode("utf-8"),
        sorgu_dizesi.encode("utf-8"),
        hashlib.sha256,
    ).hexdigest()
    params["signature"] = imza
    return params

timestamp parametresi zorunludur — Binance, isteğin sunucu saatine göre belirli bir süre (varsayılan 5 saniye) içinde gönderildiğini doğrular; bu, eski bir isteğin kopyalanıp tekrar gönderilmesini (replay attack) zorlaştırır.

İsteği Göndermek: Header'da API Anahtarı

import requests

FUTURES_BASE_URL = "https://fapi.binance.com"

def bakiye_al():
    url = f"{FUTURES_BASE_URL}/fapi/v2/balance"
    headers = {"X-MBX-APIKEY": API_KEY}
    params = imzali_parametre_olustur({})

    response = requests.get(url, headers=headers, params=params)
    return response.json()

bakiyeler = bakiye_al()
for varlik in bakiyeler:
    if float(varlik["balance"]) > 0:
        print(f"{varlik['asset']}: {varlik['balance']}")

İmza, X-MBX-APIKEY header'ından ayrı bir kavramdır: header sizin kim olduğunuzu, imza ise isteğin değiştirilmediğini ve gerçekten sizin tarafınızdan gönderildiğini kanıtlar.

Sadece USDT Bakiyesini Görmek

def usdt_bakiyesi_al():
    bakiyeler = bakiye_al()
    for varlik in bakiyeler:
        if varlik["asset"] == "USDT":
            return float(varlik["balance"])
    return 0.0

print(f"USDT Bakiyesi: {usdt_bakiyesi_al()}")

Yaygın Bir Hata: Zaman Senkronizasyonu

Bilgisayarınızın saati Binance sunucularıyla yeterince senkronize değilse, doğru imzayla bile Timestamp for this request is outside of the recvWindow hatası alabilirsiniz. Bunu çözmek için işletim sisteminizin saatini otomatik senkronize etmesini sağlayın veya isteğe isteğe bir recvWindow parametresi (örn. 5000-10000 ms) ekleyerek toleransı artırabilirsiniz.

Sırada Ne Var?

Sırada, bu imzalı istek altyapısını kullanarak gerçek bir vadeli işlem pozisyonu açmayı ve kaldıracı ayarlamayı göreceğiz.