38 lines
1.4 KiB
Python
38 lines
1.4 KiB
Python
from datetime import datetime
|
|
|
|
import pandas as pd
|
|
|
|
from providers.base import DataProvider
|
|
|
|
|
|
class FinDataRetriever:
|
|
def __init__(self, provider: DataProvider, ticker: str):
|
|
self.provider = provider
|
|
self.ticker = ticker
|
|
|
|
def get_ticker(self):
|
|
return self.provider.get_ticker(self.ticker)
|
|
|
|
def get_historical(self, start: str, end: str) -> pd.DataFrame:
|
|
return self.provider.get_historical(self.ticker, start, end)
|
|
|
|
def get_historical_dynamic(self, sheet, date_range):
|
|
start_date = sheet.acell(date_range[1]).value
|
|
end_date = datetime.today().strftime('%Y-%m-%d')
|
|
histdata = self.provider.get_historical(self.ticker, start_date, end_date)
|
|
|
|
## fill forward for indicators traded only on business days
|
|
histdata.index = pd.to_datetime(histdata.index).tz_localize(None)
|
|
df_date_range = pd.date_range(start=start_date, end=end_date, freq='D')
|
|
histdata = histdata.reindex(df_date_range)
|
|
if end_date in histdata.index:
|
|
histdata.drop(end_date, inplace=True)
|
|
histdata.ffill(inplace=True)
|
|
|
|
values_close = list(reversed([[close] for close in histdata["Close"].to_list()]))
|
|
values_dates = list(reversed([[date] for date in histdata.index.to_list()]))
|
|
|
|
return {"close": values_close, "date": values_dates}
|
|
|
|
def get_current(self) -> float:
|
|
return self.provider.get_current(self.ticker) |