Edwin Salguero
feat(ui): add robust multi-interface UI system (Streamlit, Dash, Jupyter, WebSocket) with launcher, docs, and integration tests [skip ci]
9f44dc9
# UI Integration Guide | |
This guide covers the comprehensive UI system for the Algorithmic Trading project, providing multiple interface options for different use cases. | |
## π― UI Options Overview | |
### 1. **Streamlit UI** - Quick Prototyping | |
- **Best for**: Data scientists, quick experiments, rapid prototyping | |
- **Features**: Interactive widgets, real-time data visualization, easy configuration | |
- **Port**: 8501 | |
- **URL**: http://localhost:8501 | |
### 2. **Dash UI** - Enterprise Dashboards | |
- **Best for**: Production dashboards, real-time monitoring, complex analytics | |
- **Features**: Advanced charts, real-time updates, professional styling | |
- **Port**: 8050 | |
- **URL**: http://localhost:8050 | |
### 3. **Jupyter UI** - Interactive Notebooks | |
- **Best for**: Research, experimentation, educational purposes | |
- **Features**: Interactive widgets, code execution, rich documentation | |
- **Port**: 8888 | |
- **URL**: http://localhost:8888 | |
### 4. **WebSocket Server** - Real-time Data | |
- **Best for**: Real-time trading signals, live data streaming | |
- **Features**: WebSocket API, real-time updates, trading signals | |
- **Port**: 8765 | |
- **URL**: ws://localhost:8765 | |
## π Quick Start | |
### Prerequisites | |
```bash | |
# Install UI dependencies | |
pip install -r requirements.txt | |
# Verify installation | |
python -c "import streamlit, dash, plotly, ipywidgets; print('β All UI dependencies installed')" | |
``` | |
### Launch Individual UIs | |
#### Streamlit (Recommended for beginners) | |
```bash | |
python ui_launcher.py streamlit | |
``` | |
#### Dash (Recommended for production) | |
```bash | |
python ui_launcher.py dash | |
``` | |
#### Jupyter Lab | |
```bash | |
python ui_launcher.py jupyter | |
``` | |
#### WebSocket Server | |
```bash | |
python ui_launcher.py websocket | |
``` | |
#### Launch All UIs | |
```bash | |
python ui_launcher.py all | |
``` | |
## π Streamlit UI Features | |
### Dashboard | |
- **System Status**: Real-time trading status, portfolio value, P&L | |
- **Configuration Management**: Load and modify trading parameters | |
- **Quick Actions**: One-click data loading, Alpaca connection, model training | |
### Data Ingestion | |
- **Multiple Sources**: CSV, Alpaca API, Synthetic data | |
- **Data Validation**: Automatic data quality checks | |
- **Technical Indicators**: Automatic calculation of moving averages, RSI, MACD | |
- **Interactive Charts**: Candlestick, line, volume charts with Plotly | |
### Alpaca Integration | |
- **Account Connection**: Secure API key management | |
- **Market Status**: Real-time market hours and status | |
- **Position Monitoring**: Current positions and portfolio value | |
- **Order Management**: Buy/sell order execution | |
### FinRL Training | |
- **Algorithm Selection**: PPO, A2C, DDPG, TD3 | |
- **Hyperparameter Tuning**: Learning rate, batch size, training steps | |
- **Training Progress**: Real-time training metrics and progress | |
- **Model Evaluation**: Performance metrics and backtesting | |
### Trading Controls | |
- **Live Trading**: Start/stop live trading with Alpaca | |
- **Backtesting**: Historical strategy testing | |
- **Risk Management**: Position sizing and drawdown limits | |
- **Emergency Stop**: Immediate trading halt | |
### Portfolio Monitoring | |
- **Real-time Portfolio**: Live portfolio value and P&L | |
- **Position Analysis**: Individual position performance | |
- **Allocation Charts**: Portfolio allocation visualization | |
- **Risk Metrics**: Sharpe ratio, drawdown analysis | |
## π Dash UI Features | |
### Enterprise Dashboard | |
- **Professional Styling**: Bootstrap themes and responsive design | |
- **Real-time Updates**: Live data streaming and updates | |
- **Advanced Charts**: Interactive Plotly charts with zoom, pan, hover | |
- **Multi-page Navigation**: Tabbed interface for different functions | |
### Advanced Analytics | |
- **Technical Analysis**: Advanced charting with indicators | |
- **Performance Metrics**: Comprehensive trading performance analysis | |
- **Risk Management**: Advanced risk monitoring and alerts | |
- **Strategy Comparison**: Multiple strategy backtesting and comparison | |
### Real-time Monitoring | |
- **Live Trading Activity**: Real-time trade execution monitoring | |
- **System Alerts**: Automated alerts for important events | |
- **Portfolio Tracking**: Live portfolio updates and analysis | |
- **Market Data**: Real-time market data visualization | |
## π Jupyter UI Features | |
### Interactive Development | |
- **Widget-based Interface**: Interactive controls for all functions | |
- **Code Execution**: Direct Python code execution and experimentation | |
- **Data Exploration**: Interactive data analysis and visualization | |
- **Model Development**: Iterative model training and testing | |
### Research Tools | |
- **Notebook Integration**: Rich documentation and code examples | |
- **Data Analysis**: Pandas and NumPy integration | |
- **Visualization**: Matplotlib, Seaborn, Plotly integration | |
- **Experiment Tracking**: Training history and model comparison | |
## π WebSocket API | |
### Real-time Data Streaming | |
```javascript | |
// Connect to WebSocket server | |
const ws = new WebSocket('ws://localhost:8765'); | |
// Listen for market data updates | |
ws.onmessage = function(event) { | |
const data = JSON.parse(event.data); | |
if (data.type === 'market_data') { | |
console.log('Price:', data.price); | |
console.log('Volume:', data.volume); | |
} | |
if (data.type === 'trading_signal') { | |
console.log('Signal:', data.signal); | |
} | |
if (data.type === 'portfolio_update') { | |
console.log('Portfolio:', data.account); | |
} | |
}; | |
``` | |
### Available Message Types | |
- `market_data`: Real-time price and volume data | |
- `trading_signal`: FinRL model trading signals | |
- `portfolio_update`: Account and position updates | |
- `trading_status`: Trading system status | |
- `system_alert`: System alerts and notifications | |
## π οΈ Configuration | |
### Environment Variables | |
```bash | |
# Alpaca API credentials | |
export ALPACA_API_KEY="your_api_key" | |
export ALPACA_SECRET_KEY="your_secret_key" | |
# UI configuration | |
export STREAMLIT_SERVER_PORT=8501 | |
export DASH_SERVER_PORT=8050 | |
export JUPYTER_PORT=8888 | |
export WEBSOCKET_PORT=8765 | |
``` | |
### Configuration File | |
```yaml | |
# config.yaml | |
ui: | |
streamlit: | |
server_port: 8501 | |
server_address: "0.0.0.0" | |
theme: "light" | |
dash: | |
server_port: 8050 | |
server_address: "0.0.0.0" | |
theme: "bootstrap" | |
jupyter: | |
port: 8888 | |
ip: "0.0.0.0" | |
token: "" | |
websocket: | |
host: "0.0.0.0" | |
port: 8765 | |
max_connections: 100 | |
``` | |
## π§ Customization | |
### Adding Custom Charts | |
```python | |
# In ui/streamlit_app.py | |
def create_custom_chart(data): | |
fig = go.Figure() | |
fig.add_trace(go.Scatter( | |
x=data['timestamp'], | |
y=data['custom_indicator'], | |
name='Custom Indicator' | |
)) | |
return fig | |
``` | |
### Custom Trading Strategies | |
```python | |
# In ui/dash_app.py | |
def custom_strategy(data, config): | |
# Implement your custom strategy | |
signals = [] | |
for i in range(len(data)): | |
if data['sma_20'][i] > data['sma_50'][i]: | |
signals.append('BUY') | |
else: | |
signals.append('SELL') | |
return signals | |
``` | |
### WebSocket Custom Messages | |
```python | |
# In ui/websocket_server.py | |
async def broadcast_custom_message(self, message_type, data): | |
message = { | |
"type": message_type, | |
"timestamp": datetime.now().isoformat(), | |
"data": data | |
} | |
await self.broadcast(message) | |
``` | |
## π Deployment | |
### Docker Deployment | |
```bash | |
# Build UI-enabled Docker image | |
docker build -t trading-ui . | |
# Run with UI ports exposed | |
docker run -p 8501:8501 -p 8050:8050 -p 8888:8888 -p 8765:8765 trading-ui | |
``` | |
### Production Deployment | |
```bash | |
# Using Gunicorn for production | |
pip install gunicorn | |
# Start Dash app with Gunicorn | |
gunicorn -w 4 -b 0.0.0.0:8050 ui.dash_app:app | |
# Start Streamlit with production settings | |
streamlit run ui/streamlit_app.py --server.port 8501 --server.address 0.0.0.0 | |
``` | |
### Cloud Deployment | |
```bash | |
# Deploy to Heroku | |
heroku create trading-ui-app | |
git push heroku main | |
# Deploy to AWS | |
aws ecs create-service --cluster trading-cluster --service-name trading-ui | |
``` | |
## π Troubleshooting | |
### Common Issues | |
#### Port Already in Use | |
```bash | |
# Find process using port | |
lsof -i :8501 | |
# Kill process | |
kill -9 <PID> | |
# Or use different port | |
python ui_launcher.py streamlit --port 8502 | |
``` | |
#### Missing Dependencies | |
```bash | |
# Install missing packages | |
pip install streamlit dash plotly ipywidgets | |
# Or reinstall all requirements | |
pip install -r requirements.txt | |
``` | |
#### Alpaca Connection Issues | |
```bash | |
# Check API credentials | |
echo $ALPACA_API_KEY | |
echo $ALPACA_SECRET_KEY | |
# Test connection | |
python -c "from agentic_ai_system.alpaca_broker import AlpacaBroker; print('Connection test')" | |
``` | |
### Debug Mode | |
```bash | |
# Enable debug logging | |
export LOG_LEVEL=DEBUG | |
# Run with debug output | |
python ui_launcher.py streamlit --debug | |
``` | |
## π API Reference | |
### Streamlit Functions | |
- `create_streamlit_app()`: Create Streamlit application | |
- `TradingUI.run()`: Run the main UI application | |
- `load_configuration()`: Load trading configuration | |
- `display_system_status()`: Show system status | |
### Dash Functions | |
- `create_dash_app()`: Create Dash application | |
- `TradingDashApp.setup_layout()`: Setup dashboard layout | |
- `TradingDashApp.setup_callbacks()`: Setup interactive callbacks | |
### Jupyter Functions | |
- `create_jupyter_interface()`: Create Jupyter interface | |
- `TradingJupyterUI.display_interface()`: Display interactive widgets | |
- `TradingJupyterUI.update_chart()`: Update chart displays | |
### WebSocket Functions | |
- `create_websocket_server()`: Create WebSocket server | |
- `TradingWebSocketServer.broadcast()`: Broadcast messages | |
- `TradingWebSocketServer.handle_client_message()`: Handle client messages | |
## π€ Contributing | |
### Adding New UI Features | |
1. Create feature branch: `git checkout -b feature/new-ui-feature` | |
2. Implement feature in appropriate UI module | |
3. Add tests in `tests/ui/` directory | |
4. Update documentation | |
5. Submit pull request | |
### UI Development Guidelines | |
- Follow PEP 8 style guidelines | |
- Add type hints for all functions | |
- Include docstrings for all classes and methods | |
- Write unit tests for new features | |
- Update documentation for new features | |
## π Support | |
For UI-related issues: | |
1. Check the troubleshooting section | |
2. Review the logs in `logs/ui/` directory | |
3. Create an issue on GitHub with detailed error information | |
4. Include system information and error logs | |
## π Updates | |
### UI Version History | |
- **v1.0.0**: Initial UI implementation with Streamlit, Dash, Jupyter, and WebSocket | |
- **v1.1.0**: Added real-time data streaming and advanced charts | |
- **v1.2.0**: Enhanced portfolio monitoring and risk management | |
- **v1.3.0**: Added custom strategy development tools | |
### Upcoming Features | |
- **v1.4.0**: Machine learning model visualization | |
- **v1.5.0**: Advanced backtesting interface | |
- **v1.6.0**: Multi-asset portfolio management | |
- **v1.7.0**: Social trading features |