11from __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
66from backtrader .feed import DataBase
77from backtrader import date2num , num2date
88from 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