#!/usr/bin/env python3 """ Premium Trading Dashboard - Clean Structure """ import os import sys import pandas as pd import gradio as gr import plotly.graph_objects as go import plotly.express as px from datetime import datetime, timedelta, timezone import logging import requests import time import nltk # Import dependencies with fallback try: from alpaca.trading.client import TradingClient from alpaca.trading.requests import GetOrdersRequest, GetPortfolioHistoryRequest from alpaca.trading.enums import OrderStatus from alpaca.data.timeframe import TimeFrame from alpaca.data.historical import StockHistoricalDataClient ALPACA_AVAILABLE = True except ImportError: ALPACA_AVAILABLE = False try: from textblob import TextBlob from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer SENTIMENT_AVAILABLE = True except ImportError: SENTIMENT_AVAILABLE = False # API Keys API_KEY = os.getenv('ALPACA_API_KEY', 'PK2FD9B2S86LHR7ZBHG1') SECRET_KEY = os.getenv('ALPACA_SECRET_KEY', 'QPmGPDgbPArvHv6cldBXc7uWddapYcIAnBhtkuBW') VM_API_URL = os.getenv('VM_API_URL', 'http://34.56.193.18:8090') # Configure logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) logger.info("🚀 Starting Premium Trading Dashboard...") # Download NLTK data try: nltk.download('punkt', quiet=True) nltk.download('vader_lexicon', quiet=True) logger.info("✅ NLTK data downloaded") except: logger.warning("⚠️ NLTK download failed") # Initialize clients trading_client = None if ALPACA_AVAILABLE: try: trading_client = TradingClient(api_key=API_KEY, secret_key=SECRET_KEY) logger.info("✅ Alpaca client initialized") except: logger.warning("⚠️ Alpaca client failed") # Simple functions for testing def get_account_info(): """Get account information""" if not trading_client: return { 'portfolio_value': 100000, 'buying_power': 25000, 'cash': 25000, 'day_change': 1250, 'equity': 100000 } try: account = trading_client.get_account() return { 'portfolio_value': float(account.portfolio_value), 'buying_power': float(account.buying_power), 'cash': float(account.cash), 'day_change': float(account.portfolio_value) - float(account.last_equity), 'equity': float(account.equity) } except Exception as e: logger.error(f"Account error: {e}") return {'error': str(e)} def refresh_account_overview(): """Refresh account overview""" logger.info("🔄 Refreshing account overview...") info = get_account_info() if 'error' in info: return "Error", "Error", "Error", "Error", "Error" return ( f"${info['portfolio_value']:,.2f}", f"${info['buying_power']:,.2f}", f"${info['cash']:,.2f}", f"${info['day_change']:+,.2f}", f"${info['equity']:,.2f}" ) def create_simple_chart(): """Create a simple chart""" import plotly.graph_objects as go fig = go.Figure() fig.add_trace(go.Scatter( x=[1, 2, 3, 4, 5], y=[10, 11, 12, 13, 14], mode='lines+markers', name='Portfolio Value' )) fig.update_layout( title="Sample Portfolio Chart", xaxis_title="Time", yaxis_title="Value ($)" ) return fig def get_sample_data(): """Get sample IPO data""" return """
| Symbol | Investment | P&L |
|---|---|---|
| RDDT | $1,000 | +$150 |
| PLTR | $1,000 | -$50 |
Real-time IPO Trading with Sentiment Analysis