Processus d'élaboration de la stratégie (E-mini S&P 500 Futures)

Construire une stratégie emini rentable pour ES / TF / EMD

par Mark Fric
Dans cet article, j'expliquerai le processus complet, étape par étape, d'élaboration d'une stratégie rentable et solide pour les contrats à terme ES (E-mini S&P 500 Futures), y compris plusieurs étapes de différents tests de robustesse.
Il s'agit d'une variante de mon ancien article sur Processus d'élaboration de la stratégie pour le forex.

Lorsque l'on utilise des techniques d'apprentissage automatique telles que la programmation génétique, il est relativement facile d'obtenir des stratégies avec une belle courbe d'équité. Le danger réside dans l'ajustement des courbes. la partie la plus importante du processus d'élaboration de la stratégie consiste à tester la robustesse de la stratégie afin de s'assurer qu'il n'est pas ajusté aux données historiques.
Dans cet article, j'explique comment j'utilise le double filtre OOS, les tests de robustesse et le test de la matrice Walk-Forward.

Voici le résultat

Pour motivation, je poste les résultats d'une stratégie performante pour ES / TF / EMD que j'ai trouvée en utilisant le processus décrit ci-dessous.

Stratégie 238433 pour ES/TF/EMD

La stratégie ci-dessus est publiée sur notre forum (réservé aux utilisateurs licenciés de StrategyQuant) ici :
https://strategyquant.com/forum/topic/1688-emini-strategy-for-es-tf-emd/
disponible en téléchargement.


Entrées

Les seules données que j'utilise sont mes attentes par rapport à la stratégie - je veux construire une stratégie pour l'ES (E-mini S&P 500) sur un horizon de temps de 15 minutes qui soit rentable et qui ait le moins de pertes possible. Je veux que la stratégie soit suffisamment robuste pour fonctionner également sur d'autres futures (TF, EMD) et je veux qu'elle passe le test de la matrice Walk-Forward pour m'assurer que la réoptimisation fonctionne sur cette stratégie.


Processus d'élaboration de la stratégie

  1. Obtention des données
  2. Générer un grand nombre de candidats potentiels
  3. Premier filtre - Vérification de l'absence d'échantillon (OOS)
  4. Deuxième filtre - nouveau test et deuxième contrôle OOS
  5. Troisième filtre - vérification du GBPUSD
  6. Quatrième filtre - Tests de robustesse
  7. Cinquième filtre - Test de la matrice Walk-Forward

1. Obtention des données

Il existe quelques différences entre les contrats à terme et le forex. Tout d'abord, il est un peu plus difficile et coûteux d'obtenir des données pour les contrats à terme. Il n'existe pas de sources de données gratuites et la plupart des courtiers ne fournissent pas d'historique de plus de quelques mois.
Vous pouvez obtenir les données auprès d'un courtier qui les propose (Tradestation, si vous êtes leur client) ou vous devez vous inscrire à un service de données en direct, tel que Kinetick ou iqFeed.
Il existe également des services spéciaux qui n'offrent pas de flux de données en direct, mais qui vendent des données historiques sur les contrats à terme. Pour les trouver, il suffit de rechercher "historical intraday furtures data" sur Google.

La deuxième différence est que les contrats à terme ont une date d'expiration, les contrats ne sont généralement négociés que pendant 3 à 4 mois, puis ils sont remplacés par une version plus récente du même contrat à terme.
Pour pouvoir utiliser les données futures dans le cadre de l'élaboration d'une stratégie, nous devons disposer d'au moins quelques années de données sous la forme de contrats continus. La plupart des services de données offrent cette option, il suffit donc de s'abonner au service de données et de télécharger les données sur votre plateforme de négociation.

