Websocket implementation for BitMEX cryptocurrency derivatives exchange.
Project description
BitMEX Trio-Websocket
Websocket implementation for BitMEX cryptocurrency derivatives exchange.
- Free software: MIT license
- Documentation: https://bitmex-trio-websocket.readthedocs.io.
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 trio and trio-websocket.
Installation
This library requires Python 3.7 or greater. It could probably be made to run with Python 3.6, since this is the minimal version where async generators are supported. To install from PyPI:
pip install bitmex-trio-websocket
Client example
import trio
from bitmex_trio_websocket import BitMEXWebsocket
async def main():
async with BitMEXWebsocket.connect('testnet') as bws:
async for msg in bws.listen('instrument'):
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.
Note, that delete actions are simply applied and consumed, with no output sent.
API
Creates a new websocket 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.
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.
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 three public attributes data
, orderbook
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.
orderbook
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.orderbook = 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.
parse_timestamp(timestamp)
static method for converting BitMEX timestamps to datetime with timezone (UTC).
When connected, contains the underlying trio-websocket object. Can be used to manage the connection.
See - https://trio-websocket.readthedocs.io/en/stable/api.html#connections
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for bitmex-trio-websocket-0.4.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | e309adf0053d6b479ef5b3d1f753f69ff6d5a09c4110edf553e7fa9ebc7eef0c |
|
MD5 | 88a857dfc8a3bc8f7042877f1dd2527c |
|
BLAKE2b-256 | 435da186737d277e14d73950a8f83f5cffc6ab31539221b2957dee5a31ef66be |
Hashes for bitmex_trio_websocket-0.4.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d6e2364bcf850d124b883509ffec686b1e0fd638722f8cd78add191c9e527efd |
|
MD5 | 239566dd24fc02f3e64a55d95621caea |
|
BLAKE2b-256 | 629e73ec5a34b9abdc9fc03341916c55bd04b999bfe3f33d9d75e9719e368d2b |