Skip to content

Commit

Permalink
Merge pull request #162 from itsdeka/ob
Browse files Browse the repository at this point in the history
added full_orderbook.py example
  • Loading branch information
vigan-abd authored Aug 12, 2021
2 parents ab166f7 + d5370b1 commit 09a9b8f
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 2 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
1.2.1
-) Added orderbook implementation example (ws)

1.2.0
-) Implemented Margin Info (rest)
-) Implemented claim position (rest)
Expand Down
80 changes: 80 additions & 0 deletions bfxapi/examples/ws/full_orderbook.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import os
import sys
import time
from collections import OrderedDict
sys.path.append('../../../')

from bfxapi import Client

bfx = Client(
manageOrderBooks=True
)

class OrderBook:
def __init__(self, snapshot):
self.bids = OrderedDict()
self.asks = OrderedDict()
self.load(snapshot)

def load(self, snapshot):
for record in snapshot:
if record[2] >= 0:
self.bids[record[0]] = {
'count': record[1],
'amount': record[2]
}
else:
self.asks[record[0]] = {
'count': record[1],
'amount': record[2]
}

def update(self, record):
# count is 0
if record[1] == 0:
if record[2] == 1:
# remove from bids
del self.bids[record[0]]
elif record[2] == -1:
# remove from asks
del self.asks[record[0]]
elif record[1] > 0:
if record[2] > 0:
# update bids
if record[0] not in self.bids:
self.bids[record[0]] = {}
self.bids[record[0]]['count'] = record[1]
self.bids[record[0]]['amount'] = record[2]
elif record[2] < 0:
# update asks
if record[0] not in self.asks:
self.asks[record[0]] = {}
self.asks[record[0]]['count'] = record[1]
self.asks[record[0]]['amount'] = record[2]

obs = {}

@bfx.ws.on('error')
def log_error(err):
print ("Error: {}".format(err))

@bfx.ws.on('order_book_update')
def log_update(data):
obs[data['symbol']].update(data['data'])

@bfx.ws.on('order_book_snapshot')
def log_snapshot(data):
obs[data['symbol']] = OrderBook(data['data'])

async def start():
await bfx.ws.subscribe('book', 'tBTCUSD')

bfx.ws.on('connected', start)
bfx.ws.run()

for n in range(0, 10):
time.sleep(2)
for key in obs:
print(f"Printing {key} orderbook...")
print(f"{obs[key].bids}\n")
print(f"{obs[key].asks}\n")
2 changes: 1 addition & 1 deletion bfxapi/version.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
This module contains the current version of the bfxapi lib
"""

__version__ = '1.2.0'
__version__ = '1.2.1'
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
here = path.abspath(path.dirname(__file__))
setup(
name='bitfinex-api-py',
version='1.2.0',
version='1.2.1',
description='Official Bitfinex Python API',
long_description='A Python reference implementation of the Bitfinex API for both REST and websocket interaction',
long_description_content_type='text/markdown',
Expand Down

0 comments on commit 09a9b8f

Please sign in to comment.