Exporter les données de NinjaTrader
Lorsque vous avez déjà des données dans votre NinjaTrader, vous devez les copier également dans StrategyQuant, afin qu'il puisse texturer les stratégies générées. Pour ce faire, nous devons exporter les données de NinjaTrader et les importer dans StrategyQuant. Pour exporter les données, nous devons ouvrir le graphique de l'ES 15 Min. Assurez-vous de définir la session de négociation correcte. J'utilise le CME US Index Futures RTH dans cet exemple.
Lorsque le graphique est ouvert, il suffit de trouver SQDataExport et le placer sur le graphique. Il exportera les données du graphique actuellement ouvert dans un fichier texte.

Répétez le même processus pour TF (Mini Russel 2000 Futures) et EMD (E-mini S & P Midcap 400) également sur l'échelle de temps de 15 minutes avec la session de négociation correcte.
Nous utiliserons ces données ultérieurement pour tester nos stratégies sur d'autres symboles en guise de test de robustesse.

Ensuite, ouvrez StrategyQuant et créez de nouveaux symboles pour ES, TF et EMD et importez les fichiers de données respectifs. L'importation de données depuis NinjaTrader est décrite plus en détail dans la section Guide de l'utilisateur.


2. Générer un grand nombre de candidats potentiels

Dans la première étape de la génération, je dois simplement générer un grand nombre de stratégies potentiellement "bonnes" dont je testerai la robustesse ultérieurement. Je souhaite que toutes mes stratégies initiales soient rentables et robustes (dans une certaine mesure), c'est pourquoi j'utilise également plusieurs filtres dans cette première phase.

Mes paramètres pour cette étape
Vous pouvez télécharger les paramètres que j'utilise dans cette étape en utilisant le lien ci-dessous. Cliquez sur le lien avec le bouton droit de la souris et choisissez Enregistrer le lien sous...
Ensuite, dans StrategyQuant, utilisez Load settings pour charger ce fichier de paramètres dans le programme.

build_emini_strategy.xml

Notez que si vous avez nommé vos symboles différemment dans StrategyQuant, vous devrez définir les données manuellement.

Explication des paramètres
Tout d'abord, je génère toutes mes stratégies sur plusieurs symboles. Mon objectif est de trouver une bonne stratégie pour ES, mais je veux que ma stratégie soit robuste - donc je veux qu'elle soit rentable aussi sur EMD. J'ajoute EMD aux données supplémentaires, de sorte que la stratégie sera testée sur les deux symboles.

Image 1 : Définition des données

J'utiliserai les données du 2.1.2003 au 31.12.2012, soit 10 ans. Le reste des données sera utilisé ultérieurement pour d'autres tests OOS.

J'utiliserai le mode Evolution Génétique. L'idée est de créer une population de 200 stratégies, de les faire évoluer pendant 30 générations et de repartir de zéro. De cette façon, j'éviterai de me retrouver dans une impasse au cours de l'évolution et les meilleures stratégies seront continuellement stockées dans la banque de données.
Vous pouvez également constater que la seule condition pour la population initiale est qu'elle doit effectuer au moins 100 transactions. Il n'est pas nécessaire qu'elle soit rentable - l'évolution génétique devrait pouvoir l'améliorer.

Image 2 : Options génétiques

Nous pourrions également utiliser la génération aléatoire sans évolution, mais l'évolution devrait permettre de trouver les stratégies rentables plus rapidement.

Le dernier paramètre important est celui des options de classement. J'ai réglé la banque de données pour stocker les 2000 meilleures stratégies, car je veux avoir une bonne base pour la suite du processus de sélection. J'ai également défini le critère de sélection sur le ratio Return / Drawdown - c'est mon préféré. Vous pouvez utiliser d'autres critères de sélection, vous obtiendrez peut-être de meilleurs résultats.


Image 3 : Options de classement

L'une des choses les plus importantes est de définir les critères de filtrage initiaux pour les stratégies dans la banque de données. Je veux considérer seulement les stratégies qui ont au moins $2000 de profit, qui ont un ratio Rendement/DD > 3, qui ont au moins 300 trades ET qui ont un ratio Rendement/DD d'un portefeuille d'au moins 2.5.

