version: '3.8' services: trading-bot: build: context: . dockerfile: Dockerfile target: production container_name: binance-trading-bot restart: unless-stopped environment: # Binance API Configuration BINANCE_API_KEY: ${BINANCE_API_KEY:-} BINANCE_SECRET_KEY: ${BINANCE_SECRET_KEY:-} BINANCE_TESTNET: ${BINANCE_TESTNET:-true} # Trading Configuration TRADING_SYMBOL: ${TRADING_SYMBOL:-BTCUSDT} POSITION_SIZE: ${POSITION_SIZE:-0.001} LEVERAGE: ${LEVERAGE:-1} MAX_POSITIONS: ${MAX_POSITIONS:-1} # Risk Management STOP_LOSS_PERCENT: ${STOP_LOSS_PERCENT:-2.0} TAKE_PROFIT_PERCENT: ${TAKE_PROFIT_PERCENT:-3.0} MAX_DAILY_LOSS: ${MAX_DAILY_LOSS:-5.0} MAX_PORTFOLIO_RISK: ${MAX_PORTFOLIO_RISK:-10.0} # Technical Indicators BOLLINGER_PERIOD: ${BOLLINGER_PERIOD:-20} BOLLINGER_STD: ${BOLLINGER_STD:-2.0} MA_PERIOD: ${MA_PERIOD:-50} MA_TYPE: ${MA_TYPE:-SMA} # Trading Strategy STRATEGY: ${STRATEGY:-BOLLINGER_MA} TIMEFRAME: ${TIMEFRAME:-1m} LOOKBACK_PERIODS: ${LOOKBACK_PERIODS:-100} # WebSocket Configuration WS_RECONNECT_DELAY: ${WS_RECONNECT_DELAY:-5} WS_PING_INTERVAL: ${WS_PING_INTERVAL:-20} WS_TIMEOUT: ${WS_TIMEOUT:-30} # Logging Configuration LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_FILE: ${LOG_FILE:-logs/trading_bot.log} LOG_MAX_SIZE: ${LOG_MAX_SIZE:-10485760} LOG_BACKUP_COUNT: ${LOG_BACKUP_COUNT:-5} # Database Configuration DATABASE_URL: ${DATABASE_URL:-sqlite:///data/trading_bot.db} TRACK_PERFORMANCE: ${TRACK_PERFORMANCE:-true} # Notification Configuration TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN:-} TELEGRAM_CHAT_ID: ${TELEGRAM_CHAT_ID:-} ENABLE_NOTIFICATIONS: ${ENABLE_NOTIFICATIONS:-false} # Safety Features PAPER_TRADING: ${PAPER_TRADING:-true} ENABLE_TRADING: ${ENABLE_TRADING:-false} TRADING_HOURS_START: ${TRADING_HOURS_START:-00:00} TRADING_HOURS_END: ${TRADING_HOURS_END:-23:59} # Performance Monitoring PERFORMANCE_UPDATE_INTERVAL: ${PERFORMANCE_UPDATE_INTERVAL:-60} SAVE_TRADES_TO_FILE: ${SAVE_TRADES_TO_FILE:-true} TRADES_FILE_PATH: ${TRADES_FILE_PATH:-data/trades.json} # Advanced Features ENABLE_VOLUME_ANALYSIS: ${ENABLE_VOLUME_ANALYSIS:-false} VOLUME_THRESHOLD: ${VOLUME_THRESHOLD:-1.5} ENABLE_SENTIMENT_ANALYSIS: ${ENABLE_SENTIMENT_ANALYSIS:-false} # Timezone TZ: ${TZ:-UTC} volumes: # Persistent data storage - ./data:/app/data - ./logs:/app/logs # Configuration files (optional) - ./.env:/app/.env:ro # Backup location (optional) - ./backups:/app/backups ports: # Monitoring port (optional) - "${MONITORING_PORT:-8000}:8000" networks: - trading-network # Resource limits deploy: resources: limits: cpus: '1.0' memory: 512M reservations: cpus: '0.5' memory: 256M # Health check healthcheck: test: ["CMD", "python", "-c", "import os; exit(0 if os.path.exists('/app/logs/trading_bot.log') else 1)"] interval: 30s timeout: 10s retries: 3 start_period: 30s # Logging configuration logging: driver: "json-file" options: max-size: "10m" max-file: "3" # Optional: Database service for advanced analytics database: image: postgres:15-alpine container_name: trading-bot-db restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-trading_bot} POSTGRES_USER: ${POSTGRES_USER:-trading_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-trading_password} POSTGRES_HOST_AUTH_METHOD: ${POSTGRES_HOST_AUTH_METHOD:-scram-sha-256} volumes: - postgres_data:/var/lib/postgresql/data - ./sql:/docker-entrypoint-initdb.d:ro ports: - "${POSTGRES_PORT:-5432}:5432" networks: - trading-network # Resource limits deploy: resources: limits: cpus: '0.5' memory: 256M reservations: cpus: '0.25' memory: 128M # Health check healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-trading_user} -d ${POSTGRES_DB:-trading_bot}"] interval: 30s timeout: 5s retries: 3 start_period: 30s # Optional: Monitoring service monitoring: image: prom/prometheus:latest container_name: trading-bot-monitoring restart: unless-stopped ports: - "${PROMETHEUS_PORT:-9090}:9090" volumes: - ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro - prometheus_data:/prometheus networks: - trading-network depends_on: - trading-bot profiles: - monitoring # Optional: Grafana for visualization grafana: image: grafana/grafana:latest container_name: trading-bot-grafana restart: unless-stopped environment: - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD:-admin} ports: - "${GRAFANA_PORT:-3000}:3000" volumes: - grafana_data:/var/lib/grafana - ./monitoring/grafana/dashboards:/etc/grafana/provisioning/dashboards:ro - ./monitoring/grafana/datasources:/etc/grafana/provisioning/datasources:ro networks: - trading-network depends_on: - monitoring profiles: - monitoring networks: trading-network: driver: bridge name: trading-network volumes: postgres_data: driver: local prometheus_data: driver: local grafana_data: driver: local