Автоматический перевод между суб-аккаунтами Binance на Python

Автоматический перевод между суб-аккаунтами Binance на Python Python & API
Пошаговое руководство по созданию Python-скрипта для автоматического перевода средств между суб-аккаунтами Binance через API с подписью HMAC-SHA256.
Суть: Пошаговое руководство по созданию Python-скрипта для автоматического перевода активов между суб-аккаунтами Binance через Universal Transfer API с использованием подписи HMAC-SHA256.

Исходный код

Для автоматизации управления ликвидностью на бирже Binance часто требуется перераспределять средства между суб-аккаунтами. В отличие от децентрализованных систем, где требуется криптографическая подпись транзакций (подробнее об этом читайте в статье Подпись API-запросов ECDSA для dYdX V4 на Python: Руководство), централизованные биржи используют симметричное шифрование HMAC-SHA256 для авторизации запросов.

Ниже представлен готовый класс на Python для выполнения универсальных переводов между суб-аккаунтами. Этот инструмент незаменим при оптимизации торговых стратегий и управлении комиссиями (о расчете которых можно узнать в материале Расчет комиссий мейкера/тейкера (Fee Tiers) в CCXT Python).

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

class BinanceSubAccountTransfer:
    def __init__(self, api_key: str, api_secret: str):
        self.api_key = api_key
        self.api_secret = api_secret
        self.base_url = 'https://api.binance.com'

    def _sign(self, params: dict) -> str:
        query_string = urlencode(params)
        return hmac.new(
            self.api_secret.encode('utf-8'),
            query_string.encode('utf-8'),
            hashlib.sha256
        ).hexdigest()

    def transfer(self, from_email: str, to_email: str, asset: str, amount: float, from_type: str = 'SPOT', to_type: str = 'SPOT'):
        endpoint = '/sapi/v1/sub-account/universalTransfer'
        url = f'{self.base_url}{endpoint}'
        
        params = {
            'fromEmail': from_email,
            'toEmail': to_email,
            'fromAccountType': from_type,
            'toAccountType': to_type,
            'asset': asset,
            'amount': str(amount),
            'timestamp': int(time.time() * 1000)
        }
        
        params['signature'] = self._sign(params)
        
        headers = {
            'X-MBX-APIKEY': self.api_key
        }
        
        response = requests.post(url, headers=headers, params=params)
        return response.json()

Разбор параметров

  • fromEmail: Email-адрес отправителя (суб-аккаунта или мастер-аккаунта).
  • toEmail: Email-адрес получателя (суб-аккаунта или мастер-аккаунта).
  • fromAccountType: Тип аккаунта-отправителя (например, SPOT, USDT_FUTURE, COIN_FUTURE).
  • toAccountType: Тип аккаунта-получателя (например, SPOT, USDT_FUTURE).
  • asset: Тикер переводимого актива (например, USDT, BTC).
  • amount: Объем переводимых средств в формате числа с плавающей точкой.

Как запустить

Для запуска скрипта вам понадобятся API-ключи мастер-аккаунта Binance с включенными правами на управление суб-аккаунтами (Sub-Account API). Убедитесь, что IP-адрес вашего сервера добавлен в белый список для обеспечения безопасности.

Установите библиотеку requests, если она еще не установлена:

pip install requests

Инициализируйте класс BinanceSubAccountTransfer, передав ваши ключи, и вызовите метод transfer. В отличие от высокочастотного трейдинга в DeFi (например, как описано в статье Реализация Token Sniping на PancakeSwap через Mempool с Python), переводы между суб-аккаунтами внутри Binance происходят мгновенно и без сетевых комиссий блокчейна.

Оцените статью
FinFluct