The objective is to build an object for historical price data, containing the attributes of multiple resolutions, wrapped as a one-liner function. The purpose of the functionality is to reduce the amount of time required to toggle between various time-intervals, for downstream calculations or charting.
For those interested in both, open source and finance, OpenBB is a great rabbit hole to dive down; and it's free. Clone the repo from GitHub here.
The first code block is for the import statements.
# Import the SDK from typing import Optional from openbb_terminal.sdk import openbb from IPython.utils import io
The next step is to define the object that will be returned when called by the function.
# Define the object to be returned. class HistoricalPrices: def __init__( self, symbol: str = "", start_date: Optional[str] = "1990-01-01", end_date: Optional[str] = None, prepost: Optional[bool] = False, source: str = "YahooFinance", ) -> None: self.one_min = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=1, prepost=prepost, source=source, ) self.five_min = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=5, prepost=prepost, source=source, ) self.fifteen_min = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=15, prepost=prepost, source=source, ) self.thirty_min = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=30, prepost=prepost, source=source, ) self.sixty_min = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=60, prepost=prepost, source=source, ) self.daily = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=1440, prepost=prepost, source=source, ) self.weekly = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=1440, prepost=prepost, weekly=True, source=source, ) self.monthly = openbb.stocks.load( symbol=symbol, start_date=start_date, end_date=end_date, interval=1440, prepost=prepost, monthly=True, source=source, )
Then, make the function to call the object.
# Create the function to return the data as an object. def historical_prices( symbol: str = "SPY", start_date: Optional[str] = "1990-01-01", end_date: Optional[str] = None, prepost: Optional[bool] = True, source: str = "YahooFinance", ) -> HistoricalPrices: # capture_output() is used to silence the console output. with io.capture_output(): historical = HistoricalPrices(symbol, start_date, end_date, prepost, source) return historical
Finally, assign the function to a variable.
#Use the variables, [symbol, start_date, end_date, prepost, source], to modify the call. historical = historical_prices()
The attributes returned are:
historical.one_min historical.five_min historical.fifteen_min historical.thirty_min historical.sixty_min historical.daily historical.weekly historical.monthly
historical.one_min.tail(5)
date | Open | High | Low | Close | Adj Close | Volume |
---|---|---|---|---|---|---|
2023-03-07 19:55:00 | 398.15 | 398.19 | 398.14 | 398.18 | 398.18 | 0 |
2023-03-07 19:56:00 | 398.15 | 398.19 | 398.15 | 398.175 | 398.175 | 0 |
2023-03-07 19:57:00 | 398.17 | 398.28 | 398.17 | 398.25 | 398.25 | 0 |
2023-03-07 19:58:00 | 398.25 | 398.27 | 398.23 | 398.24 | 398.24 | 0 |
2023-03-07 19:59:00 | 398.26 | 398.27 | 398.18 | 398.25 | 398.25 | 0 |
historical.monthly.head(5)
date | Open | High | Low | Close | Adj Close | Volume | Dividends | Stock Splits |
---|---|---|---|---|---|---|---|---|
1993-02-01 00:00:00 | 25.2362 | 25.8998 | 24.5725 | 25.4873 | 25.4873 | 5.4176e+06 | 0 | 0 |
1993-03-01 00:00:00 | 25.577 | 26.3123 | 25.3797 | 25.9357 | 25.9357 | 3.0192e+06 | 0.213 | 0 |
1993-04-01 00:00:00 | 26.0942 | 26.0942 | 24.9589 | 25.3914 | 25.3914 | 2.6972e+06 | 0 | 0 |
1993-05-01 00:00:00 | 25.4274 | 26.3285 | 25.2833 | 26.0762 | 26.0762 | 1.808e+06 | 0 | 0 |
1993-06-01 00:00:00 | 26.1663 | 26.4186 | 25.4995 | 25.9861 | 25.9861 | 3.438e+06 | 0.318 | 0 |
Download a notebook with this code, here
Top comments (0)