Skip to content

Commit 1aec60f

Browse files
authored
Merge pull request sammchardy#577 from gabriel-milan/master
[New feature] Faster order book updates
2 parents afefe8b + 8a1319e commit 1aec60f

2 files changed

Lines changed: 13 additions & 3 deletions

File tree

binance/depthcache.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class DepthCacheManager(object):
121121

122122
_default_refresh = 60 * 30 # 30 minutes
123123

124-
def __init__(self, client, symbol, callback=None, refresh_interval=_default_refresh, bm=None, limit=500):
124+
def __init__(self, client, symbol, callback=None, refresh_interval=_default_refresh, bm=None, limit=500, ws_interval=None):
125125
"""Initialise the DepthCacheManager
126126
127127
:param client: Binance API client
@@ -134,6 +134,8 @@ def __init__(self, client, symbol, callback=None, refresh_interval=_default_refr
134134
:type refresh_interval: int
135135
:param limit: Optional number of orders to get from orderbook
136136
:type limit: int
137+
:param ws_interval: Optional interval for updates on websocket, default None. If not set, updates happen every second. Must be 0, None (1s) or 100 (100ms).
138+
:type ws_interval: int
137139
138140
"""
139141
self._client = client
@@ -146,6 +148,7 @@ def __init__(self, client, symbol, callback=None, refresh_interval=_default_refr
146148
self._depth_cache = DepthCache(self._symbol)
147149
self._refresh_interval = refresh_interval
148150
self._conn_key = None
151+
self._ws_interval = ws_interval
149152

150153
self._start_socket()
151154
self._init_cache()
@@ -188,7 +191,7 @@ def _start_socket(self):
188191
if self._bm is None:
189192
self._bm = BinanceSocketManager(self._client)
190193

191-
self._conn_key = self._bm.start_depth_socket(self._symbol, self._depth_event)
194+
self._conn_key = self._bm.start_depth_socket(self._symbol, self._depth_event, interval=self._ws_interval)
192195
if not self._bm.is_alive():
193196
self._bm.start()
194197

binance/websockets.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def _start_futures_socket(self, path, callback, prefix='stream?streams='):
118118
self._conns[path] = connectWS(factory, context_factory)
119119
return path
120120

121-
def start_depth_socket(self, symbol, callback, depth=None):
121+
def start_depth_socket(self, symbol, callback, depth=None, interval=None):
122122
"""Start a websocket for symbol market depth returning either a diff or a partial book
123123
124124
https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#partial-book-depth-streams
@@ -129,6 +129,8 @@ def start_depth_socket(self, symbol, callback, depth=None):
129129
:type callback: function
130130
:param depth: optional Number of depth entries to return, default None. If passed returns a partial book instead of a diff
131131
:type depth: str
132+
:param interval: optional interval for updates, default None. If not set, updates happen every second. Must be 0, None (1s) or 100 (100ms)
133+
:type interval: int
132134
133135
:returns: connection key string if successful, False otherwise
134136
@@ -185,6 +187,11 @@ def start_depth_socket(self, symbol, callback, depth=None):
185187
socket_name = symbol.lower() + '@depth'
186188
if depth and depth != '1':
187189
socket_name = '{}{}'.format(socket_name, depth)
190+
if interval:
191+
if interval in [0, 100]:
192+
socket_name = '{}@{}ms'.format(socket_name, interval)
193+
else:
194+
raise ValueError("Websocket interval value not allowed. Allowed values are [0, 100]")
188195
return self._start_socket(socket_name, callback)
189196

190197
def start_kline_socket(self, symbol, callback, interval=Client.KLINE_INTERVAL_1MINUTE):

0 commit comments

Comments
 (0)