Skip to content

feat(strategy-optimizer): Strategy Optimizer via algorithme évolutionnaire (GH-32)#33

Merged
simodev25 merged 21 commits into
mainfrom
feat/GH-32/strategy-optimizer-openevolve
Jul 4, 2026
Merged

feat(strategy-optimizer): Strategy Optimizer via algorithme évolutionnaire (GH-32)#33
simodev25 merged 21 commits into
mainfrom
feat/GH-32/strategy-optimizer-openevolve

Conversation

@simodev25

Copy link
Copy Markdown
Owner

Résumé

  • Nouveau module d'optimisation de stratégies par algorithme évolutionnaire
  • Boucle mutation → backtest → scoring → sélection du meilleur
  • Intégration avec BacktestEngine et compute_generation_candidate_score existants
  • Queue Celery dédiée strategy-optimizer (isolation du pipeline)
  • Frontend : bouton OPTIMISER, progression temps réel, accepter/rejeter

Changements

Backend

  • 2 modèles DB : strategy_optimizer_campaigns, strategy_optimizer_evaluations
  • Migration Alembic 0016_strategy_optimizer_tables
  • Service StrategyOptimizer (boucle évolutionnaire avec mutation ±20% des params)
  • Adapter de bornes par template (optimizer_bounds.py)
  • Task Celery run_strategy_optimization sur queue dédiée
  • 5 endpoints REST : start, status, accept, reject, cancel

Frontend

  • Composant OptimizerPanel.tsx (progression + résultat + actions)
  • Intégration dans StrategiesPage (bouton OPTIMISER sur stratégies VALIDATED)
  • Polling 5s pour la progression
  • Affichage comparatif initial vs optimisé

Tests

  • 17 tests unitaires (service + adapter) passent
  • TypeScript tsc --noEmit : 0 erreur

Issue liée

Closes #32

Tests exécutés

cd backend && python3 -m pytest tests/test_optimizer_service.py tests/test_optimizer_adapter.py -v
# Résultat : 17 passed

cd frontend && npx tsc --noEmit
# Résultat : 0 erreurs

Résultat : ✅

Risques

  • Tests API ont des erreurs de setup (mock auth SQLAlchemy) — à fixer en follow-up
  • Pas encore testé en intégration complète avec DB réelle

Checklist

  • Aucun secret ajouté
  • Tests unitaires passent (17/17)
  • TypeScript compile sans erreur
  • Aucun impact sur backend/app/risk/
  • Queue Celery isolée (strategy-optimizer)
  • Pas d'auto-application — acceptation manuelle uniquement

simodev25 added 21 commits June 21, 2026 21:00
…ampaigns

- Create StrategyOptimizerCampaign model (status, config, params, score tracking)
- Create StrategyOptimizerEvaluation model (iteration-level results)
- Register models in __init__.py
- Add migration 0015 with indexes on strategy_id and campaign_id

Part of GH-32
…ry loop

- Add optimizer_bounds.py: parameter bounds for all 20 templates
- Add optimizer_adapter.py: encode/decode params, bounds validation, evaluator factory
- Add optimizer_service.py: campaign CRUD + main optimization loop with mutation
- Add config settings: queue, time limits, iteration limits

Part of GH-32
- Create optimizer_task.py: execute(campaign_id) with soft/hard time limits
- Register in celery_app.py include list and task_routes
- Route to dedicated 'strategy-optimizer' queue (isolated from backtests)
- Add openevolve>=0.1.0 to requirements.txt

Part of GH-32
…ycle

- POST /strategies/{id}/optimize: launch campaign (201)
- GET /strategies/{id}/optimizer-campaign: poll status
- POST /optimizer-campaign/{id}/accept: apply best_params
- POST /optimizer-campaign/{id}/reject: discard results
- DELETE /optimizer-campaign/{id}: cancel running campaign (204)
- Add OptimizerLaunchRequest and OptimizerCampaignOut schemas
- Error codes: 409 conflict, 422 invalid state, 404 not found

Part of GH-32
- Add 5 API methods to client.ts (launch, poll, accept, reject, cancel)
- Create OptimizerPanel.tsx: config modal, progress bar, results with diff
- Integrate panel into StrategyCard for VALIDATED strategies
- TypeScript strict: no errors (tsc --noEmit passes)

Part of GH-32
- test_optimizer_service.py: 7 tests (CRUD, state transitions, uniqueness)
- test_optimizer_adapter.py: 10 tests (roundtrip, bounds, evaluator)
- test_optimizer_api.py: API endpoint status codes (201, 422, 409, 404, 204)
- All 17 tests pass

Part of GH-32
@simodev25
simodev25 merged commit 31591d6 into main Jul 4, 2026
0 of 2 checks passed
@simodev25
simodev25 deleted the feat/GH-32/strategy-optimizer-openevolve branch July 4, 2026 15:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Strategy Optimizer — utiliser OpenEvolve pour trouver la meilleure stratégie

1 participant