Інтеграція бота з API Binance

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція бота з API Binance
Простий
~2-3 дні
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1307
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1219
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    920
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1148
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    611
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    886

Інтеграція бота з API Binance

Binance — найбільша криптобіржа за обсягом торгів. API добре задокументовано, стабільне та пропонує широкі можливості: spot, margin, futures та options. Для більшості торговельних ботів Binance — перший вибір завдяки ліквідності та зрілості API.

Типи Binance API

  • Spot API: Базова торгівля, баланси та історія
  • Margin API: Маржинальна торгівля
  • Futures API (FAPI): USD-M perpetual futures
  • Coin-M Futures (DAPI): COIN-M futures
  • WebSocket Streams: Дані ринку в реальному часі

Підключення через CCXT

import ccxt.async_support as ccxt

# Spot
spot = ccxt.binance({
    'apiKey': API_KEY,
    'secret': SECRET,
    'options': {'defaultType': 'spot'},
    'enableRateLimit': True,
})

# Futures (USDT-M Perpetual)
futures = ccxt.binance({
    'apiKey': API_KEY,
    'secret': SECRET,
    'options': {'defaultType': 'future'},
})

async def get_ticker(symbol: str):
    return await spot.fetch_ticker(symbol)

async def place_futures_order(symbol: str, side: str, quantity: float, leverage: int = 10):
    # Встановлюємо плече
    await futures.set_leverage(leverage, symbol)
    
    return await futures.create_order(symbol, 'market', side, quantity)

WebSocket для даних в реальному часі

import websockets, json, asyncio

async def subscribe_streams():
    streams = [
        'btcusdt@bookTicker',  # найкращі bid/ask
        'btcusdt@aggTrade',    # агреговані угоди
        'btcusdt@kline_1m',    # свічки 1m
    ]
    
    url = f"wss://stream.binance.com:9443/stream?streams={'/'.join(streams)}"
    
    async with websockets.connect(url) as ws:
        async for message in ws:
            data = json.loads(message)
            stream = data['stream']
            payload = data['data']
            
            if '@bookTicker' in stream:
                process_book_ticker(payload)
            elif '@aggTrade' in stream:
                process_trade(payload)
            elif '@kline' in stream:
                process_kline(payload['k'])

User Data Stream (приватний WebSocket)

Для оновлення ордерів та балансів у реальному часі без polling:

async def start_user_data_stream():
    # 1. Отримуємо listen key
    listen_key = await get_listen_key()  # REST: POST /api/v3/userDataStream
    
    # 2. Підписуємось
    url = f"wss://stream.binance.com:9443/ws/{listen_key}"
    
    async with websockets.connect(url) as ws:
        # 3. Keepalive кожні 30 хвилин
        asyncio.create_task(keepalive_listen_key(listen_key))
        
        async for message in ws:
            event = json.loads(message)
            
            if event['e'] == 'executionReport':
                # Оновлення ордера
                order_id = event['i']
                status = event['X']  # NEW, PARTIALLY_FILLED, FILLED, CANCELED
                filled_qty = event['z']
                last_price = event['L']
                
                process_order_update(order_id, status, filled_qty, last_price)
            
            elif event['e'] == 'outboundAccountPosition':
                # Оновлення балансу
                for asset in event['B']:
                    process_balance_update(asset['a'], asset['f'], asset['l'])

Обмеження швидкості

Binance має два типи обмежень:

  • Request Weight Limit: 6000 weight/хвилину. Різні endpoints мають різну вагу (GET /ticker/price = 1, GET /depth?limit=5000 = 250)
  • Order Rate Limit: 10 ордерів/сек, 100,000 ордерів/24 години
# Перевіряємо заголовки rate limit у кожній відповіді
async def check_rate_limits(response_headers: dict):
    used_weight = int(response_headers.get('X-MBX-USED-WEIGHT-1M', 0))
    order_count = int(response_headers.get('X-MBX-ORDER-COUNT-10S', 0))
    
    if used_weight > 5000:  # > 83% обмеження — сповільнюємось
        await asyncio.sleep(1)
    if order_count > 8:  # > 80% обмеження — пауза
        await asyncio.sleep(0.5)

Інтеграція торговельного бота з API Binance (spot або futures) з потоком даних WebSocket та user data stream: 1–2 тижні. Binance sandbox (https://testnet.binance.vision/) доступна для тестування без реальних грошей.