forked from mementum/backtrader
-
Notifications
You must be signed in to change notification settings - Fork 52
Closed
Description
When I tried to run live using Bitmex exchange I got some errors:
data = bt.feeds.CCXT(exchange='bitmex', symbol='BTC/USD', timeframe=bt.TimeFrame.Ticks, compression=1)
Error (1):
***** DATA NOTIF: LIVE
Traceback (most recent call last):
File "run_backtrader_ccxt.py", line 43, in <module>
cerebro.run()
File "/Users/dedeco/Envs/backenv2/lib/python3.6/site-packages/backtrader/cerebro.py", line 1127, in run
runstrat = self.runstrategies(iterstrat)
File "/Users/dedeco/Envs/backenv2/lib/python3.6/site-packages/backtrader/cerebro.py", line 1298, in runstrategies
self._runnext(runstrats)
File "/Users/dedeco/Envs/backenv2/lib/python3.6/site-packages/backtrader/cerebro.py", line 1542, in _runnext
drets.append(d.next(ticks=False))
File "/Users/dedeco/Envs/backenv2/lib/python3.6/site-packages/backtrader/feed.py", line 404, in next
ret = self.load()
File "/Users/dedeco/Envs/backenv2/lib/python3.6/site-packages/backtrader/feed.py", line 476, in load
_loadret = self._load()
File "/Users/dedeco/Envs/backenv2/lib/python3.6/site-packages/backtrader/feeds/ccxt.py", line 89, in _load
return self._load_ticks()
File "/Users/dedeco/Envs/backenv2/lib/python3.6/site-packages/backtrader/feeds/ccxt.py", line 146, in _load_ticks
trade_id = int(trade['id'])
ValueError: invalid literal for int() with base 10: 'e6476f26-f09a-6972-bf1e-bf123e00e160'
The id from bitmex is not int, so I fixed the problem the lines 145 - 154 from ccxt.py (feeds) changing to int and add some comparation by timestamp:
for trade in trades:
trade_id = trade['id']
ts = datetime.strptime(trade['info']['timestamp'], '%Y-%m-%dT%H:%M:%S.%fZ').timestamp()
if ts > self._last_ts:
#if trade_id > self._last_id:
trade_time = datetime.strptime(trade['datetime'], '%Y-%m-%dT%H:%M:%S.%fZ')
self._data.append((trade_time, float(trade['price']), float(trade['amount'])))
self._last_id = trade_id
Metadata
Metadata
Assignees
Labels
No labels