3.1 - 3.3 Add main Dash application for Crypto Trading Bot Dashboard

- Introduced `app.py` as the main entry point for the dashboard, providing real-time visualization and bot management interface.
- Implemented layout components including header, navigation tabs, and content areas for market data, bot management, performance analytics, and system health.
- Added callbacks for dynamic updates of market data charts and statistics, ensuring real-time interaction.
- Created reusable UI components in `components` directory for modularity and maintainability.
- Enhanced database operations for fetching market data and checking data availability.
- Updated `main.py` to start the dashboard application with improved user instructions and error handling.
- Documented components and functions for clarity and future reference.
This commit is contained in:
Vasily.onl
2025-06-03 12:09:37 +08:00
parent 74d7e1ab2c
commit 720002a441
7 changed files with 1190 additions and 21 deletions

View File

@@ -169,7 +169,7 @@ class MarketDataRepository(BaseRepository):
query = text("""
SELECT exchange, symbol, timeframe, timestamp,
open, high, low, close, volume, trades_count,
created_at, updated_at
created_at
FROM market_data
WHERE exchange = :exchange
AND symbol = :symbol
@@ -200,15 +200,14 @@ class MarketDataRepository(BaseRepository):
'close': row.close,
'volume': row.volume,
'trades_count': row.trades_count,
'created_at': row.created_at,
'updated_at': row.updated_at
'created_at': row.created_at
})
self.log_info(f"Retrieved {len(candles)} candles for {symbol} {timeframe}")
self.log_debug(f"Retrieved {len(candles)} candles for {symbol} {timeframe}")
return candles
except Exception as e:
self.log_error(f"Error retrieving candles for {symbol} {timeframe}: {e}")
self.log_error(f"Error retrieving candles: {e}")
raise DatabaseOperationError(f"Failed to retrieve candles: {e}")
def get_latest_candle(self, symbol: str, timeframe: str, exchange: str = "okx") -> Optional[Dict[str, Any]]:
@@ -228,7 +227,7 @@ class MarketDataRepository(BaseRepository):
query = text("""
SELECT exchange, symbol, timeframe, timestamp,
open, high, low, close, volume, trades_count,
created_at, updated_at
created_at
FROM market_data
WHERE exchange = :exchange
AND symbol = :symbol
@@ -256,8 +255,7 @@ class MarketDataRepository(BaseRepository):
'close': row.close,
'volume': row.volume,
'trades_count': row.trades_count,
'created_at': row.created_at,
'updated_at': row.updated_at
'created_at': row.created_at
}
return None