65 lines
1.3 KiB
Python
Executable File
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()
|