RivaTerminal/modules/signals/forex_view.py

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")