paperone/populate.py

65 lines
1.3 KiB
Python
Executable File

#!/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()