Інтеграція бота з 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'])
Обмеження швидкості HTX
HTX обмеження: 10 запитів/сек для приватних endpoints, 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).







