fix: Prevent future dates in queries and add date validation
This commit is contained in:
parent
0d0c4944d8
commit
1d51e491f2
@ -9,7 +9,7 @@ from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
|
||||
# Configure logging
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logging.basicConfig(level=logging.WARNING)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def create_client():
|
||||
|
||||
@ -4,7 +4,7 @@ from datetime import datetime, timedelta
|
||||
import pandas as pd
|
||||
from db.db_connection import create_client
|
||||
from trading.position_calculator import PositionCalculator
|
||||
from utils.data_utils import get_stock_data
|
||||
from utils.data_utils import get_stock_data, validate_signal_date
|
||||
from indicators.three_atr_ema import ThreeATREMAIndicator
|
||||
|
||||
def check_atr_ema_bullish_signal(df: pd.DataFrame) -> bool:
|
||||
@ -65,6 +65,7 @@ def run_atr_ema_scanner(min_price: float, max_price: float, min_volume: int, por
|
||||
max(window_start) as last_update
|
||||
FROM stock_db.stock_prices
|
||||
WHERE window_start BETWEEN {start_ts} AND {end_ts}
|
||||
AND toDateTime(window_start/1000000000) <= now()
|
||||
GROUP BY ticker
|
||||
HAVING last_close BETWEEN {min_price} AND {max_price}
|
||||
AND total_volume >= {min_volume}
|
||||
|
||||
@ -3,7 +3,7 @@ import pandas as pd
|
||||
import os
|
||||
from db.db_connection import create_client
|
||||
from trading.position_calculator import PositionCalculator
|
||||
from utils.data_utils import get_stock_data
|
||||
from utils.data_utils import get_stock_data, validate_signal_date
|
||||
from screener.user_input import get_interval_choice, get_date_range
|
||||
from indicators.three_atr_ema import ThreeATREMAIndicator
|
||||
|
||||
@ -81,6 +81,7 @@ def run_atr_ema_scanner_v2(min_price: float, max_price: float, min_volume: int,
|
||||
max(window_start) as last_update
|
||||
FROM stock_db.stock_prices
|
||||
WHERE window_start BETWEEN {start_ts} AND {end_ts}
|
||||
AND toDateTime(window_start/1000000000) <= now()
|
||||
GROUP BY ticker
|
||||
HAVING last_close BETWEEN {min_price} AND {max_price}
|
||||
AND total_volume >= {min_volume}
|
||||
|
||||
@ -6,7 +6,7 @@ from db.db_connection import create_client
|
||||
from indicators.sunny_bands import SunnyBands
|
||||
from trading.position_calculator import PositionCalculator
|
||||
from screener.user_input import get_interval_choice, get_date_range
|
||||
from utils.data_utils import get_stock_data
|
||||
from utils.data_utils import get_stock_data, validate_signal_date
|
||||
|
||||
|
||||
|
||||
@ -187,6 +187,7 @@ def run_sunny_scanner(min_price: float, max_price: float, min_volume: int, portf
|
||||
max(window_start) as last_update
|
||||
FROM stock_db.stock_prices
|
||||
WHERE window_start BETWEEN {start_ts} AND {end_ts}
|
||||
AND toDateTime(window_start/1000000000) <= now()
|
||||
GROUP BY ticker
|
||||
HAVING last_close BETWEEN {min_price} AND {max_price}
|
||||
AND total_volume >= {min_volume}
|
||||
@ -265,7 +266,7 @@ def run_sunny_scanner(min_price: float, max_price: float, min_volume: int, portf
|
||||
bullish_signals.append(signal_data)
|
||||
# Update print output format
|
||||
dollar_risk = position['potential_loss'] * -1
|
||||
signal_date = df.iloc[-1]['date'] # Get the date of the signal
|
||||
signal_date = validate_signal_date(df.iloc[-1]['date']) # Get and validate the date
|
||||
signal_data['signal_date'] = signal_date # Add to signal data
|
||||
print(f"\n🟢 {ticker} @ ${current_price:.2f} on {signal_date.strftime('%Y-%m-%d %H:%M')}")
|
||||
print(f" Size: {position['shares']} shares (${position['position_value']:.2f})")
|
||||
|
||||
@ -2,6 +2,21 @@ import pandas as pd
|
||||
from datetime import datetime, timedelta
|
||||
from db.db_connection import create_client
|
||||
|
||||
def validate_signal_date(signal_date: datetime) -> datetime:
|
||||
"""
|
||||
Validate and adjust signal date if needed
|
||||
|
||||
Args:
|
||||
signal_date (datetime): Signal date to validate
|
||||
|
||||
Returns:
|
||||
datetime: Valid signal date (not in future)
|
||||
"""
|
||||
current_date = datetime.now()
|
||||
if signal_date > current_date:
|
||||
return current_date
|
||||
return signal_date
|
||||
|
||||
def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interval: str) -> pd.DataFrame:
|
||||
"""
|
||||
Fetch stock data from the database with enhanced fallback logic
|
||||
@ -41,8 +56,7 @@ def get_stock_data(ticker: str, start_date: datetime, end_date: datetime, interv
|
||||
AND window_start BETWEEN
|
||||
{int(start_date.timestamp() * 1e9)} AND
|
||||
{int(end_date.timestamp() * 1e9)}
|
||||
AND toYear(toDateTime(window_start/1000000000)) <= toYear(now())
|
||||
AND toYear(toDateTime(window_start/1000000000)) >= (toYear(now()) - 1)
|
||||
AND toDateTime(window_start/1000000000) <= now()
|
||||
ORDER BY date ASC
|
||||
"""
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user