90 lines
2.6 KiB
YAML
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
|