45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
# 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")
|