Comme je teste les stratégies sur deux symboles - ES et EMD, les résultats du portefeuille pour les stratégies seront également calculés. En utilisant cette condition, je spécifie simplement que la performance du portefeuille ne doit pas être beaucoup plus mauvaise que la performance sur ES uniquement, et le programme rejettera toutes les stratégies dont la performance du portefeuille est mauvaise.

Il ne nous reste plus qu'à appuyer sur la touche Démarrage et laisser le programme faire le travail.
N'oubliez pas que nous voulons générer au moins 2000 "bonnes" stratégies avant de poursuivre le processus de filtrage.

En fonction des paramètres et de la vitesse de votre ordinateur, cela peut prendre plusieurs heures, voire plusieurs jours. Si le programme ne produit aucune stratégie pendant une très longue période, peut-être devrions-nous passer à une période plus longue - 30 minutes, 1 heure, ou rendre les contraintes moins restrictives.


3. Premier filtre - Contrôle de l'absence d'échantillon (OOS)

Lorsque la banque de données contiendra 2000 stratégies potentiellement bonnes, j'arrêterai la génération et commencerai le processus de filtrage.
Je vais appliquer le premier filtre - en supprimant tous les systèmes qui ont une mauvaise performance hors échantillon. Je peux le faire rapidement, simplement en triant les stratégies dans la banque de données et en supprimant celles dont le profit OOS est inférieur à $3000.


Image 4 Banque de données avec un ensemble de stratégies triées par profit net OOS

Cette première étape élimine généralement une grande partie des stratégies, de sorte que les 2000 candidats initiaux sont ramenés à environ 1700.


2. Deuxième filtre - nouveau test et deuxième contrôle OOS

Dans cette étape, je vais tester à nouveau toutes les stratégies. sur la période inconnue hors échantillon et j'ajouterai un test sur les données de la TF.

Retester les stratégies est simple - il suffit de sélectionner toutes les stratégies dans la banque de données et de cliquer sur le bouton Retester. Ceci déplacera toutes les stratégies dans un onglet Retest. Je confirme également le dialogue demandant s'il faut utiliser les paramètres de construction pour le Retest.

Je prolongerai ensuite la période de données jusqu'à la fin des données disponibles. Les stratégies ont été générées sur des données allant du 2.1.2003 au 31.12.2012, je vais maintenant retester les stratégies sur des données allant jusqu'au 31.12.2013 (une année supplémentaire non utilisée lors de la génération) et définir la période hors échantillon du 31.12.2012 au 31.12.2012.
Notez que les stratégies seront testées à nouveau sur l'ensemble des données et que la partie OOS montrera les performances de la stratégie au cours de la dernière année des données précédemment inutilisées.


Image 5 : Paramètres pour le nouveau test

Comme j'ai aussi des données historiques pour TF, je vais les ajouter aux données supplémentaires pour comparer les performances des trois éminis.

Le test peut prendre un certain temps et une fois qu'il est terminé, je supprime à nouveau tous les systèmes qui ont une mauvaise performance hors échantillon. Je peux à nouveau trier les stratégies dans la banque de données par profit net (OOS) et supprimer celles dont le profit OOS est inférieur à $1500.


3. Troisième filtre - EMD, contrôle TF

Le troisième filtre est visuel - je vais vérifier la performance des stratégies sur les symboles EMD et TF. Je vais aller dans Résultats -> Graphique des actions, changer le graphique en Portefeuille et passer en revue les stratégies une par une en regardant les courbes des actions pour EMD et TF.


Image 6 : Exemple de bonnes et mauvaises performances de l'EMD / TF

