Skip to main content

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.7 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
from trio_websocket import ConnectionClosed

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

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

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

Multiple tables can be listened to concurrently, by running each listener in a seperate task using nursery.start_soon.

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.

If the websocket is closed, while a listener is still active, a trio-websocket.ConnectionClosed error will be raised by the generator, with the reason for the closure.

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.

Metadata

Release files for bitmex-trio-websocket 0.16.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bitmex-trio-websocket 0.16.1
File Size Uploaded Provenance
bitmex-trio-websocket-0.16.1.tar.gz 11.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for bitmex-trio-websocket 0.16.1
File Interpreter ABI Platform
bitmex_trio_websocket-0.16.1-py3-none-any.whl Python 3 none any Details

Total release size: 22.4 kB

Release files / bitmex-trio-websocket-0.16.1.tar.gz

Download URL bitmex-trio-websocket-0.16.1.tar.gz
Size 11.4 kB
Tags Source
SHA-256 checksum
How to use checksums
f02b0c6b3c295938c6d1548839d951d4fd4492c84f0bb050b417d6c60d93bf78
BLAKE2b-256 checksum
How to use checksums
3d7354e2148e85ea46d6b0675d50f1d991f6df73137dbb49131fb4479f19ad03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.11 CPython/3.9.9 Linux/5.11.0-1022-azure

Release files / bitmex_trio_websocket-0.16.1-py3-none-any.whl

Download URL bitmex_trio_websocket-0.16.1-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a0d2f3451397041dae90bdbd98809f0c2482895d2c8b7499277c6bf31eebe86b
BLAKE2b-256 checksum
How to use checksums
7855bdbcc88435f75d48ac0f39c8908586209ff21bb2de98a9f10de7a0678e8c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.11 CPython/3.9.9 Linux/5.11.0-1022-azure

Security for bitmex-trio-websocket 0.16.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.16.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page