224 lines
No EOL
5.8 KiB
YAML
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 |