67 lines
1.4 KiB
Python
Executable File
67 lines
1.4 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 paperone.client import Fetcher
|
|
from rich.progress import track
|
|
from datetime import datetime
|
|
|
|
load_dotenv()
|
|
|
|
DB_FILE = "trading_data.db"
|
|
|
|
|
|
def main() -> NoReturn:
|
|
fetcher = Fetcher()
|
|
crud = TradingDataCRUD(f"sqlite:///{DB_FILE}")
|
|
date = datetime.now()
|
|
days_range = 360 * 10
|
|
|
|
tickers = [
|
|
"AAPL",
|
|
"ARM",
|
|
"AMD",
|
|
"GOOG",
|
|
"META",
|
|
"MNDY",
|
|
"MSFT",
|
|
"NVDA",
|
|
]
|
|
|
|
reference_tickers = [
|
|
"VOO", # US
|
|
"VT", # global
|
|
"GLD", # gold
|
|
"^VIX", # volatility
|
|
"VNQ", # real estate
|
|
"DBC", # commodities
|
|
"VGK", # EU
|
|
"VPL", # Asia
|
|
"VWO", # Emerging
|
|
"BND", # Global bonds
|
|
]
|
|
|
|
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}"):
|
|
existing = crud.get_ohlcv(ticker, ohlcv.date)
|
|
|
|
if not existing:
|
|
crud.create_ohlcv(ohlcv)
|
|
|
|
exit(0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|