Python3 websocket client (SignalR) for getting live streaming data from Bittrex Exchange.
I am not associated with Bittrex. Use the library at your own risk, I don't bear any responsibility if you end up losing your money.
As of 24 Nov 2017, there is still no official websocket documentation.
The code is licensed under the MIT license. Please consider the following message:
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
It's a newly published library so please test it and report for any bugs. Much appreciated.
You can use it for various purposes, some examples include:
- maintaining live order book
- recording trade history
- analysing order flow
Use your imagination
I am fairly new to Python and in my experience the best way to learn something is through actual practice. At the same time I am currently actively trading on Bittrex, hence the reason why I decided to build the Bittrex websocket client. I am publishing my code for a few reasons. Firstly, I want to make a contribution to the community, secondly the code needs lots of improvements and it would be great to work on it as a team, thirdly I haven't seen any other Python Bittrex websocket clients so far.
I have been largely motivated by the following projects and people:
-
Daniel Paquin: gdax-python - a websocket client for GDAX. The project really helped me around using threads and structuring the code.
-
David Parlevliet - saw his SignalR code initially which included Bittrex specific commands. Saved me a lot of time in researching.
-
Eric Somdahl: python-bittrex - great python bindings for Bittrex. Highly recommend it, I use it in conjuction with the websocket client.
More user friendly subscription to the exchange channels by wrapping the callbacks in methods.
- Test scripts
- PyPi
- Better documentation
- Code cleanup, optimization
- Better error handling
- Lots of stuff, waiting for suggestions
To successfully install the package the following dependencies must be met:
- requests[security]
- g++, make, libffi-dev, openssl-dev
- signalr-client
- g++, make
I have added a Dockerfile for а quick setup. Please check the docker folder.
I am only adding this as a precaution, in most case you will not have to do anything at all as these are prepackaged with your python installation.
pip install git+https://github.com/slazarov/python-bittrex-websocket.git
:param tickers: a list of tickers, single tickers should also be supplied as a list. Default: ['ETH-BTC']
:type tickers: []
:param conn_type: 'normal' direct connection or 'cloudflare' workaround. Default: 'normal
:type conn_type: str
:param book_depth: The depth of the order book, Default: 10
:type book_depth: int
To receive live data feed you must subscribe to the websocket.
# Parameters
tickers = tickers = ['BTC-ETH']
conn_type='cloudflare'
ws = bittrex_websocket.BittrexSocket(tickers, conn_type)
ws.run()
# Do some stuff and trade for infinite profit
ws.stop()
# Parameters
tickers = tickers = ['BTC-ETH', 'ETH-1ST', 'BTC-1ST', 'BTC-NEO', 'ETH-NEO']
ws = bittrex_websocket.BittrexSocket(tickers)
ws.run()
# Do some stuff and trade for infinite profit
ws.stop()
The websocket clients starts a separate thread upon initialization with further subthreads for each connection (currently 20 tickers per connection). There are several methods which could be overwritten. Please check the actual code for further information and examples.
Called before initiating the websocket connection Use it when you want to add optional parameters
Called after closing the websocket connection Use it when you want to add any closing logic.
Debug information, shows all data, this is where you get order book snapshots. Please check bittrex_websocket.OrderBook for further information.
Handle any errors from the websocket here. Future releases will handle errors without having to do it yourself.
This is the main method which you will use. Messages contain the order flow stream. Check bittrex_websocket.BittrexSocket for the structure and further information.
Some sample examples to get you started.
import bittrex_websocket
from time import sleep
if __name__ == "__main__":
class MyBittrexSocket(bittrex_websocket.BittrexSocket):
def on_open(self):
self.nounces = []
self.msg_count = 0
def on_debug(self, **kwargs):
pass
def on_message(self, *args, **kwargs):
self.nounces.append(args[0])
self.msg_count += 1
t = ['BTC-ETH', 'ETH-1ST', 'BTC-1ST', 'BTC-NEO', 'ETH-NEO']
ws = MyBittrexSocket(t)
ws.run()
while ws.msg_count < 20:
sleep(1)
continue
else:
for msg in ws.nounces:
print(msg)
ws.stop()
import bittrex_websocket
from time import sleep
if __name__ == "__main__":
tickers = ['BTC-ETH', 'ETH-1ST', 'BTC-1ST', 'BTC-NEO', 'ETH-NEO']
order_book = bittrex_websocket.OrderBook(tickers)
order_book.run()
# Do some sample work
# Wait until the order book snapshots are identified and confirmed
while len(order_book.socket_order_books) < len(order_book.tickers):
sleep(5)
else:
for ticker in order_book.socket_order_books.values():
name = ticker['MarketName']
quantity = str(ticker['Buys'][0]['Quantity'])
price = str(ticker['Buys'][0]['Rate'])
print('Ticker: ' + name + ', Bids depth 0: ' + quantity + '@' + price)
order_book.stop()
0.0.1 - Initial release on github.
If you find this package helpful and would like to support it, you can do it through here:
Coin | Address |
---|---|
BTC | 18n4eKg8PB1USs5f95MK34JA4KmaV1YhT2 |
ETH | 0xf5a6431ac4acd8b1e5c8b56b9b45e04cdea20e6e |
LTC | LZT8o523jwa8ZmgMjPLNMJeVeBnLuAvRvc |
ZEC | t1dhA8QqVsXHR8jGp34a1EY8mM7bZ9FjhTW |