Интеграция с CCXT (унифицированный API бирж)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1306 услуг
Интеграция с CCXT (унифицированный API бирж)
Средний
~2-3 дня
Часто задаваемые вопросы

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

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

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1286
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    902
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1122
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    589
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    859

Интеграция с CCXT (унифицированный API бирж)

CCXT (CryptoCurrency eXchange Trading Library) — библиотека с поддержкой 100+ бирж через единый интерфейс. Доступна для Python, JavaScript/TypeScript и PHP. Это де-факто стандарт для быстрой интеграции с несколькими биржами без написания кастомных коннекторов.

Установка

pip install ccxt          # Python
npm install ccxt          # JavaScript

Базовое использование (Python)

import ccxt
import asyncio

# Создание клиента
exchange = ccxt.binance({
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
    'enableRateLimit': True,  # Автоматическое соблюдение rate limits
    'options': {
        'defaultType': 'future',  # 'spot' или 'future'
    },
})

# Или async версия
exchange_async = ccxt.pro.binance({  # ccxt.pro для WebSocket
    'apiKey': 'YOUR_API_KEY',
    'secret': 'YOUR_SECRET',
})

Рыночные данные

# Загрузка OHLCV
ohlcv = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h', limit=500)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')

# Order book
orderbook = exchange.fetch_order_book('BTC/USDT', limit=20)
best_bid = orderbook['bids'][0][0]
best_ask = orderbook['asks'][0][0]
spread = best_ask - best_bid

# Ticker
ticker = exchange.fetch_ticker('BTC/USDT')
print(f"Last: {ticker['last']}, 24h Volume: {ticker['quoteVolume']:.0f} USDT")

Торговые операции

# Проверка баланса
balance = exchange.fetch_balance()
usdt_free = balance['USDT']['free']
btc_total = balance['BTC']['total']

# Market order
order = exchange.create_order(
    symbol='BTC/USDT',
    type='market',
    side='buy',
    amount=0.001,  # BTC
)

# Limit order с дополнительными параметрами
limit_order = exchange.create_order(
    symbol='BTC/USDT',
    type='limit',
    side='buy',
    amount=0.001,
    price=43000.0,
    params={
        'timeInForce': 'GTC',      # Good Till Cancelled
        'postOnly': True,          # только maker order
        'clientOrderId': 'my-order-001',
    }
)

# Отмена ордера
exchange.cancel_order(order['id'], 'BTC/USDT')

# История ордеров
my_orders = exchange.fetch_orders('BTC/USDT', limit=50)
open_orders = exchange.fetch_open_orders('BTC/USDT')
trades = exchange.fetch_my_trades('BTC/USDT', limit=100)

CCXT Pro: WebSocket

import asyncio
import ccxt.pro as ccxtpro

async def watch_market_data():
    exchange = ccxtpro.binance({'enableRateLimit': True})

    # Подписка на order book updates
    while True:
        orderbook = await exchange.watch_order_book('BTC/USDT')
        print(f"Best bid: {orderbook['bids'][0][0]}, Best ask: {orderbook['asks'][0][0]}")

async def watch_my_orders():
    exchange = ccxtpro.binance({
        'apiKey': 'YOUR_KEY',
        'secret': 'YOUR_SECRET',
    })

    while True:
        orders = await exchange.watch_orders('BTC/USDT')
        for order in orders:
            print(f"Order update: {order['id']} - {order['status']}")

# Запуск нескольких потоков
async def main():
    await asyncio.gather(
        watch_market_data(),
        watch_my_orders(),
    )

asyncio.run(main())

Обработка ошибок

from ccxt.base.errors import (
    NetworkError, ExchangeError, InsufficientFunds,
    InvalidOrder, OrderNotFound, RateLimitExceeded
)

async def safe_place_order(exchange, symbol, side, amount, price=None):
    for attempt in range(3):
        try:
            return await exchange.create_order(
                symbol=symbol,
                type='limit' if price else 'market',
                side=side,
                amount=amount,
                price=price,
            )

        except InsufficientFunds as e:
            raise  # Не повторяем

        except RateLimitExceeded:
            await asyncio.sleep(exchange.rateLimit / 1000 * 2)

        except NetworkError as e:
            if attempt == 2:
                raise
            await asyncio.sleep(2 ** attempt)

        except ExchangeError as e:
            logger.error(f"Exchange error: {e}")
            raise

Унификация символов

CCXT использует единый формат символов BASE/QUOTE (например BTC/USDT), но при необходимости предоставляет биржеспецифичный символ:

market = exchange.market('BTC/USDT')
exchange_symbol = market['id']  # 'BTCUSDT' на Binance, 'BTC/USDT' на Kraken

Ограничения CCXT

  • Не всегда актуален при изменениях API биржи (задержка обновлений)
  • Overhead по сравнению с прямой интеграцией
  • Не поддерживает все специфические функции каждой биржи
  • CCXT Pro (WebSocket) требует отдельной лицензии для коммерческого использования

Для прототипирования и небольших проектов CCXT — отличный выбор. Для high-frequency trading или систем с критичным latency лучше писать кастомные коннекторы.