services: trading-bot: build: . container_name: trading-system restart: unless-stopped environment: # Alpaca API Configuration - ALPACA_API_KEY=${ALPACA_API_KEY} - ALPACA_SECRET_KEY=${ALPACA_SECRET_KEY} - ALPACA_BASE_URL=${ALPACA_BASE_URL:-https://paper-api.alpaca.markets} # Trading Configuration - STRATEGY_TYPE=${STRATEGY_TYPE:-enhanced} - SYMBOL=${SYMBOL:-ETH/USD} - TRADING_MODE=${TRADING_MODE:-paper} # Risk Management - MAX_POSITION_SIZE=${MAX_POSITION_SIZE:-0.95} - RISK_PER_TRADE=${RISK_PER_TRADE:-0.02} - MAX_DRAWDOWN_LIMIT=${MAX_DRAWDOWN_LIMIT:-0.15} # Logging - LOG_LEVEL=${LOG_LEVEL:-INFO} - TZ=UTC volumes: # Persist logs - ./logs:/app/logs # Optional: Mount config for easy updates - ./config:/app/config:ro # Resource limits for safety deploy: resources: limits: memory: 512M cpus: '0.5' reservations: memory: 256M cpus: '0.25' # Health check healthcheck: test: ["CMD", "python3", "-c", "import sys; sys.path.append('src'); from src.data_handler import DataHandler; DataHandler().get_latest_price('ETH/USD')"] interval: 60s timeout: 30s retries: 3 start_period: 30s # Command override based on mode command: > sh -c " if [ '${TRADING_MODE}' = 'live' ]; then echo '⚠️ LIVE TRADING MODE - USE WITH EXTREME CAUTION ⚠️'; sleep 10; python3 main.py --mode live --strategy ${STRATEGY_TYPE:-enhanced}; else echo '📄 PAPER TRADING MODE (Safe)'; python3 main.py --mode paper --strategy ${STRATEGY_TYPE:-enhanced}; fi " # Optional: Monitoring service monitoring: image: alpine:latest container_name: trading-monitor restart: unless-stopped depends_on: - trading-bot volumes: - ./logs:/logs:ro command: > sh -c " while true; do echo '📊 Trading System Status - $(date)'; echo '📈 Latest Performance:'; tail -5 /logs/performance.log 2>/dev/null || echo 'No performance data yet'; echo '🔄 Latest Trades:'; tail -3 /logs/trades.log 2>/dev/null || echo 'No trades yet'; echo '⚠️ Latest Warnings:'; tail -3 /logs/risk.log 2>/dev/null || echo 'No risk events'; echo '----------------------------------------'; sleep 300; # Check every 5 minutes done " networks: default: name: trading-network