Исходный код
Для автоматизации управления ликвидностью на бирже 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 происходят мгновенно и без сетевых комиссий блокчейна.




