Skip to main content

Asynchronous cryptocurrency REST and websocket API with support for multiple exchanges.

Project description

cryptoapi

Asynchronous cryptocurrency REST and websocket API with support for multiple exchanges.

Cryptoapi is built on top of the fantastic CCXT library. If you plan to do any serious trading, I would recommend paying for access to CCXT Pro because cryptoapi is still in development.

Installation

Cryptoapi is available on PyPI.

It is recommended to use the --user flag on package installations. Drop the flag if installing cryptoapi system-wide.

pip install --user cryptoapi

Usage

The API currently supports Bitfinex (API version 2), Bitvavo, Coinbase Pro, and Kraken.

Unified Methods

Each exchange has four unified websocket methods in addition to the REST methods provided by CCXT. All results are formatted the same as in the CCXT library.

All of the methods put the results received from the exchange in the exchange_instance.result asyncio queue. The results can be retrieved by using the .get() corountine method on the queue.

  • subscribe_ticker: ticker as a dictionary.
  • subscribe_trades: a list of trades recieved from the exchange.
  • subscribe_ohlcvs: a list of [timestamp, open, high, low, close, volume] candles, often just one candle is present (the candle for the timeframe provided, which is one minute by default).
  • subscribe_order_book: the data sent to the queue is the update from the exchange. Cryptoapi automatically keeps an updated order book for every instance (see the Local Order Book section below).

Example

Note that asyncio must be available to take advantage of asynchronous capabilities. The results from the exchanges are stored in the exchange.result asyncio queue in the form of (channel, data) tuples. The channel in this example is 'order_book'. The data is the reply from the exchange.

import asyncio
import cryptoapi


async def main():
    exchanges = [
        cryptoapi.Bitfinex(),
    ]
    for exchange in exchanges:
        await exchange.load_markets()
    symbols = ['BTC/EUR', 'ETH/EUR']
    tasks = [
        asyncio.create_task(exchange.subscribe_order_book(symbols))
        for exchange in exchanges
    ]
    tasks.append(asyncio.create_task(get_results(exchanges, symbols)))
    for t in tasks:
        await t
    for exchange in exchanges:
        exchange.close()


async def get_results(exchanges, symbols):
    while True:
        for exchange in exchanges:
            for symbol in symbols:
                if symbol in exchange.symbols:
                    channel, data = await exchange.result.get()
                    print(data)


if __name__ == "__main__":
    asyncio.run(main())

Local Order Book

If you subscribe to an order book channel, cryptoapi will keep a local copy of the order book in the exchange.order_book dictionary. Keep in mind that this dictionary is tied to the exchange instance, so if you have multiple instances of the same exchange you will also have multiple order books. An example structure of the dictionary is outlined below.

{
    'BTC/USD': {
        'bids': [[11111, 1.7], ...]             # [price, amount] sorted by price in descending order (best bid first).    
        'asks': [[11112, 3], ...]               # [price, amount] sorted by price in ascending order (best ask first).
        'timestamp': 1596729013,                # Unix timestamp for when the book was last updated.
        'datetime': '2020-08-06T15:50:56.714Z', # iso860 datetime. Computed from the timestamp property.
        'nonce': 109335233,                     # Exchange-provided nonce. None if not provided.
    },
    ...
}

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

cryptoapi-0.1.22.tar.gz (14.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cryptoapi-0.1.22-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

File details

Details for the file cryptoapi-0.1.22.tar.gz.

File metadata

  • Download URL: cryptoapi-0.1.22.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.3

File hashes

Hashes for cryptoapi-0.1.22.tar.gz
Algorithm Hash digest
SHA256 72d7aedba2aeb4208e53036bdff8c7854ad1f1db96b2a893451c6a398b44380a
MD5 ba2a454c79fa0c69b3f7d6b17722f6d9
BLAKE2b-256 1452dacbe9fbea1102582e1a0d2831c59e28e29ebc2ab532df18423503b55b1c

See more details on using hashes here.

File details

Details for the file cryptoapi-0.1.22-py3-none-any.whl.

File metadata

  • Download URL: cryptoapi-0.1.22-py3-none-any.whl
  • Upload date:
  • Size: 14.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.3

File hashes

Hashes for cryptoapi-0.1.22-py3-none-any.whl
Algorithm Hash digest
SHA256 a070ccdf9deee9bc7fa209d4cb56ecff3a43dc52b028b763e89e82a6d55b11e2
MD5 eb3bdd112890366074e4aa83a4d7dee2
BLAKE2b-256 7d5bd9806fa2cc94384954939364662c118773b3076ab45d272c5fa1127b8dfb

See more details on using hashes here.

Supported by

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