Skip to content

Commit 7362a88

Browse files
authored
Merge pull request #149 from alpacahq/data_v2
Update to Alapca Data v2
2 parents 7f2c006 + 55b2857 commit 7362a88

File tree

10 files changed

+114
-210
lines changed

10 files changed

+114
-210
lines changed

alpaca_backtrader_api/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
__all__ = [
66
'AlpacaStore', 'AlpacaBroker', 'AlpacaData',
77
]
8-
__version__ = '0.13.1'
8+
__version__ = '0.14.0'

alpaca_backtrader_api/alpacabroker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def update_positions(self):
8686

8787
for name, data in iteritems(self.cerebro.datasbyname):
8888
if name in broker_positions_symbols:
89-
size = int(broker_positions_mapped_by_symbol[name].qty)
89+
size = float(broker_positions_mapped_by_symbol[name].qty)
9090
positions[data] = Position(
9191
size,
9292
float(broker_positions_mapped_by_symbol[

alpaca_backtrader_api/alpacadata.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from __future__ import (absolute_import, division, print_function,
22
unicode_literals)
33

4-
from datetime import datetime, timedelta
5-
4+
from datetime import timedelta
5+
import pandas as pd
66
from backtrader.feed import DataBase
77
from backtrader import date2num, num2date
88
from backtrader.utils.py3 import queue, with_metaclass
@@ -133,6 +133,7 @@ class AlpacaData(with_metaclass(MetaAlpacaData, DataBase)):
133133
('reconnect', True),
134134
('reconnections', -1), # forever
135135
('reconntimeout', 5.0),
136+
('data_feed', 'iex'), # options iex/sip for pro
136137
)
137138

138139
_store = alpacastore.AlpacaStore
@@ -233,7 +234,8 @@ def _st_start(self, instart=True, tmout=None):
233234
return True
234235
self.qlive = self.o.streaming_prices(self.p.dataname,
235236
self.p.timeframe,
236-
tmout=tmout)
237+
tmout=tmout,
238+
data_feed=self.p.data_feed)
237239
if instart:
238240
self._statelivereconn = self.p.backfill_start
239241
else:
@@ -338,7 +340,7 @@ def _load(self):
338340
# passing None to fetch max possible in 1 request
339341
dtbegin = None
340342

341-
dtend = datetime.utcfromtimestamp(int(msg['time']))
343+
dtend = pd.Timestamp(msg['time'], unit='ns')
342344

343345
self.qhist = self.o.candles(
344346
self.p.dataname, dtbegin, dtend,
@@ -401,7 +403,7 @@ def _load(self):
401403
return False
402404

403405
def _load_tick(self, msg):
404-
dtobj = datetime.utcfromtimestamp(msg['time'])
406+
dtobj = pd.Timestamp(msg['time'], unit='ns')
405407
dt = date2num(dtobj)
406408
if dt <= self.lines.datetime[-1]:
407409
return False # time already seen
@@ -413,8 +415,8 @@ def _load_tick(self, msg):
413415

414416
# Put the prices into the bar
415417
tick = float(
416-
msg['askprice']) if self.p.useask else float(
417-
msg['bidprice'])
418+
msg['ask_price']) if self.p.useask else float(
419+
msg['bid_price'])
418420
self.lines.open[0] = tick
419421
self.lines.high[0] = tick
420422
self.lines.low[0] = tick
@@ -425,7 +427,7 @@ def _load_tick(self, msg):
425427
return True
426428

427429
def _load_agg(self, msg):
428-
dtobj = datetime.utcfromtimestamp(int(msg['time']))
430+
dtobj = pd.Timestamp(msg['time'], unit='ns')
429431
dt = date2num(dtobj)
430432
if dt <= self.lines.datetime[-1]:
431433
return False # time already seen

0 commit comments

Comments
 (0)