alpaca-trade-api-python icon indicating copy to clipboard operation
alpaca-trade-api-python copied to clipboard

APIError: internal server error occurred

Open doudoujay opened this issue 3 years ago • 3 comments

Seems like if you get relatively huge amount of data Alpaca API will freakout. Example for pulling 1 month data with 1min interval: start=datetime(2021, 2, 1, 9, 30), end=datetime(2021, 2, 28, 9, 30) Yes I already transformed them to string

def get_df_alpaca(symbol: str, interval: str, start: datetime, end: datetime):
    assert interval in TimeFrame._value2member_map_
    df = api.get_bars(symbol, TimeFrame._value2member_map_[
                      interval], start.isoformat(), end.isoformat(), limit=10000, adjustment='raw').df
    return df

Error msg:

~/miniconda3/lib/python3.8/site-packages/alpaca_trade_api/rest.py in get_bars(self, symbol, timeframe, start, end, adjustment, limit)
    623                  limit: int = None,
    624                  ) -> BarsV2:
--> 625         bars = list(self.get_bars_iter(symbol,
    626                                        timeframe,
    627                                        start,

~/miniconda3/lib/python3.8/site-packages/alpaca_trade_api/rest.py in get_bars_iter(self, symbol, timeframe, start, end, adjustment, limit, raw)
    609                                  adjustment=adjustment,
    610                                  start=start, end=end, limit=limit)
--> 611         for bar in bars:
    612             if raw:
    613                 yield bar

~/miniconda3/lib/python3.8/site-packages/alpaca_trade_api/rest.py in _data_get_v2(self, endpoint, symbol, **kwargs)
    533             data['limit'] = actual_limit
    534             data['page_token'] = page_token
--> 535             resp = self.data_get('/stocks/{}/{}'.format(symbol, endpoint),
    536                                  data=data, api_version='v2')
    537             items = resp.get(endpoint, [])

~/miniconda3/lib/python3.8/site-packages/alpaca_trade_api/rest.py in data_get(self, path, data, api_version)
    190     def data_get(self, path, data=None, api_version='v1'):
    191         base_url: URL = get_data_url()
--> 192         return self._request(
    193             'GET', path, data, base_url=base_url, api_version=api_version,
    194         )

~/miniconda3/lib/python3.8/site-packages/alpaca_trade_api/rest.py in _request(self, method, path, data, base_url, api_version)
    137         while retry >= 0:
    138             try:
--> 139                 return self._one_request(method, url, opts, retry)
    140             except RetryException:
    141                 retry_wait = self._retry_wait

~/miniconda3/lib/python3.8/site-packages/alpaca_trade_api/rest.py in _one_request(self, method, url, opts, retry)
    166                 error = resp.json()
    167                 if 'code' in error:
--> 168                     raise APIError(error, http_error)
    169             else:
    170                 raise

APIError: internal server error occurred

doudoujay avatar Mar 04 '21 17:03 doudoujay

Hi, image

see the difference in date formatting with timezone

camelpac avatar Mar 04 '21 17:03 camelpac

yeah sorry forgot to mention, the DateTime passed in already have tz=NY

doudoujay avatar Mar 04 '21 18:03 doudoujay

so the best practice when handling a large amount of data is using get_bars_iter?

doudoujay avatar Mar 04 '21 18:03 doudoujay