trading-algo/docker-compose.yml
Gal Podlipnik 761e595389 docker
2025-07-17 02:43:19 +02:00

90 lines
2.6 KiB
YAML

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:-AAPL}
- 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('AAPL')"]
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