movedul`
This commit is contained in:
parent
22c43b51c7
commit
fed83c07f9
43
paperone.py
43
paperone.py
@ -1,9 +1,14 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
from sys import exit
|
from sys import exit
|
||||||
from datetime import datetime, timedelta
|
|
||||||
from dotenv import load_dotenv
|
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 os import environ
|
||||||
from paperone.taapi import TaapiClient, IndicatorEnum
|
from paperone.taapi import TaapiClient, IndicatorEnum
|
||||||
from rich.progress import (
|
from rich.progress import (
|
||||||
@ -18,36 +23,6 @@ from rich.progress import (
|
|||||||
load_dotenv()
|
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:
|
def main() -> NoReturn:
|
||||||
api_key = environ.get("API_KEY")
|
api_key = environ.get("API_KEY")
|
||||||
|
|
||||||
@ -58,7 +33,7 @@ def main() -> NoReturn:
|
|||||||
date = parse_date_yyyymmdd("20250821")
|
date = parse_date_yyyymmdd("20250821")
|
||||||
days_range = 60
|
days_range = 60
|
||||||
dates_range = days_range_from(date, days_range)
|
dates_range = days_range_from(date, days_range)
|
||||||
tickers = ["AAPL", "NVDA", "AMD", "META", "MSFT", "GOOG"]
|
tickers = ["VIX"]
|
||||||
indicators = list(IndicatorEnum)
|
indicators = list(IndicatorEnum)
|
||||||
|
|
||||||
with Progress(
|
with Progress(
|
||||||
@ -74,7 +49,7 @@ def main() -> NoReturn:
|
|||||||
)
|
)
|
||||||
|
|
||||||
with TaapiClient(api_key) as client:
|
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
|
# Update ticker task
|
||||||
progress.update(
|
progress.update(
|
||||||
ticker_task, description=f"[cyan]Processing {ticker}..."
|
ticker_task, description=f"[cyan]Processing {ticker}..."
|
||||||
|
31
paperone/utils.py
Normal file
31
paperone/utils.py
Normal 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")
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user