Skip to main content

Unofficial asynchronous python client for Huobi cryptoexchange

Project description

Unofficial asynchronous python client for Huobi

CI Python: versions

Official documentation

Documentation

Install

pip install asynchuobi

Generic API

from asynchuobi.api.clients.generic import GenericHuobiClient


async def main():
    async with GenericHuobiClient() as client:
        current_timestamp = await client.get_current_timestamp()
        trading_symbols = await client.get_all_supported_trading_symbols()
        system_status = await client.get_system_status()

Market API

from asynchuobi.api.clients.market import MarketHuobiClient
from asynchuobi.enums import CandleInterval


async def main():
    async with MarketHuobiClient() as client:
        candles = await client.get_candles('btcusdt', CandleInterval.min_1)
        orderbook = await client.get_market_depth('btcusdt')
        recent_trades = await client.get_most_recent_trades('btcusdt')

Subuser API

from asynchuobi.api.clients.subuser import SubUserHuobiClient
from asynchuobi.enums import ApiKeyPermission


async def main():
    async with SubUserHuobiClient(
        access_key='access_key',
        secret_key='secret_key',
    ) as client:
        subusers = await client.get_sub_users_list()
        for subuser in subusers['data']:
            keys = await client.api_key_query(subuser['uid'])
            status = await client.get_sub_user_status(subuser['uid'])
            balance = await client.get_account_balance_of_sub_user(subuser['uid'])
            api_key = await client.sub_user_api_key_creation(
                sub_uid=subuser['uid'],
                note='Test api',
                permissions=[ApiKeyPermission.readOnly, ApiKeyPermission.trade],
            )

Wallet API

from asynchuobi.api.clients.wallet import WalletHuobiClient


async def main():
    async with WalletHuobiClient(
        access_key='access_key',
        secret_key='secret_key',
    ) as client:
        deposit_address = await client.query_deposit_address('usdt')
        withdraw_address = await client.query_withdraw_address('usdt')
        withdraw_response = await client.create_withdraw_request(
            address='address',
            currency='usdt',
            amount=10
        )

Account API

from asynchuobi.api.clients.account import AccountHuobiClient
from asynchuobi.enums import AccountTypeCode, Sort


async def main():
    async with AccountHuobiClient(
        access_key='access_key',
        secret_key='secret_key',
    ) as client:
        accounts = await client.accounts()
        for account in accounts['data']:
            balances = await client.account_balance(account_id=account['id'])
            history = await client.get_account_history(
                account_id=account['id'],
                currency='usdt',
                transact_types=['deposit', 'withdraw'],
                sorting=Sort.desc,
            )

        for account_type in (AccountTypeCode.spot, AccountTypeCode.flat):
            total_valuation = await client.get_total_valuation_of_platform_assets(
                account_type_code=account_type,
                valuation_currency='BTC',
            )

Orders API

from asynchuobi.api.clients.order import OrderHuobiClient
from asynchuobi.enums import OrderType

async def main():
    async with OrderHuobiClient(
            access_key='access_key',
            secret_key='secret_key'
    ) as client:
        response = await client.new_order(
            account_id=account_id,
            symbol='dogeusdt',
            order_type=OrderType.buy_limit,
            amount=20,
            price=0.0660,
        )
        if response['status'] == 'ok':
            order_id = response['data']
            cancelling = await client.cancel_order(
                order_id=order_id,
            )
    
        active_orders = await client.get_all_open_orders()
        order_detail = await client.get_order_detail_by_client_order_id(
            client_order_id=client_order_id,
        )

Margin API

from asynchuobi.api.clients.margin import MarginHuobiClient


async def main():
    async with MarginHuobiClient(
        access_key='access_key',
        secret_key='secret_key',
    ) as client:
        cross_margin_balance = await client.get_balance_of_cross_margin_account()
        isolated_margin_balance = await client.get_balance_of_isolated_margin_account(
            symbol='btcusdt',
        )

WebSocket

Client supports retrieving information about market data, such as candles, orderbook, trade details.

Usage

from asynchuobi.enums import CandleInterval
from asynchuobi.ws.ws_client import WSHuobiMarket


async def main():
    async with WSHuobiMarket() as ws:
        await ws.candlestick('btcusdt', CandleInterval.min_1).sub()
        await ws.market_stats('btcusdt').sub()
        await ws.market_ticker_info('btcusdt').sub()
        await ws.orderbook('btcusdt').sub()
        async for message in ws:
            ...

You can define callbacks which will called when message was received from websocket

from typing import Dict

from asynchuobi.exceptions import WSHuobiError
from asynchuobi.ws.ws_client import WSHuobiMarket


def callback(msg: Dict):
    print(msg)


def error(e: WSHuobiError):
    print(e)


async def orderbook():
    async with WSHuobiMarket() as ws:
        await ws.orderbook('btcusdt').sub(callback=callback)
        await ws.run_with_callbacks(error_callback=error)

You can also define async callback

Retrieving information about account balance changing and about orders

Authentication is required

from asynchuobi.ws.ws_client import WSHuobiAccount


async def main():
    async with WSHuobiAccount('access_key', 'secret_key') as ws:
        await ws.subscribe_account_change()
        await ws.subscribe_order_updates('btcusdt')
        async for message in ws:
            ...

With callbacks

from asynchuobi.ws.ws_client import WSHuobiAccount
from asynchuobi.exceptions import WSHuobiError


def callback(message: dict):
    print(message)


def error(e: WSHuobiError):
    print(e)


async def main():
    async with WSHuobiAccount('access_key', 'secret_key') as ws:
        await ws.subscribe_account_change(
            callback=callback,
        )
        await ws.run_with_callbacks(error_callback=error)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asynchuobi-0.0.1.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

asynchuobi-0.0.1-py3-none-any.whl (27.3 kB view details)

Uploaded Python 3

File details

Details for the file asynchuobi-0.0.1.tar.gz.

File metadata

  • Download URL: asynchuobi-0.0.1.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.2

File hashes

Hashes for asynchuobi-0.0.1.tar.gz
Algorithm Hash digest
SHA256 196aff4058ac83e27ac5afa03f0191df737950416b3606b99c9ffa26800cde4a
MD5 8ed09c64b8fc2958e9bcfa120ce4b534
BLAKE2b-256 50450cc853aec9e1d8ae32d3bf94dc0ace11bb01d8908be498c33186e62e4cf5

See more details on using hashes here.

File details

Details for the file asynchuobi-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: asynchuobi-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 27.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.2

File hashes

Hashes for asynchuobi-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 80083f01b459a1282cff498206d9f6cbdbe41d85ea34dc749803da9e5592b8b4
MD5 451001c4901e150929b6b43ae605e771
BLAKE2b-256 31db5d49c03b4bfb66f505bc076658c6a23d3455112776de9e407a13a4253947

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page