Skip to content

Commit d7dfc6f

Browse files
authored
Merge pull request #272 from brianboonstra/order_book_trees
Order book trees
2 parents b1044a3 + 308d59a commit d7dfc6f

File tree

3 files changed

+13
-13
lines changed

3 files changed

+13
-13
lines changed

gdax/order_book.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
#
55
# Live order book updated from the gdax Websocket Feed
66

7-
from bintrees import RBTree
7+
from sortedcontainers import SortedDict
88
from decimal import Decimal
99
import pickle
1010

@@ -15,8 +15,8 @@
1515
class OrderBook(WebsocketClient):
1616
def __init__(self, product_id='BTC-USD', log_to=None):
1717
super(OrderBook, self).__init__(products=product_id)
18-
self._asks = RBTree()
19-
self._bids = RBTree()
18+
self._asks = SortedDict()
19+
self._bids = SortedDict()
2020
self._client = PublicClient()
2121
self._sequence = -1
2222
self._log_to = log_to
@@ -37,8 +37,8 @@ def on_close(self):
3737
print("\n-- OrderBook Socket Closed! --")
3838

3939
def reset_book(self):
40-
self._asks = RBTree()
41-
self._bids = RBTree()
40+
self._asks = SortedDict()
41+
self._bids = SortedDict()
4242
res = self._client.get_product_order_book(product_id=self.product_id, level=3)
4343
for bid in res['bids']:
4444
self.add({
@@ -219,28 +219,28 @@ def get_current_book(self):
219219
return result
220220

221221
def get_ask(self):
222-
return self._asks.min_key()
222+
return self._asks.peekitem(0)[0]
223223

224224
def get_asks(self, price):
225225
return self._asks.get(price)
226226

227227
def remove_asks(self, price):
228-
self._asks.remove(price)
228+
del self._asks[price]
229229

230230
def set_asks(self, price, asks):
231-
self._asks.insert(price, asks)
231+
self._asks[price] = asks
232232

233233
def get_bid(self):
234-
return self._bids.max_key()
234+
return self._bids.peekitem(-1)[0]
235235

236236
def get_bids(self, price):
237237
return self._bids.get(price)
238238

239239
def remove_bids(self, price):
240-
self._bids.remove(price)
240+
del self._bids[price]
241241

242242
def set_bids(self, price, bids):
243-
self._bids.insert(price, bids)
243+
self._bids[price] = bids
244244

245245

246246
if __name__ == '__main__':

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
bintrees==2.0.7
1+
sortedcontainers>=1.5.9
22
requests==2.13.0
33
six==1.10.0
44
websocket-client==0.40.0

tests/test_public_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def test_get_product_order_book(self, client, level):
3434
if level is 2 and (len(r['asks']) > 50 or len(r['bids']) > 50):
3535
pytest.fail('Fail: Level 2 should only return the top 50 asks and bids')
3636

37-
if level is 2 and (len(r['asks']) < 50 or len(r['bids']) < 50):
37+
if level is 3 and (len(r['asks']) < 50 or len(r['bids']) < 50):
3838
pytest.fail('Fail: Level 3 should return the full order book')
3939

4040
def test_get_product_ticker(self, client):

0 commit comments

Comments
 (0)