Интеграция бота с API HTX
HTX (бывший Huobi) — одна из крупнейших азиатских бирж. API поддерживает spot, margin, futures. Особенности: аутентификация через HMAC-SHA256, специфическая структура WebSocket сообщений с gzip сжатием.
Подключение к HTX API
import ccxt
exchange = ccxt.htx({
'apiKey': API_KEY,
'secret': SECRET,
'enableRateLimit': True,
})
# Получение баланса
balance = exchange.fetch_balance()
usdt_balance = balance['USDT']['free']
# Размещение ордера
order = exchange.create_order(
symbol='BTC/USDT',
type='limit',
side='buy',
amount=0.001,
price=42000,
)
Прямое API с аутентификацией HTX
HTX использует специфическую схему подписи: URL-encode параметров в алфавитном порядке + HMAC-SHA256:
import hmac, hashlib, base64, urllib.parse, time
class HTXClient:
BASE_URL = 'https://api.huobi.pro'
def __init__(self, access_key: str, secret_key: str):
self.access_key = access_key
self.secret_key = secret_key
def _sign(self, method: str, path: str, params: dict) -> str:
params_sorted = sorted({
'AccessKeyId': self.access_key,
'SignatureMethod': 'HmacSHA256',
'SignatureVersion': '2',
'Timestamp': datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S'),
**params,
}.items())
query_string = urllib.parse.urlencode(params_sorted)
payload = f"{method}\napi.huobi.pro\n{path}\n{query_string}"
signature = hmac.new(
self.secret_key.encode('utf-8'),
payload.encode('utf-8'),
hashlib.sha256
).digest()
return base64.b64encode(signature).decode()
def get_accounts(self):
path = '/v1/account/accounts'
params = {}
sig = self._sign('GET', path, params)
response = requests.get(
f"{self.BASE_URL}{path}",
params={
**params,
'AccessKeyId': self.access_key,
'SignatureMethod': 'HmacSHA256',
'SignatureVersion': '2',
'Timestamp': datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S'),
'Signature': sig,
}
)
return response.json()
WebSocket с gzip
HTX WebSocket использует gzip сжатие — нужна распаковка:
import websockets, gzip, json
async def subscribe_htx():
async with websockets.connect('wss://api.huobi.pro/ws') as ws:
# Подписка на тикер
await ws.send(json.dumps({
'sub': 'market.btcusdt.ticker',
'id': 'ticker-sub',
}))
async for message in ws:
# Декомпрессия gzip
decompressed = gzip.decompress(message).decode('utf-8')
data = json.loads(decompressed)
# Ответ на ping (HTX требует pong в течение 5 сек)
if 'ping' in data:
await ws.send(json.dumps({'pong': data['ping']}))
continue
if 'ch' in data and 'tick' in data:
ticker = data['tick']
process_ticker(ticker['close'], ticker['vol'])
Rate Limits HTX
HTX ограничения: 10 запросов/сек для частных эндпоинтов, 100 запросов/сек для публичных. При превышении — ответ {"status":"error","err-code":"api-limit-reached"}.
HTX также поддерживает bulk order operations — размещение нескольких ордеров одним запросом, что помогает в rate limit управлении для high-frequency стратегий.
Интеграция бота с HTX API: 1–2 недели. CCXT абстрагирует большинство особенностей HTX, но прямое API нужно для специфических функций (bulk orders, margin, futures).







