diff --git a/populate.py b/populate.py index 20d06c0..491f32a 100755 --- a/populate.py +++ b/populate.py @@ -7,6 +7,7 @@ from paperone.utils import ( get_last_n_trading_days, ) from paperone.database import TradingDataCRUD +from paperone.indicators import IndicatorService from paperone.client import Fetcher from rich.progress import track from datetime import datetime @@ -19,6 +20,7 @@ DB_FILE = "trading_data.db" def main() -> NoReturn: fetcher = Fetcher() crud = TradingDataCRUD(f"sqlite:///{DB_FILE}") + ind = IndicatorService(crud) date = datetime.now() days_range = 360 * 10 @@ -48,17 +50,28 @@ def main() -> NoReturn: for ticker in tickers + reference_tickers: trading_days = get_last_n_trading_days(date, days_range) - start_date = trading_days[0] end_date = trading_days[-1] all_ohlcv_data = fetcher.ticker_data_for(ticker, start_date, end_date) - for ohlcv in track(all_ohlcv_data, description=f"→ {ticker}"): + + ohlcv_dates = [] + for ohlcv in track(all_ohlcv_data, description=f"→ {ticker} OHLCV"): existing = crud.get_ohlcv(ticker, ohlcv.date) if not existing: crud.create_ohlcv(ohlcv) + ohlcv_dates.append(ohlcv.date) + + for calc_date in track(ohlcv_dates, description=f"→ {ticker} Indicators"): + existing_indicator = crud.get_indicators(ticker, calc_date) + + if existing_indicator: + continue + + ind.calculate_and_save_indicators(ticker=ticker, target_date=calc_date) + exit(0)