Data Sources¶
Data Source¶
- class lumibot.data_sources.data_source.DataSource(api_key=None, delay=None)¶
Bases:
ABC
- DEFAULT_PYTZ = <DstTzInfo 'America/New_York' LMT-1 day, 19:04:00 STD>¶
- DEFAULT_TIMEZONE = 'America/New_York'¶
- IS_BACKTESTING_DATA_SOURCE = False¶
- MIN_TIMESTEP = 'minute'¶
- SOURCE = ''¶
- TIMESTEP_MAPPING = []¶
- calculate_greeks(asset, asset_price: float, underlying_price: float, risk_free_rate: float)¶
Returns Greeks in backtesting.
- static convert_timestep_str_to_timedelta(timestep)¶
Convert a timestep string to a timedelta object. For example, “1minute” will be converted to a timedelta of 1 minute.
- Parameters:
timestep (str) – The timestep string to convert. For example, “1minute” or “1hour” or “1day”.
- Returns:
timedelta – A timedelta object representing the timestep.
unit (str) – The unit of the timestep. For example, “minute” or “hour” or “day”.
- get_bars(assets, length, timestep='minute', timeshift=None, chunk_size=10, max_workers=200, quote=None, exchange=None, include_after_hours=True)¶
Get bars for the list of assets
- get_chain_full_info(asset: ~lumibot.entities.asset.Asset, expiry: str, chains=None, underlying_price=<class 'float'>, risk_free_rate=<class 'float'>, strike_min=None, strike_max=None) DataFrame ¶
Get the full chain information for an option asset, including: greeks, bid/ask, open_interest, etc. For brokers that do not support this, greeks will be calculated locally. For brokers like Tradier this function is much faster as only a single API call can be done to return the data for all options simultaneously.
- Parameters:
asset (Asset) – The option asset to get the chain information for.
expiry (str | datetime.datetime | datetime.date) – The expiry date of the option chain.
chains (dict) – The chains dictionary created by get_chains method. This is used to get the list of strikes needed to calculate the greeks.
underlying_price (float) – Price of the underlying asset.
risk_free_rate (float) – The risk-free rate used in interest calculations.
strike_min (float) – The minimum strike price to return in the chain. If None, will return all strikes. Providing this will speed up execution by limiting the number of strikes queried.
strike_max (float) – The maximum strike price to return in the chain. If None, will return all strikes. Providing this will speed up execution by limiting the number of strikes queried.
- Returns:
A DataFrame containing the full chain information for the option asset. Greeks columns will be named as ‘greeks.delta’, ‘greeks.theta’, etc.
- Return type:
pd.DataFrame
- abstract get_chains(asset: Asset, quote: Asset = None) dict ¶
Obtains option chain information for the asset (stock) from each of the exchanges the options trade on and returns a dictionary for each exchange.
- Parameters:
- Returns:
Format: - Multiplier (str) eg: 100 - ‘Chains’ - paired Expiration/Strike info to guarentee that the strikes are valid for the specific
expiration date. Format:
chains[‘Chains’][‘CALL’][exp_date] = [strike1, strike2, …]
Expiration Date Format: 2023-07-31
- Return type:
dictionary of dictionary
- get_datetime(adjust_for_delay=False)¶
Returns the current datetime in the default timezone
- Parameters:
adjust_for_delay (bool) – Whether to adjust the current time for the delay. This is useful for paper trading data sources that provide delayed data.
- Return type:
datetime
- get_datetime_range(length, timestep='minute', timeshift=None)¶
- abstract get_historical_prices(asset, length, timestep='', timeshift=None, quote=None, exchange=None, include_after_hours=True)¶
Get bars for a given asset
- Parameters:
asset (Asset) – The asset to get the bars for.
length (int) – The number of bars to get.
timestep (str) – The timestep to get the bars at. For example, “1minute” or “1hour” or “1day”.
timeshift (datetime.timedelta) – The amount of time to shift the bars by. For example, if you want the bars from 1 hour ago to now, you would set timeshift to 1 hour.
quote (Asset) – The quote asset to get the bars for.
exchange (str) – The exchange to get the bars for.
include_after_hours (bool) – Whether to include after hours data.
- get_last_day()¶
- get_last_minute()¶
- abstract get_last_price(asset, quote=None, exchange=None)¶
Takes an asset and returns the last known price
- get_last_prices(assets, quote=None, exchange=None)¶
Takes a list of assets and returns the last known prices
- get_round_day(timeshift=0)¶
Returns the current datetime rounded to the day and applies a timeshift in days :param timeshift: The number of days to shift the datetime by :type timeshift: int
- Returns:
Rounded datetime with the timeshift applied
- Return type:
datetime
- get_round_minute(timeshift=0)¶
Returns the current datetime rounded to the minute and applies a timeshift in minutes :param timeshift: The number of minutes to shift the datetime by :type timeshift: int
- Returns:
Rounded datetime with the timeshift applied
- Return type:
datetime
- get_strikes(asset) list ¶
Return a set of strikes for a given asset
- get_timestamp()¶
Returns the current timestamp in the default timezone :rtype: float
- get_timestep()¶
- get_yesterday_dividend(asset, quote=None)¶
Return dividend per share for a given asset for the day before
- get_yesterday_dividends(assets, quote=None)¶
Return dividend per share for a list of assets for the day before
- classmethod localize_datetime(dt)¶
- query_greeks(asset)¶
Query for the Greeks as it can be more accurate than calculating locally.
- classmethod to_default_timezone(dt)¶
Pandas¶
- class lumibot.data_sources.pandas_data.PandasData(*args, pandas_data=None, auto_adjust=True, **kwargs)¶
Bases:
DataSourceBacktesting
PandasData is a Backtesting-only DataSource that uses a Pandas DataFrame (read from CSV) as the source of data for a backtest run. It is not possible to use this class to run a live trading strategy.
- SOURCE = 'PANDAS'¶
- TIMESTEP_MAPPING = [{'representations': ['1D', 'day'], 'timestep': 'day'}, {'representations': ['1M', 'minute'], 'timestep': 'minute'}]¶
- clean_trading_times(dt_index, pcal)¶
- find_asset_in_data_store(asset, quote=None)¶
- get_asset_by_name(name)¶
- get_asset_by_symbol(symbol, asset_type=None)¶
Finds the assets that match the symbol. If type is specified finds the assets matching symbol and type.
- Parameters:
symbol (str) – The symbol of the asset.
asset_type (str) – Asset type. One of: - stock - future - option - forex
- Return type:
list of Asset
- get_assets()¶
- get_chains(asset: Asset, quote: Asset = None, exchange: str = None)¶
Returns option chains.
Obtains option chain information for the asset (stock) from each of the exchanges the options trade on and returns a dictionary for each exchange.
- Parameters:
asset (Asset object) – The stock whose option chain is being fetched. Represented as an asset object.
quote (Asset object, optional) – The quote asset. Default is None.
exchange (str, optional) – The exchange to fetch the option chains from. For PandasData, will only use “SMART”.
- Returns:
Format: - Multiplier (str) eg: 100 - ‘Chains’ - paired Expiration/Strke info to guarentee that the stikes are valid for the specific
expiration date. Format:
chains[‘Chains’][‘CALL’][exp_date] = [strike1, strike2, …]
Expiration Date Format: 2023-07-31
- Return type:
dictionary of dictionary
- get_historical_prices(asset, length, timestep='', timeshift=None, quote=None, exchange=None, include_after_hours=True)¶
Get bars for a given asset
- get_last_price(asset, quote=None, exchange=None)¶
Takes an asset and returns the last known price
- get_last_prices(assets, quote=None, exchange=None, **kwargs)¶
Takes a list of assets and returns the last known prices
- get_start_datetime_and_ts_unit(length, timestep, start_dt=None, start_buffer=datetime.timedelta(days=5))¶
Get the start datetime for the data.
- Parameters:
length (int) – The number of data points to get.
timestep (str) – The timestep to use. For example, “1minute” or “1hour” or “1day”.
- Returns:
datetime – The start datetime.
str – The timestep unit.
- get_trading_days_pandas()¶
- get_yesterday_dividend(asset, quote=None)¶
Return dividend per share for a given asset for the day before
- get_yesterday_dividends(assets, quote=None)¶
Return dividend per share for a list of assets for the day before
- load_data()¶
- update_date_index()¶
Yahoo¶
- class lumibot.data_sources.yahoo_data.YahooData(*args, auto_adjust=True, **kwargs)¶
Bases:
DataSourceBacktesting
- MIN_TIMESTEP = 'day'¶
- SOURCE = 'YAHOO'¶
- TIMESTEP_MAPPING = [{'representations': ['1d', 'day'], 'timestep': 'day'}, {'representations': ['15m', '15 minutes'], 'timestep': '15 minutes'}, {'representations': ['1m', '1 minute'], 'timestep': 'minute'}]¶
- get_chains(asset: Asset, quote: Asset = None, exchange: str = None)¶
Get the chains for a given asset. This is not implemented for YahooData becuase Yahoo does not support historical options data.
yfinance module does support getting some of the info for current options chains, but it is not implemented. See yf methods: >>> import yfinance as yf >>> spy = yf.Ticker(“SPY”) >>> expirations = spy.options >>> chain_data = spy.option_chain()
- get_historical_prices(asset, length, timestep='', timeshift=None, quote=None, exchange=None, include_after_hours=True)¶
Get bars for a given asset
- get_last_price(asset, timestep=None, quote=None, exchange=None, **kwargs)¶
Takes an asset and returns the last known price
- get_strikes(asset)¶
Return a set of strikes for a given asset