diff --git a/paperone.py b/paperone.py index 1ba401c..d4d0e1c 100755 --- a/paperone.py +++ b/paperone.py @@ -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}..." diff --git a/paperone/utils.py b/paperone/utils.py new file mode 100644 index 0000000..6262469 --- /dev/null +++ b/paperone/utils.py @@ -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") +