Problem when ingesting binance data
Dear Catalyst Maintainers,
Before I tell you about my issue, let me describe my environment:
Environment
- Operating System: Windows 7
- Python Version: 3.6.2
- Python Bitness: 64
- How did you install Catalyst: pip
- Python packages:
Name Version Build Channel
aiodns 1.1.1
Now that you know a little about me, let me tell you about the issue I am having:
Description of Issue
When ingesting minute data for Binance, I get repeteadly this error for various pairs/dates:
Traceback (most recent call last):
File "c:\users\user\anaconda2\envs\catalyst3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\users\user\anaconda2\envs\catalyst3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\user\Anaconda2\envs\catalyst3\Scripts\catalyst.exe\__main__.py", line 9, in <module>
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 697, in main
rv = self.invoke(ctx)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\__main__.py", line 609, in ingest_exchange
csv=csv
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\exchange\exchange_bundle.py", line 824, in inge
st
show_report=show_report
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\exchange\exchange_bundle.py", line 643, in inge
st_assets
cleanup=True
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\exchange\exchange_bundle.py", line 420, in inge
st_ctable
shutil.rmtree(reader._rootdir)
File "c:\users\user\anaconda2\envs\catalyst3\lib\shutil.py", line 494, in rmtree
return _rmtree_unsafe(path, onerror)
File "c:\users\user\anaconda2\envs\catalyst3\lib\shutil.py", line 384, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)
File "c:\users\user\anaconda2\envs\catalyst3\lib\shutil.py", line 384, in _rmtree_unsafe
_rmtree_unsafe(fullname, onerror)
File "c:\users\user\anaconda2\envs\catalyst3\lib\shutil.py", line 393, in _rmtree_unsafe
onerror(os.rmdir, path, sys.exc_info())
File "c:\users\user\anaconda2\envs\catalyst3\lib\shutil.py", line 391, in _rmtree_unsafe
os.rmdir(path)
OSError: [WinError 145] The directory is not empty: 'C:\\Users\\user\\.catalyst\\data\\exchanges\\binance\\temp_bundles\\
binance-minute-dash_btc-2018-06\\81\\08'
and sometimes also this one:
Traceback (most recent call last):
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\connection.py", line 141, in _new_conn
(self.host, self.port), self.timeout, **extra_kw)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\util\connection.py", line 83, in create_connecti
on
raise err
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\util\connection.py", line 73, in create_connecti
on
sock.connect(sa)
OSError: [WinError 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\connectionpool.py", line 601, in urlopen
chunked=chunked)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\connectionpool.py", line 346, in _make_request
self._validate_conn(conn)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\connectionpool.py", line 850, in _validate_conn
conn.connect()
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\connection.py", line 284, in connect
conn = self._new_conn()
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\connection.py", line 150, in _new_conn
self, "Failed to establish a new connection: %s" % e)
urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x0000000034767D30>: Failed
to establish a new connection: [WinError 10048] Only one usage of each socket address (protocol/network address/port) i
s normally permitted
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\requests\adapters.py", line 440, in send
timeout=timeout
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\urllib3\util\retry.py", line 388, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='s3.amazonaws.com', port=443): Max retries exceeded with url:
/enigmaco/catalyst-bundles/exchange-binance/binance-minute-via_btc-2018-07.tar.gz (Caused by NewConnectionError('<urlli
b3.connection.VerifiedHTTPSConnection object at 0x0000000034767D30>: Failed to establish a new connection: [WinError 100
48] Only one usage of each socket address (protocol/network address/port) is normally permitted',))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "c:\users\user\anaconda2\envs\catalyst3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\users\user\anaconda2\envs\catalyst3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\Users\user\Anaconda2\envs\catalyst3\Scripts\catalyst.exe\__main__.py", line 9, in <module>
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 697, in main
rv = self.invoke(ctx)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 1066, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\click\decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\__main__.py", line 609, in ingest_exchange
csv=csv
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\exchange\exchange_bundle.py", line 824, in inge
st
show_report=show_report
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\exchange\exchange_bundle.py", line 643, in inge
st_assets
cleanup=True
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\exchange\exchange_bundle.py", line 365, in inge
st_ctable
period=period
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\exchange\utils\bundle_utils.py", line 56, in ge
t_bcolz_chunk
bytes = download_without_progress(url)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\catalyst\data\bundles\core.py", line 189, in download_wi
thout_progress
resp = requests.get(url)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\requests\api.py", line 72, in get
return request('get', url, params=params, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\requests\sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "c:\users\user\anaconda2\envs\catalyst3\lib\site-packages\requests\adapters.py", line 508, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='s3.amazonaws.com', port=443): Max retries exceeded with u
rl: /enigmaco/catalyst-bundles/exchange-binance/binance-minute-via_btc-2018-07.tar.gz (Caused by NewConnectionError('<ur
llib3.connection.VerifiedHTTPSConnection object at 0x0000000034767D30>: Failed to establish a new connection: [WinError
10048] Only one usage of each socket address (protocol/network address/port) is normally permitted',))
When such an error appears, I just restart the ingestion, which eventually completes. However, when I try to launch a backtest, Catalyst complains that the data for some pairs is not ingested.
PricingDataNotLoadedError: Missing data for binance omg_btc in date range [2017-10-28 00:00:00+00:00 - 2017-10-31 23:59:00+00:00]
Please run: `catalyst ingest-exchange -x binance -f minute -i omg_btc`. See catalyst documentation for details.
I tried to run the clean-exchange command, and restart the ingestion, with exactly the same result. Note that the same problem appeared when I ingested the Poloniex bundle a while ago. After sufficiently many ingestion attempts, I ended up with all the data. Unfortunatlely this doesn't seem to work for Binance.
Thanks!
Samuel
Thanks for reporting @sam31415 . How are you ingesting the minute data? Using a single command for ingesting all the pairs or by using a specific command per each pair?
@lenak25 I'm ingesting the whole bundle. When ingesting single pairs, the errors above are less likely to occur, just because the ingestion takes less time, but they do occur as well from time to time.
In the case of the error above, I can run the ingest on omg_btc only and it succeeds without error. But when I backtest, I still get the error saying that the data is not ingested.
OK, thanks. Binance data is bigger than other exchanges (there are 370 trading pairs on Binance, comparing to 98 on Poloniex) so that can explain the higher frequency of errors comparing to Poloniex. Thanks for the information, we will investigate this!