# Makefile pour Trading AI Secure # Facilite les commandes courantes .PHONY: help install test lint format clean run-backtest run-paper \ docker-build docker-up docker-down docker-logs docker-restart \ docker-api-logs docker-ml-logs docker-ps # Couleurs pour output BLUE := \033[0;34m GREEN := \033[0;32m YELLOW := \033[0;33m RED := \033[0;31m NC := \033[0m # No Color help: ## Affiche cette aide @echo "$(BLUE)Trading AI Secure - Commandes Disponibles$(NC)" @echo "" @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "$(GREEN)%-20s$(NC) %s\n", $$1, $$2}' install: ## Installe les dépendances @echo "$(BLUE)Installation des dépendances...$(NC)" pip install -r requirements.txt @echo "$(GREEN)✅ Installation terminée$(NC)" install-dev: ## Installe dépendances + outils dev @echo "$(BLUE)Installation dépendances dev...$(NC)" pip install -r requirements.txt pip install pytest pytest-cov pytest-asyncio black pylint isort @echo "$(GREEN)✅ Installation dev terminée$(NC)" test: ## Lance tous les tests @echo "$(BLUE)Lancement des tests...$(NC)" python run_tests.py test-unit: ## Lance tests unitaires @echo "$(BLUE)Lancement tests unitaires...$(NC)" python run_tests.py --unit test-coverage: ## Lance tests avec coverage @echo "$(BLUE)Lancement tests avec coverage...$(NC)" python run_tests.py --coverage @echo "$(GREEN)✅ Rapport coverage généré dans htmlcov/$(NC)" lint: ## Vérifie le code avec pylint @echo "$(BLUE)Vérification du code...$(NC)" pylint src/ format: ## Formate le code avec black et isort @echo "$(BLUE)Formatage du code...$(NC)" black src/ tests/ isort src/ tests/ @echo "$(GREEN)✅ Code formaté$(NC)" format-check: ## Vérifie le formatage sans modifier @echo "$(BLUE)Vérification formatage...$(NC)" black --check src/ tests/ isort --check-only src/ tests/ clean: ## Nettoie les fichiers temporaires @echo "$(BLUE)Nettoyage...$(NC)" find . -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true find . -type d -name "*.egg-info" -exec rm -rf {} + 2>/dev/null || true find . -type d -name ".pytest_cache" -exec rm -rf {} + 2>/dev/null || true find . -type d -name ".coverage" -exec rm -rf {} + 2>/dev/null || true find . -type d -name "htmlcov" -exec rm -rf {} + 2>/dev/null || true find . -type f -name "*.pyc" -delete 2>/dev/null || true @echo "$(GREEN)✅ Nettoyage terminé$(NC)" setup-config: ## Copie les fichiers de configuration @echo "$(BLUE)Configuration du projet...$(NC)" cp config/risk_limits.example.yaml config/risk_limits.yaml cp config/strategy_params.example.yaml config/strategy_params.yaml cp config/data_sources.example.yaml config/data_sources.yaml @echo "$(GREEN)✅ Fichiers de configuration créés$(NC)" @echo "$(YELLOW)⚠️ Éditer les fichiers dans config/ selon vos besoins$(NC)" run-example: ## Lance l'exemple simple @echo "$(BLUE)Lancement exemple simple...$(NC)" python examples/simple_backtest.py run-backtest: ## Lance backtest interactif @echo "$(BLUE)Lancement backtest...$(NC)" python src/main.py --mode backtest --strategy intraday --symbol EURUSD --period 6m run-paper: ## Lance paper trading @echo "$(BLUE)Lancement paper trading...$(NC)" @echo "$(YELLOW)⚠️ Appuyez sur Ctrl+C pour arrêter$(NC)" python src/main.py --mode paper --strategy intraday run-optimize: ## Lance optimisation paramètres @echo "$(BLUE)Lancement optimisation...$(NC)" python src/main.py --mode optimize --strategy intraday --n-trials 50 dashboard: ## Lance le dashboard Streamlit @echo "$(BLUE)Lancement dashboard...$(NC)" streamlit run src/ui/dashboard.py logs: ## Affiche les logs en temps réel @echo "$(BLUE)Logs en temps réel...$(NC)" tail -f logs/trading.log check-all: format-check lint test ## Vérifie tout (format, lint, tests) @echo "$(GREEN)✅ Toutes les vérifications passées$(NC)" init: install setup-config ## Initialisation complète du projet @echo "$(GREEN)✅ Projet initialisé$(NC)" @echo "" @echo "$(BLUE)Prochaines étapes:$(NC)" @echo "1. Éditer les fichiers de configuration dans config/" @echo "2. Lancer les tests: make test" @echo "3. Lancer un exemple: make run-example" # ============================================================ # DOCKER # ============================================================ docker-build: ## Build toutes les images Docker @echo "$(BLUE)Build des images Docker...$(NC)" docker compose build @echo "$(GREEN)✅ Images buildées$(NC)" docker-build-nocache: ## Build sans cache (force rebuild complet) @echo "$(BLUE)Build sans cache...$(NC)" docker compose build --no-cache @echo "$(GREEN)✅ Build terminé$(NC)" docker-up: ## Démarre tous les services @echo "$(BLUE)Démarrage des services...$(NC)" docker compose up -d @echo "$(GREEN)✅ Services démarrés$(NC)" @echo "" @echo "$(BLUE)Services disponibles :$(NC)" @echo " API → http://localhost:8100/docs" @echo " ML → http://localhost:8200/docs" @echo " Dashboard → http://localhost:8501" @echo " Jupyter → http://localhost:8888" @echo " Grafana → http://localhost:3100" docker-down: ## Arrête tous les services @echo "$(BLUE)Arrêt des services...$(NC)" docker compose down @echo "$(GREEN)✅ Services arrêtés$(NC)" docker-down-volumes: ## Arrête les services ET supprime les volumes (DANGER: perte données DB) @echo "$(RED)⚠️ Suppression des volumes ! Toutes les données DB seront perdues.$(NC)" @read -p "Continuer ? (yes/no) : " confirm && [ "$$confirm" = "yes" ] || exit 1 docker compose down -v @echo "$(GREEN)✅ Services et volumes supprimés$(NC)" docker-restart: ## Redémarre tous les services docker compose restart docker-ps: ## Affiche l'état des containers docker compose ps docker-logs: ## Affiche les logs de tous les services docker compose logs -f docker-api-logs: ## Logs du service API docker compose logs -f trading-api docker-ml-logs: ## Logs du service ML docker compose logs -f trading-ml docker-dashboard-logs: ## Logs du dashboard Streamlit docker compose logs -f trading-dashboard docker-db-logs: ## Logs de la base de données docker compose logs -f trading-db docker-init: ## Initialisation complète : copie .env + build + démarrage @echo "$(BLUE)Initialisation Docker...$(NC)" @if [ ! -f .env ]; then \ cp .env.example .env; \ echo "$(YELLOW)⚠️ .env créé depuis .env.example - Éditer les mots de passe !$(NC)"; \ fi $(MAKE) docker-build $(MAKE) docker-up .DEFAULT_GOAL := help