Que recherchons-nous ? Parce que ces eminis sont fortement corrélés, je veux que la stratégie soit rentable sur les trois symboles, comme dans le premier exemple. Nous pouvons voir sur le deuxième exemple que la performance sur TF est très faible comparée à ES et EMD, sa courbe d'équité n'est pas en grodwing, donc je vais écarter ces stratégies.

Il peut également y avoir un autre extrême - la performance sur TF et/ou EMD est bien meilleure que la performance sur ES. C'est normal, il arrive souvent que les stratégies soient plus performantes sur TF que sur ES.

Nous ne devrions pas nous contenter d'examiner la performance finale, mais également les courbes des actions. Nous devrions écarter toutes les courbes d'actions qui présentent de longues périodes de stagnation ou de fortes baisses.

De cette manière, le filtre est très précis et il ne devrait pas rester plus de 10 à 20 stratégies de premier plan pour l'étape suivante.


4. Quatrième filtre - Tests de robustesse

Après avoir supprimé toutes les stratégies ayant une mauvaise performance EMD / TF, il reste moins de 20 stratégies qui ont une bonne performance IS et OOS, ainsi qu'une performance satisfaisante sur EMD / TF. Je vais maintenant tester à nouveau les stratégies avec les tests de robustesse et le Money Management pour voir comment chacune des stratégies gère de petits changements dans les données d'entrée et pour pouvoir comparer les stratégies entre elles.

Je vais changer le money management de taille fixe à montant fixe, laissant chaque stratégie risquer $500 par trade. Cela permet de mieux comparer les stratégies, car elles risquent le même montant par opération.


Image 7 : Régler la gestion de l'argent sur un montant fixe

Dans les tests de robustesse, j'utilise au moins 20 simulations et je teste la stratégie pour tous les types de situations de stress. Après avoir configuré le test de robustesse, je teste à nouveau les stratégies.
Cette fois-ci, ce sera rapide car il ne reste que quelques stratégies dans la banque de données.


Image 8 : Tests de robustesse

Comment évaluer les tests de robustesse
Les tests de robustesse nous montrent comment la stratégie peut se comporter dans la réalité, lorsqu'il y a des transactions manquées, des données historiques différentes, etc. Je recherche des stratégies qui ont des valeurs acceptables pour le profit net et le drawdown dans un niveau de confiance de 95%.


Image 9 : Résultats des tests de robustesse

Dans l'exemple ci-dessus, nous pouvons voir les résultats de robustesse pour deux stratégies. La stratégie de gauche présente un bénéfice acceptable, mais la baisse a plus que doublé par rapport au résultat initial.
La stratégie de droite a également un profit acceptable et le drawdown est resté pratiquement inchangé.

Au cours de cette étape, je ne choisirai que 1 à 3 stratégies finales qui seront soumises au test de robustesse suivant.
Ces stratégies finales sont sélectionnées en fonction des meilleurs résultats obtenus lors des tests de robustesse, de la rentabilité globale et de la simplicité - je souhaite que les règles de la stratégie soient aussi simples que possible et que les règles de négociation aient un sens.


5. Cinquième filtre - Test de la matrice Walk-Forward

Il nous reste quelques stratégies et nous pouvons effectuer le test ultime de robustesse - le test de la matrice Walk-Forward. La matrice WF est simplement une matrice d'optimisations en marche avant avec différents nombres d'exécutions et de périodes d'exécution.

Si la stratégie réussit le test de la matrice Walk-Forward, cela signifie qu'avec l'aide de la réoptimisation des paramètres, la stratégie est adaptable à un large éventail de conditions de marché ET aussi que la stratégie n'est pas adaptée à des données particulières - puisque, grâce à la réoptimisation, elle fonctionne sur de nombreuses périodes différentes.

En outre, le test WF Matrix nous indique également si la stratégie doit être réoptimisée en permanence et quelle est la période de réoptimisation la plus optimale.

