Skip to content

Commit 8077685

Browse files
authored
Add optional asof for historical marketdata endpoints (#632)
1 parent 536d007 commit 8077685

File tree

1 file changed

+36
-5
lines changed

1 file changed

+36
-5
lines changed

alpaca_trade_api/rest.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,7 @@ def _data_get(self,
557557
resp_grouped_by_symbol: Optional[bool] = None,
558558
page_limit: int = DATA_V2_MAX_LIMIT,
559559
feed: Optional[str] = None,
560+
asof: Optional[str] = None,
560561
**kwargs):
561562
page_token = None
562563
total_items = 0
@@ -577,6 +578,8 @@ def _data_get(self,
577578
path += f'/{symbol_or_symbols}'
578579
else:
579580
data['symbols'] = ','.join(symbol_or_symbols)
581+
if asof:
582+
data['asof'] = asof
580583
if endpoint:
581584
path += f'/{endpoint}'
582585
resp = self.data_get(path, data=data, feed=feed,
@@ -603,9 +606,15 @@ def get_trades_iter(self,
603606
end: Optional[str] = None,
604607
limit: int = None,
605608
feed: Optional[str] = None,
609+
asof: Optional[str] = None,
606610
raw=False) -> TradeIterator:
607611
trades = self._data_get('trades', symbol,
608-
start=start, end=end, limit=limit, feed=feed)
612+
start=start,
613+
end=end,
614+
limit=limit,
615+
feed=feed,
616+
asof=asof,
617+
)
609618
for trade in trades:
610619
if raw:
611620
yield trade
@@ -618,9 +627,15 @@ def get_trades(self,
618627
end: Optional[str] = None,
619628
limit: int = None,
620629
feed: Optional[str] = None,
630+
asof: Optional[str] = None,
621631
) -> TradesV2:
622632
trades = list(self.get_trades_iter(symbol,
623-
start, end, limit, feed, raw=True))
633+
start=start,
634+
end=end,
635+
limit=limit,
636+
feed=feed,
637+
asof=asof,
638+
raw=True))
624639
return TradesV2(trades)
625640

626641
def get_quotes_iter(self,
@@ -629,9 +644,15 @@ def get_quotes_iter(self,
629644
end: Optional[str] = None,
630645
limit: int = None,
631646
feed: Optional[str] = None,
647+
asof: Optional[str] = None,
632648
raw=False) -> QuoteIterator:
633649
quotes = self._data_get('quotes', symbol,
634-
start=start, end=end, limit=limit, feed=feed)
650+
start=start,
651+
end=end,
652+
limit=limit,
653+
feed=feed,
654+
asof=asof,
655+
)
635656
for quote in quotes:
636657
if raw:
637658
yield quote
@@ -644,13 +665,16 @@ def get_quotes(self,
644665
end: Optional[str] = None,
645666
limit: int = None,
646667
feed: Optional[str] = None,
668+
asof: Optional[str] = None,
647669
) -> QuotesV2:
648670
quotes = list(self.get_quotes_iter(symbol=symbol,
649671
start=start,
650672
end=end,
651673
limit=limit,
652674
feed=feed,
653-
raw=True))
675+
raw=True,
676+
asof=asof,
677+
))
654678
return QuotesV2(quotes)
655679

656680
def get_bars_iter(self,
@@ -661,11 +685,16 @@ def get_bars_iter(self,
661685
adjustment: str = 'raw',
662686
limit: int = None,
663687
feed: Optional[str] = None,
688+
asof: Optional[str] = None,
664689
raw=False) -> BarIterator:
665690
bars = self._data_get('bars', symbol,
666691
timeframe=timeframe,
667692
adjustment=adjustment,
668-
start=start, end=end, limit=limit, feed=feed)
693+
start=start,
694+
end=end,
695+
limit=limit,
696+
feed=feed,
697+
asof=asof)
669698
for bar in bars:
670699
if raw:
671700
yield bar
@@ -680,6 +709,7 @@ def get_bars(self,
680709
adjustment: str = 'raw',
681710
limit: int = None,
682711
feed: Optional[str] = None,
712+
asof: Optional[str] = None,
683713
) -> BarsV2:
684714
bars = list(self.get_bars_iter(symbol,
685715
timeframe,
@@ -688,6 +718,7 @@ def get_bars(self,
688718
adjustment,
689719
limit,
690720
feed=feed,
721+
asof=asof,
691722
raw=True))
692723
return BarsV2(bars)
693724

0 commit comments

Comments
 (0)