This commit is contained in:
Giulio De Pasquale 2025-10-15 17:27:08 +01:00
parent 22c43b51c7
commit fed83c07f9
2 changed files with 40 additions and 34 deletions

View File

@ -1,9 +1,14 @@
#!/usr/bin/env python
from sys import exit
from datetime import datetime, timedelta
from dotenv import load_dotenv
from typing import NoReturn, List
from typing import NoReturn
from paperone.utils import (
parse_date_yyyymmdd,
days_range_from,
format_date_readable,
is_trading_day,
)
from os import environ
from paperone.taapi import TaapiClient, IndicatorEnum
from rich.progress import (
@ -18,36 +23,6 @@ from rich.progress import (
load_dotenv()
def is_trading_day(date: datetime) -> bool:
return date.weekday() not in [5, 6]
def parse_date_yyyymmdd(date_str: str) -> datetime:
return datetime.strptime(date_str, "%Y%m%d")
def days_range_from(date: datetime, n: int) -> List[datetime]:
"""
Generate a list of dates going back n days from the given date (inclusive).
Example: date=Jan 3, n=2 [Jan 1, Jan 2, Jan 3]
Args:
date: The target date
n: Number of days to backtrack
Returns:
List of datetime objects from (date - n) to date (inclusive)
"""
start_date = date - timedelta(days=n)
return [start_date + timedelta(days=i) for i in range(n + 1)]
def format_date_readable(date: datetime) -> str:
return date.strftime("%B %d, %Y")
def main() -> NoReturn:
api_key = environ.get("API_KEY")
@ -58,7 +33,7 @@ def main() -> NoReturn:
date = parse_date_yyyymmdd("20250821")
days_range = 60
dates_range = days_range_from(date, days_range)
tickers = ["AAPL", "NVDA", "AMD", "META", "MSFT", "GOOG"]
tickers = ["VIX"]
indicators = list(IndicatorEnum)
with Progress(
@ -74,7 +49,7 @@ def main() -> NoReturn:
)
with TaapiClient(api_key) as client:
for ticker in tickers:
for ticker in [x for x in tickers if x in client.get_available_tickers()]:
# Update ticker task
progress.update(
ticker_task, description=f"[cyan]Processing {ticker}..."

31
paperone/utils.py Normal file
View File

@ -0,0 +1,31 @@
from datetime import datetime, timedelta
from typing import List
def is_trading_day(date: datetime) -> bool:
return date.weekday() not in [5, 6]
def parse_date_yyyymmdd(date_str: str) -> datetime:
return datetime.strptime(date_str, "%Y%m%d")
def days_range_from(date: datetime, n: int) -> List[datetime]:
"""
Generate a list of dates going back n days from the given date (inclusive).
Example: date=Jan 3, n=2 [Jan 1, Jan 2, Jan 3]
Args:
date: The target date
n: Number of days to backtrack
Returns:
List of datetime objects from (date - n) to date (inclusive)
"""
start_date = date - timedelta(days=n)
return [start_date + timedelta(days=i) for i in range(n + 1)]
def format_date_readable(date: datetime) -> str:
return date.strftime("%B %d, %Y")