Le test de la matrice Walk-Forward doit être effectué pour chaque stratégie séparément. Je charge ma stratégie dans l'Optimizer et je sélectionne l'option Walk-Forward Matrix. Je sélectionne également les étapes pour les exécutions et les pourcentages OOS. StrategyQuant passera en revue toutes ces combinaisons, en effectuant l'optimisation Walk-Forward de la stratégie.


Image 10 : Mise en place de la matrice Walk-Forward

Paramètres d'optimisation
Pour que l'optimisation ait un sens, vous devez définir les paramètres de la stratégie qui sera optimisée. Chaque stratégie utilise une logique différente et possède des paramètres différents, vous devez donc configurer l'optimisation différemment.


Image 11 : Optimisation des paramètres

Cette stratégie étant relativement simple, je n'optimiserai que la valeur du Stop Loss et le coefficient de suivi du Stop.
Il n'est pas nécessaire d'optimiser tous les paramètres, mais seulement ceux qui ont le plus d'impact sur les performances de la stratégie.

Évaluation de la matrice Walk-Forward
Une fois l'optimisation terminée, je cliquerai sur le résultat de la matrice Walk-Forward dans Databank pour voir les détails.

Je veux que l'optimiseur me donne une réponse claire si la stratégie a réussi le test d'optimisation Walk-Forward, je dois donc définir des critères de score.
Il s'agit de critères simples qui doivent être remplis pour que la stratégie passe le test.


Image 13 : Résultats de la matrice Walk-Forward

Le résultat final est que la stratégie a passé avec succès le test de robustesse de la matrice Walk Forward. Le diagramme de score 3D montre que 19 des 24 combinaisons ont satisfait à nos critères (paramètres par défaut utilisés).
La stratégie n'a pas besoin de réussir pour chaque combinaison, je cherche une zone 2×2 ou 3×3 où la plupart des combinaisons ont réussi - ce sera le groupe des meilleures combinaisons de réoptimisation. Dans ce cas, je peux voir que 10 runs avec 30% Out of Sample est l'une des meilleures combinaisons, parce qu'elle est entourée d'autres combinaisons qui ont également réussi.

Lorsque je vérifie le graphique d'optimisation Walk-Forward, je constate que la stratégie reste rentable même pendant la réoptimisation. La diminution de la rentabilité est conforme aux tests que nous avons obtenus à partir de l'analyse de robustesse de Monte Carlo, mais la stratégie reste rentable.


Image 14 : Tableau d'optimisation "Walk-Forward


Résumé

J'ai décrit mon processus complet de travail avec StrategyQuant, qui a conduit à quelques nouvelles stratégies intéressantes.

Ces stratégies ne sont que des exemples et il m'a fallu moins de 2 jours de fonctionnement du SQ et environ 1 à 2 heures de mon temps pour les trouver à l'aide de StrategyQuant.
Vous pouvez l'essayer vous-même, vous en inspirer et éventuellement améliorer le processus avec vos propres idées que vous pouvez partager sur notre site web. forum.

Améliorations possibles du processus - vous pouvez essayer de rechercher des stratégies séparément pour la direction longue et courte. Chaque direction a sa propre dynamique, et des stratégies différentes pour le long et le court pourraient donner de meilleurs résultats.
Je n'ai pas mentionné Perfectionnement - c'est un outil puissant qui vous permet de rechercher de meilleures variantes de votre stratégie existante, si vous n'êtes toujours pas satisfait de sa performance.

Gardez à l'esprit que le but n'est pas de trouver une stratégie qui soit parfaite sur la base de données historiques. C'est la recette d'un désastre, car une stratégie trop optimisée est vouée à l'échec dans le trading réel.
Notre objectif devrait être de trouver une stratégie qui soit robuste sur différentes données et/ou symboles, car cela signifie qu'elle a un réel avantage sur le marché.

S'abonner
Notification pour
0 Commentaires
Commentaires en ligne
Afficher tous les commentaires

Poursuivre la lecture