Skip to main content

Websocket implementation for BitMEX cryptocurrency derivatives exchange.

Project description

BitMEX Trio-Websocket

PyPI Build Status

Websocket implementation for BitMEX cryptocurrency derivatives exchange.

  • Free software: MIT license

Features

  • Supports authenticated connections using api keys.
  • Uses SortedDict as backend storage for easy and fast table searching.
  • Fully async using async generators. No callbacks or event emitters.
  • Based on Slurry and Slurry-websocket.

Installation

This library requires Python 3.6 or greater.

To install from PyPI:

pip install bitmex-trio-websocket

Client example

import trio
from async_generator import aclosing

from bitmex_trio_websocket import open_bitmex_websocket

async def main():
    async with open_bitmex_websocket('testnet') as bws:
        async with aclosing(bws.listen('instrument')) as agen:
            async for msg in agen:
                print(f'Received message, symbol: \'{msg["symbol"]}\', timestamp: \'{msg["timestamp"]}\'')

if __name__ == '__main__':
    trio.run(main)

This will print a sequence of dicts for each received item on inserts (including partials) or updates.

API

async def

Creates a new websocket object.

This is an async context manager, so it needs to be used with the async with .. as ..: construct. The returned value is a BitMEXWebsocket object.

network str

Network to connect to. Options: 'mainnet', 'testnet'.

api_key Optional[str]

Api key for authenticated connections.

api_secret Optional[str]

Api secret for authenticated connections.

dead_mans_switch Optional[bool]

When enabled, the websocket will periodically send cancelAllAfter messages with a timeout of 60 seconds. The timer is refreshed every 15 seconds.

See: https://www.bitmex.com/app/wsAPI#Dead-Mans-Switch-Auto-Cancel

bitmex__trio__websocket.BitMEXWebsocket

await listen

Subscribes to the channel and optionally a specific symbol. It is possible for multiple listeners to be listening using the same subscription.

Returns an async generator object that yields messages from the channel.

table str

Channel to subscribe to.

symbol Optional[str]

Optional symbol to subscribe to.

storage

This attribute contains the storage object for the websocket. The storage object caches the data tables for received items. The implementation uses SortedDict from Sorted Containers, to handle inserts, updates and deletes.

The storage object has two public attributes data, and keys.

data contains the table state for each channel as a dictionary with the table name as key. The tables are sorted dictionaries, stored with key tuples generated from each item using the keys schema received in the initial partial message.

data['orderBookL2'] is a special state dictionary for the orderBookL2 table. It is a double nested defaultdict, with a SortedDict containing each price level. The nested dictionaries are composed like this:

# Special storage for orderBookL2
# dict[symbol][side][id]
self.data['orderBookL2'] = defaultdict(lambda: defaultdict(SortedDict))

keys contains a mapping for lists of keys by which to look up values in each table.

In addition the following helper methods are supplied:

make_key(table, match_data) creates a key for searching the data table. Raises ValueError if table == 'orderBookL2', since this table needs special indexing.

parse_timestamp(timestamp) static method for converting BitMEX timestamps to datetime with timezone (UTC).

Credits

Thanks to the Trio and Trio-websocket libraries for their awesome work.

The library was originally based on the reference client, but is now substantially redesigned.

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

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

bitmex-trio-websocket-0.12.2.tar.gz (11.0 kB view details)

Uploaded Source

Built Distribution

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

bitmex_trio_websocket-0.12.2-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

Details for the file bitmex-trio-websocket-0.12.2.tar.gz.

File metadata

  • Download URL: bitmex-trio-websocket-0.12.2.tar.gz
  • Upload date:
  • Size: 11.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.2 CPython/3.9.4 Linux/5.4.0-1046-azure

File hashes

Hashes for bitmex-trio-websocket-0.12.2.tar.gz
Algorithm Hash digest
SHA256 3835b45d1eb9d0618610ab8e37e3870e32cedc9fd9bcb80177542a46a540129e
MD5 11810fffac3aca15f606527db9d972eb
BLAKE2b-256 2b40262bb715c53d5122a096f7f8b597e1fecca907a105d70d8361709a7e0330

See more details on using hashes here.

File details

Details for the file bitmex_trio_websocket-0.12.2-py3-none-any.whl.

File metadata

File hashes

Hashes for bitmex_trio_websocket-0.12.2-py3-none-any.whl
Algorithm Hash digest
SHA256 604163f8f81c634c40fbee610e5a315d0ce8df74ac339266112159b466965229
MD5 0079708cd362db95bcdb24a9a9b56475
BLAKE2b-256 9dc31c835b3879d37205e9ee3012e04bd7b09803694e0c38e98a890b7c70b136

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