feat(populate): add indicator calculation to populate script

This commit is contained in:
Giulio De Pasquale 2025-10-18 11:33:59 +01:00
parent d87733b80e
commit 46662a37a4

View File

@ -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)