1
Fork 0
crypto_bot_training/trading_bot/docker-compose.yml
2025-07-15 08:18:00 +07:00

224 lines
No EOL
5.8 KiB
YAML

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