PagesOptimisation · 20 / 29
Optimisation
QuantCraft peut exécuter de nombreux backtests à la suite avec différentes valeurs pour vos paramètres d'entrée et vous laisser comparer les résultats. Configurez les exécutions depuis Test (Exécution du code) ; les résultats synthétiques apparaissent dans les Résultats des tests. Deux stratégies de recherche sont disponibles :
- Brute force — essaie chaque combinaison des valeurs que vous listez.
- Genetic — utilise un algorithme génétique pour explorer de grands espaces de recherche avec beaucoup moins d'exécutions.
Les deux modes se configurent dans l'onglet Script de la fenêtre Run backtest (le bouton Test) et n'apparaissent que lorsque votre script déclare des paramètres via quantcraft.inputs (les anciens chemins quantcraft.inputs_module / ide.inputs_module sont toujours reconnus pour les scripts existants). Enregistrez les grilles d'optimisation et les autres réglages de la fenêtre avec les Préréglages d'exécution (.qcs) (optStep / optMax sont stockés pour les préréglages de backtest).
Où le trouver
- Ouvrez la fenêtre Test avec le bouton Test de la barre d'outils de l'IDE.
- Ouvrez l'onglet Script (affiché lorsque votre script importe
paramsdepuisquantcraft.inputs— ou depuis les anciens cheminsquantcraft.inputs_module/ide.inputs_module). - Activez Optimize et choisissez Brute force ou Genetic.
Les exécutions d'optimisation utilisent les mêmes réglages Symbol & data et Simulation qu'un backtest normal. Vous configurez seulement la façon dont les paramètres varient.
Comportement du tableau de paramètres avec l'optimisation activée
Le tableau Parameter values gagne deux colonnes supplémentaires lorsque l'optimisation est activée :
| Colonne | Rôle |
|---|---|
| Parameter | Le nom issu de votre script (lecture seule). |
| Type | int, float, bool ou str. |
| Value | Pour les types numériques, c'est le début de la grille. Pour bool/str, c'est la valeur fixe. |
| Step | Numérique uniquement. Pas entre valeurs consécutives (positif ou négatif). |
| Max | Numérique uniquement. Borne supérieure des grilles croissantes, ou borne inférieure des grilles décroissantes. |
Comportement selon le type :
int/float— les valeurs sont générées sous la formestart, start+step, …jusqu'à Max inclus (arrondi pourint).bool— automatiquement étendu àtrueetfalse(deux valeurs).str— laissé fixe ; un paramètre de type chaîne ne varie pas.
Chaque ligne affiche un petit repère (true / false ou fixed) lorsque la valeur ne peut pas être étendue, ce qui permet de voir d'un coup d'œil quels paramètres varient réellement.
Force brute (grille de paramètres)
La force brute évalue chaque combinaison des valeurs que vous avez définies. Si vous listez 5 valeurs pour length et 4 pour threshold, cela fait 5 × 4 = 20 backtests.
Limites et validation
- Le nombre total de combinaisons est plafonné à 256 exécutions. Au-delà, la fenêtre bloque la soumission avec un message explicite vous demandant d'élargir les pas ou de retirer des paramètres de la grille.
- Chaque plage numérique nécessite les trois : Value (début), Step et Max. Step ne peut pas être 0.
- Si Max n'est pas atteignable depuis Value avec le signe de Step choisi, la fenêtre explique le problème (par ex. début ≤ max pour des pas positifs).
Ce que vous voyez pendant l'exécution
Lorsque vous soumettez une optimisation par force brute :
- Une bannière d'en-tête apparaît dans la vue Test results :
Optimization — <file> (current/total). - Le panneau de sortie journalise chaque exécution avec sa combinaison de paramètres, ainsi qu'une ligne d'en-tête :
Optimization (brute force): N backtest run(s). - La barre de progression du panneau de sortie affiche
Run X / N. - Un bouton Stop est disponible — les exécutions déjà terminées sont conservées et affichées dans les résultats.
Ce que vous voyez à la fin
Le volet Test Results affiche une vue Optimization :
- Un en-tête résumant le script et combien d'exécutions sont terminées.
- Une barre d'onglets de toutes les exécutions, chaque onglet étant étiqueté avec la combinaison de paramètres (par ex.
length=20, threshold=1.5). Lorsque les étiquettes sont longues, la combinaison complète est affichée au-dessus du graphique de l'exécution active. - La sélection d'un onglet affiche la vue de performance normale de cette exécution (graphique de capital, métriques, trades), ce qui permet d'explorer n'importe quelle combinaison.
- Si l'exécution a été arrêtée avant la fin de toutes les combinaisons, une bannière indique que les résultats sont partiels.
Recherche génétique
Le mode génétique est le bon choix lorsque la grille de force brute serait trop grande. Au lieu d'essayer chaque combinaison, il fait évoluer une petite population de candidats sur plusieurs générations, en conservant les meilleurs et en les recombinant.
Hyperparamètres
Passez l'onglet interne sur Genetic et vous verrez ces champs :
| Champ | Plage | Notes |
|---|---|---|
| Population size | 4 – 64 | Nombre de candidats évalués par génération. Les valeurs typiques sont 8–32. Doit être supérieur à Elitism. |
| Generations | 1 – 40 | Chaque génération exécute une population complète de backtests. |
| Elitism | ≥ 1, < population | Meilleurs candidats copiés sans modification dans la génération suivante. |
| Crossover rate | 0 – 1 | Probabilité que deux parents produisent un enfant mixte (sinon le premier parent est copié). |
| Mutation rate | 0 – 1 | Probabilité, par gène, de sauter aléatoirement vers une autre valeur discrète. |
| Fitness metric | liste déroulante | Ce que la recherche maximise (voir ci-dessous). |
| Random seed (optional) | texte | Utilisez la même graine pour reproduire exactement une recherche. |
Le nombre total de backtests exécutés est population × generations. Ce produit est plafonné à 400 évaluations — si vous le dépassez, la fenêtre vous demande de réduire l'une des deux valeurs.
Les allèles (les valeurs discrètes que chaque paramètre peut prendre) sont exactement les mêmes grilles que celles que construirait la force brute :
- Les paramètres numériques utilisent Value / Step / Max pour créer une liste discrète.
- Les paramètres bool deviennent
true/false. - Les paramètres chaîne sont fixes (et n'influencent pas la recherche).
La recherche génétique nécessite au moins un paramètre pouvant varier (plus d'un allèle). La fenêtre bloque la soumission et vous demande d'élargir une grille numérique ou d'inclure un
boolsi tous les paramètres sont fixes.
Métriques d'adéquation
La liste déroulante propose (plus c'est élevé, mieux c'est) :
- Sharpe ratio (par défaut)
- Sortino ratio
- Total return
- Total P/L ($)
- Profit factor
- Calmar ratio
La métrique est lue dans la performance du compte de chaque backtest — les exécutions en erreur reçoivent l'adéquation la plus basse possible et sont donc toujours classées en dernier.
Ce que vous voyez pendant l'exécution
- Bannière d'en-tête :
Genetic optimization — <file>avecGeneration g of N, individual i of P. - Le panneau de sortie journalise la recherche :
Genetic optimization: population P, N generation(s), fitness = …, puis── Gen g/N, indiv i/P: <combo> ──pour chaque backtest. - La barre de progression affiche
Gen g/N · i/P. - Un volet de résultats partiels apparaît dès que les premières exécutions se terminent — les candidats déjà évalués sont triés par adéquation et listés avec des préfixes
G<g>·…afin de voir qui est en tête sans attendre la fin de toute la recherche.
Ce que vous voyez à la fin
- Le volet Test Results affiche Genetic optimization — <file> avec la métrique d'adéquation utilisée et le nombre d'exécutions.
- La vue finale contient la dernière génération triée par adéquation, la meilleure en haut. Chaque onglet ouvre la vue de performance complète de cette exécution.
- Si vous appuyez sur Stop, les évaluations terminées de toutes les générations jusque-là sont affichées triées par adéquation, et une bannière indique que la recherche a été arrêtée prématurément.
Conseils pratiques
- Commencez petit. Une grille de force brute de 3 paramètres avec 10 valeurs chacun représente déjà 1000 exécutions — bien au-delà du plafond de 256. Réduisez les pas avant d'activer l'optimisation.
- Préférez Genetic pour les grands espaces. Au-delà d'environ 3 paramètres numériques, quelques générations de recherche génétique sont généralement plus rapides et plus utiles qu'une minuscule grille de force brute.
- Fixez une graine lorsque vous voulez qu'une exécution Genetic soit reproductible (par ex. comparer deux stratégies avec la même recherche).
- Utilisez Stop sans retenue. Les deux modes conservent les exécutions déjà terminées ; vous pouvez donc interrompre dès qu'un vainqueur net apparaît.
- Choisissez l'adéquation intentionnellement. Sharpe et Sortino récompensent la régularité, Total return / Total P/L poursuivent la croissance brute, Profit factor récompense l'équilibre gains/pertes, Calmar pénalise les drawdowns profonds.
- Inspectez chaque exécution. Les onglets de résultats contiennent chacun le graphique de capital standard, les métriques et l'historique des trades — vous pouvez exporter le rapport HTML de n'importe quelle exécution comme pour un backtest unique.

