Welcome to python-idex v1.0.0

https://img.shields.io/pypi/v/python-idex.svg https://img.shields.io/pypi/l/python-idex.svg https://img.shields.io/travis/sammchardy/python-idex.svg https://img.shields.io/coveralls/sammchardy/python-idex.svg https://img.shields.io/pypi/wheel/python-idex.svg https://img.shields.io/pypi/pyversions/python-idex.svg

This is an unofficial Python wrapper for the IDEX exchanges REST API v1. I am in no way affiliated with IDEX, use at your own risk.

PyPi
https://pypi.python.org/pypi/python-idex
Source code
https://github.com/sammchardy/python-idex
Documentation
https://python-idex.readthedocs.io/en/latest/

Features

  • Implementation of all REST endpoints except for deposit.
  • Helper functions for your wallet address
  • Response exception handling
  • Websockets for Python 3.5+

Upgrading

If you’ve been using an older version of python-idex < 1.0.0 you will need to use an API Key for the REST client and websocket client. See examples below.

Quick Start

Register an account with IDEX.

pip install python-idex

Synchronous Examples

api_key = 'api:jVXLd5h1bEYcKgZbQru2k'
address = '<address_string>'
private_key = '<private_key_string>'

from idex.client import Client
client = Client(api_key, address, private_key)

# get currencies
currencies = client.get_currencies()

# get market depth
depth = client.get_order_book('ETH_SENT')

# get your balances
balances = client.get_my_balances()

# get your open orders
orders = client.get_my_open_orders('ETH_SENT')

# create a limit order
order = client.create_order('SENT', 'ETH', '0.001', '10000')

Async Examples for Python 3.5+

from idex.asyncio import AsyncClient, IdexSocketManager, SubscribeCategory

loop = None

async def main():
    global loop

    # Initialise the client
    client = await AsyncClient(api_key, address, private_key)

    # get currencies
    currencies = await client.get_currencies()

    # get market depth
    depth = await client.get_order_book('ETH_SENT')

    # get your balances
    balances = await client.get_my_balances()

    # get your open orders
    orders = await client.get_my_open_orders('ETH_SENT')

    # create a limit order
    order = await client.create_order('SENT', 'ETH', '0.001', '10000')

    # Coroutine to receive messages
    async def handle_evt(msg):
        print(f"event:{msg['event']} payload:{msg['payload']}")
        # do something with this event

    # Initialise the socket manager with the callback funciton
    ism = await IdexSocketManager.create(loop, handle_evt, api_key)

    # Subscribe to updates for the ETH_SENT, ETH_AURA and ETH_IDXM market for cancels, orders and trades
    await ism.subscribe(
        SubscribeCategory.markets,
        ['ETH_SENT', 'ETH_AURA', 'ETH_IDXM'],
        ['market_cancels', 'market_orders', 'market_trades']
    )

    # keep the script running so we can retrieve websocket events
    while True:
        await asyncio.sleep(20, loop=loop)


if __name__ == "__main__":
    # get a loop and switch from synchronous to async
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

For more check out the documentation.

TODO

  • Deposit endpoints