1
0
mirror of https://github.com/polakowo/vectorbt.git synced 2022-03-22 01:31:39 +03:00

Minor formattings

This commit is contained in:
Oleg Polakow
2021-12-30 23:49:50 +01:00
parent 0429a6c94d
commit f2b9359b2b

View File

@@ -757,9 +757,11 @@ class CCXTData(Data):
kwargs = merge_dicts(download_kwargs, kwargs)
return self.download_symbol(symbol, **kwargs)
class AlpacaData(Data):
"""`Data` for data coming from `alpaca-trade-api`.
Sign up for Alpaca API keys here: https://app.alpaca.markets/signup
"""`Data` for data coming from `alpaca-trade-api`.
Sign up for Alpaca API keys under https://app.alpaca.markets/signup.
Usage:
* Fetch the 1-minute data of the last 2 hours, wait 1 minute, and update:
@@ -779,11 +781,7 @@ class AlpacaData(Data):
2021-12-27 14:04:00+00:00 177.0500 177.0500 177.0500 177.0500 1967
2021-12-27 14:05:00+00:00 177.0500 177.0500 177.0300 177.0500 3218
2021-12-27 14:06:00+00:00 177.0400 177.0400 177.0400 177.0400 873
2021-12-27 14:07:00+00:00 177.0399 177.0400 177.0300 177.0400 1100
2021-12-27 14:08:00+00:00 177.0400 177.0400 176.9700 176.9900 19943
... ... ... ... ... ...
2021-12-27 15:44:00+00:00 178.0000 178.0079 177.9311 177.9710 106395
2021-12-27 15:45:00+00:00 177.9700 178.0564 177.9430 177.9600 153325
2021-12-27 15:46:00+00:00 177.9500 178.0000 177.8289 177.8850 162778
2021-12-27 15:47:00+00:00 177.8810 177.9600 177.8400 177.9515 123284
2021-12-27 15:48:00+00:00 177.9600 178.0500 177.9600 178.0100 159700
@@ -800,11 +798,7 @@ class AlpacaData(Data):
2021-12-27 14:04:00+00:00 177.0500 177.0500 177.0500 177.0500 1967
2021-12-27 14:05:00+00:00 177.0500 177.0500 177.0300 177.0500 3218
2021-12-27 14:06:00+00:00 177.0400 177.0400 177.0400 177.0400 873
2021-12-27 14:07:00+00:00 177.0399 177.0400 177.0300 177.0400 1100
2021-12-27 14:08:00+00:00 177.0400 177.0400 176.9700 176.9900 19943
... ... ... ... ... ...
2021-12-27 15:45:00+00:00 177.9700 178.0564 177.9430 177.9600 153325
2021-12-27 15:46:00+00:00 177.9500 178.0000 177.8289 177.8850 162778
2021-12-27 15:47:00+00:00 177.8810 177.9600 177.8400 177.9515 123284
2021-12-27 15:48:00+00:00 177.9600 178.0500 177.9600 178.0100 159700
2021-12-27 15:49:00+00:00 178.0100 178.0700 177.9700 178.0650 185037
@@ -827,9 +821,13 @@ class AlpacaData(Data):
Args:
symbol (str): Symbol.
timeframe (str): Timeframe of data. Must be integer multiple of 'm' (minute), 'h' (hour) or 'd' (day). i.e. '15m'
Note: Data from the latest 15 minutes is not available with a free data plan.
See: https://alpaca.markets/data
timeframe (str): Timeframe of data.
Must be integer multiple of 'm' (minute), 'h' (hour) or 'd' (day). i.e. '15m'.
See https://alpaca.markets/data.
!!! note
Data from the latest 15 minutes is not available with a free data plan.
start (any): Start datetime.
@@ -838,38 +836,40 @@ class AlpacaData(Data):
See `vectorbt.utils.datetime_.to_tzaware_datetime`.
adjustment (str): Specifies the corporate action adjustment for the stocks.
Enum: `raw`, `split`, `dividend` or `all`.
Allowed are `raw`, `split`, `dividend` or `all`.
limit (int): The maximum number of returned items.
exchange (str): For crypto symbols. Which exchange you wish to retrieve data from.
Enum: `FTX`, `ERSX`, `CBSE`
Allowed are `FTX`, `ERSX`, `CBSE`
For defaults, see `data.alpaca` in `vectorbt._settings.settings`.
"""
from vectorbt._settings import settings
from alpaca_trade_api.rest import TimeFrameUnit, TimeFrame, REST
alpaca_cfg = settings['data']['alpaca']
client_kwargs = dict()
for k in get_func_kwargs(REST):
if k in kwargs:
client_kwargs[k] = kwargs.pop(k)
client_kwargs = merge_dicts(alpaca_cfg, client_kwargs)
client = REST(**client_kwargs)
_timeframe_units = {'d': TimeFrameUnit.Day, 'h': TimeFrameUnit.Hour, 'm': TimeFrameUnit.Minute}
if len(timeframe) < 2:
raise ValueError("invalid timeframe")
amount_str = timeframe[:-1]
unit_str = timeframe[-1]
if not amount_str.isnumeric() or unit_str not in _timeframe_units:
raise ValueError("invalid timeframe")
amount = int(amount_str)
unit = _timeframe_units[unit_str]
@@ -878,31 +878,41 @@ class AlpacaData(Data):
start_ts = to_tzaware_datetime(start, tz=get_utc_tz()).isoformat()
end_ts = to_tzaware_datetime(end, tz=get_utc_tz()).isoformat()
def _is_crypto_symbol(symbol):
return len(symbol) == 6 and "USD" in symbol
if _is_crypto_symbol(symbol):
df = client.get_crypto_bars(symbol=symbol,
timeframe=_timeframe,
start=start_ts,
end=end_ts,
limit=limit,
exchanges=exchange).df
df = client.get_crypto_bars(
symbol=symbol,
timeframe=_timeframe,
start=start_ts,
end=end_ts,
limit=limit,
exchanges=exchange
).df
else:
df = client.get_bars(symbol=symbol,
timeframe=_timeframe,
start=start_ts,
end=end_ts,
adjustment=adjustment,
limit=limit).df
df = client.get_bars(
symbol=symbol,
timeframe=_timeframe,
start=start_ts,
end=end_ts,
adjustment=adjustment,
limit=limit
).df
# filter for OHLCV
# remove extra columns
df.drop(['trade_count', 'vwap'], axis=1, errors='ignore', inplace=True)
# capitalize
df.rename(columns={'open': 'Open', 'high': 'High', 'low': 'Low', 'close': 'Close', 'volume': 'Volume', 'exchange':'Exchange'}, inplace=True)
df.rename(columns={
'open': 'Open',
'high': 'High',
'low': 'Low',
'close': 'Close',
'volume': 'Volume',
'exchange': 'Exchange'
}, inplace=True)
df['Open'] = df['Open'].astype(float)
df['High'] = df['High'].astype(float)
@@ -912,8 +922,6 @@ class AlpacaData(Data):
return df
def update_symbol(self, symbol: str, **kwargs) -> tp.Frame:
"""Update the symbol.
@@ -922,4 +930,4 @@ class AlpacaData(Data):
download_kwargs['start'] = self.data[symbol].index[-1]
download_kwargs['show_progress'] = False
kwargs = merge_dicts(download_kwargs, kwargs)
return self.download_symbol(symbol, **kwargs)
return self.download_symbol(symbol, **kwargs)