feat: add date range input functionality to stock scanners
This commit is contained in:
parent
0f60515442
commit
a8dd33c3d9
@ -1,4 +1,4 @@
|
|||||||
from screener.user_input import get_interval_choice
|
from screener.user_input import get_interval_choice, get_date_range
|
||||||
import os
|
import os
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
@ -47,8 +47,7 @@ def run_atr_ema_scanner(min_price: float, max_price: float, min_volume: int, por
|
|||||||
# Get time interval
|
# Get time interval
|
||||||
interval = get_interval_choice()
|
interval = get_interval_choice()
|
||||||
|
|
||||||
end_date = datetime.now()
|
start_date, end_date = get_date_range()
|
||||||
start_date = end_date - timedelta(days=1) # Get last trading day
|
|
||||||
start_ts = int(start_date.timestamp() * 1000000000)
|
start_ts = int(start_date.timestamp() * 1000000000)
|
||||||
end_ts = int(end_date.timestamp() * 1000000000)
|
end_ts = int(end_date.timestamp() * 1000000000)
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import os
|
|||||||
from db.db_connection import create_client
|
from db.db_connection import create_client
|
||||||
from trading.position_calculator import PositionCalculator
|
from trading.position_calculator import PositionCalculator
|
||||||
from utils.data_utils import get_stock_data
|
from utils.data_utils import get_stock_data
|
||||||
from screener.user_input import get_interval_choice
|
from screener.user_input import get_interval_choice, get_date_range
|
||||||
from indicators.three_atr_ema import ThreeATREMAIndicator
|
from indicators.three_atr_ema import ThreeATREMAIndicator
|
||||||
|
|
||||||
def check_entry_signal(df: pd.DataFrame) -> bool:
|
def check_entry_signal(df: pd.DataFrame) -> bool:
|
||||||
@ -61,8 +61,7 @@ def run_atr_ema_scanner_v2(min_price: float, max_price: float, min_volume: int,
|
|||||||
|
|
||||||
interval = get_interval_choice()
|
interval = get_interval_choice()
|
||||||
|
|
||||||
end_date = datetime.now()
|
start_date, end_date = get_date_range()
|
||||||
start_date = end_date - timedelta(days=1)
|
|
||||||
start_ts = int(start_date.timestamp() * 1000000000)
|
start_ts = int(start_date.timestamp() * 1000000000)
|
||||||
end_ts = int(end_date.timestamp() * 1000000000)
|
end_ts = int(end_date.timestamp() * 1000000000)
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,50 @@
|
|||||||
|
from datetime import datetime, timedelta
|
||||||
from screener.screeners import SCREENERS # Import SCREENERS dictionary
|
from screener.screeners import SCREENERS # Import SCREENERS dictionary
|
||||||
|
|
||||||
|
def get_date_input(prompt: str, default_date: datetime = None) -> datetime:
|
||||||
|
"""
|
||||||
|
Get a date input from the user with validation
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prompt (str): Message to display to user
|
||||||
|
default_date (datetime, optional): Default date if user presses enter
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
datetime: The validated date
|
||||||
|
"""
|
||||||
|
while True:
|
||||||
|
date_str = input(prompt)
|
||||||
|
if not date_str and default_date:
|
||||||
|
return default_date
|
||||||
|
|
||||||
|
try:
|
||||||
|
return datetime.strptime(date_str, "%Y-%m-%d")
|
||||||
|
except ValueError:
|
||||||
|
print("Invalid date format. Please use YYYY-MM-DD")
|
||||||
|
|
||||||
|
def get_date_range() -> tuple:
|
||||||
|
"""
|
||||||
|
Get start and end dates from user
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
tuple: (start_date, end_date) as datetime objects
|
||||||
|
"""
|
||||||
|
print("\nEnter date range (format: YYYY-MM-DD)")
|
||||||
|
print("Press Enter for end date to use current date")
|
||||||
|
|
||||||
|
start_date = get_date_input("Start date: ")
|
||||||
|
|
||||||
|
# Default end date is current date
|
||||||
|
default_end = datetime.now()
|
||||||
|
end_date = get_date_input(f"End date [{default_end.strftime('%Y-%m-%d')}]: ", default_end)
|
||||||
|
|
||||||
|
# Ensure end date is not before start date
|
||||||
|
if end_date < start_date:
|
||||||
|
print("End date cannot be before start date. Setting end date to start date.")
|
||||||
|
end_date = start_date
|
||||||
|
|
||||||
|
return start_date, end_date
|
||||||
|
|
||||||
def get_interval_choice() -> str:
|
def get_interval_choice() -> str:
|
||||||
"""Get user's preferred time interval"""
|
"""Get user's preferred time interval"""
|
||||||
print("\nSelect Time Interval:")
|
print("\nSelect Time Interval:")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user