#!/usr/bin/env python from sys import exit from dotenv import load_dotenv from typing import NoReturn from paperone.utils import ( get_last_n_trading_days, ) from paperone.database import TradingDataCRUD from os import environ from paperone.client import Client from rich.progress import track from datetime import datetime load_dotenv() DB_FILE = "trading_data.db" def main() -> NoReturn: api_key = environ.get("API_KEY") if not api_key: print("API_KEY not set") exit(0) client = Client(api_key) crud = TradingDataCRUD(f"sqlite:///{DB_FILE}") date = datetime.now() days_range = 360 tickers = [ "AAPL", "ARM", "^VIX", "AMD", "GOOG", "META", "MNDY", "MSFT", "NVDA", "VOO", "VT", ] # Loop through tickers and fetch data for ticker in tickers: trading_days = get_last_n_trading_days(date, days_range) for day in track(trading_days, description=f"→ {ticker}"): existing = crud.get_ohlcv(ticker, day) if existing: continue ticker_data = client.ticker_data_for(ticker, day) if not ticker_data: continue crud.create_ohlcv(ticker_data) exit(0) if __name__ == "__main__": main()