# modules/signals/forex_view.py import pandas as pd from tabulate import tabulate import logging logger = logging.getLogger(__name__) class ForexView: def __init__(self, db_connection): self.db = db_connection def get_forex_rates(self) -> pd.DataFrame: try: query = """ WITH latest_date AS ( SELECT MAX(date) as max_date FROM forex_prices ) SELECT fp.symbol, fp.description, fp.close as rate, fp.close - fp.open as daily_change, ((fp.close - fp.open) / fp.open * 100) as daily_change_percent, fp.date FROM forex_pairs fp JOIN forex_prices fpr ON fpr.pair_id = fp.id WHERE fpr.date = (SELECT max_date FROM latest_date) ORDER BY ABS(fpr.close - fpr.open) DESC; """ return self.db.execute_query(query) except Exception as e: logger.error(f"Error fetching forex rates: {e}") return pd.DataFrame() def display(self): print("\n=== Forex Market Overview ===") rates_data = self.get_forex_rates() if not rates_data.empty: print("\nCurrency Pair Rates:") print(tabulate(rates_data, headers='keys', tablefmt='fancy_grid', floatfmt=".4f")) else: print("\nNo recent forex data available")