diff --git a/app/cron_options_hottest_contracts.py b/app/cron_options_hottest_contracts.py index 158b19b..dabc15e 100644 --- a/app/cron_options_hottest_contracts.py +++ b/app/cron_options_hottest_contracts.py @@ -50,7 +50,7 @@ def get_contracts_from_directory(symbol): directory_path = "json/options-historical-data/companies" total_symbols = get_tickers_from_directory(directory_path) -print(total_symbols) + def save_json(data, symbol, directory="json/hottest-contracts/companies"): os.makedirs(directory, exist_ok=True) diff --git a/app/cron_options_single_contract.py b/app/cron_options_single_contract.py index 2565a32..5b87136 100644 --- a/app/cron_options_single_contract.py +++ b/app/cron_options_single_contract.py @@ -12,6 +12,8 @@ from concurrent.futures import ThreadPoolExecutor import sqlite3 from dotenv import load_dotenv import os +import re + load_dotenv() api_key = os.getenv('INTRINIO_API_KEY') @@ -262,11 +264,17 @@ def get_total_symbols(): return stocks_symbols + etf_symbols -def get_expiration_date(contract_id): - # Extract the date part (YYMMDD) from the contract ID - date_str = contract_id[2:8] - # Convert to datetime object - return datetime.strptime(date_str, "%y%m%d").date() +def get_expiration_date(option_symbol): + # Define regex pattern to match the symbol structure + match = re.match(r"([A-Z]+)(\d{6})([CP])(\d+)", option_symbol) + if not match: + raise ValueError(f"Invalid option_symbol format: {option_symbol}") + + ticker, expiration, option_type, strike_price = match.groups() + + # Convert expiration to datetime + date_expiration = datetime.strptime(expiration, "%y%m%d").date() + return date_expiration def check_contract_expiry(symbol): directory = f"{directory_path}/{symbol}/" diff --git a/app/cron_options_stats.py b/app/cron_options_stats.py index 2fe6a9a..81deed0 100644 --- a/app/cron_options_stats.py +++ b/app/cron_options_stats.py @@ -12,6 +12,7 @@ from concurrent.futures import ThreadPoolExecutor import sqlite3 from dotenv import load_dotenv import os +import re load_dotenv() @@ -38,12 +39,18 @@ BATCH_SIZE = 1500 -def get_expiration_date(contract_id): - # Extract the date part (YYMMDD) from the contract ID - date_str = contract_id[2:8] - # Convert to datetime object - return datetime.strptime(date_str, "%y%m%d").date() - +def get_expiration_date(option_symbol): + # Define regex pattern to match the symbol structure + match = re.match(r"([A-Z]+)(\d{6})([CP])(\d+)", option_symbol) + if not match: + raise ValueError(f"Invalid option_symbol format: {option_symbol}") + + ticker, expiration, option_type, strike_price = match.groups() + + # Convert expiration to datetime + date_expiration = datetime.strptime(expiration, "%y%m%d").date() + return date_expiration + # Database connection and symbol retrieval def get_total_symbols():