Technique de test (optimisation) et quelques critères de sélection des paramètres de l'Expert Advisor

Rider | 13 janvier, 2022


Introduction

Ce n'est apparemment pas un grand secret que la sélection de paramètres adéquats n'est pas un tout petit peu moins importante que la sélection de tactiques de trading et la création d'un Expert Advisor. La preuve en est dans les discussions en cours sur de nombreux forums d'une manière ou d'une autre liés au trading automatisé. Et bien que l'automatisation des opérations de trading semble être assez claire et transparente, je n'ai rencontré aucun algorithme automatisé quelque peu utilisable pour le traitement des résultats d'optimisation compilés dans une chaîne logiquement complète.

Et force est de constater que le processus est très dur et chronophage. Cela mérite d’automatiser au maximum toutes les transactions et les réduire à un seul algorithme. Cette approche et cette méthode seront décrites ci-dessous dans cet article.


Concept

Tâche. Analyse et sélection des paramètres Expert Advisor reçus lors de l'optimisation qui sont sciemment non efficaces pour un vrai trade. Utilisation maximale des capacités de performance du terminal et automatisation des opérations manuelles.

L'ensemble du processus se compose de plusieurs étapes. Une telle division n'a pas tant à voir avec la complexité de mise en œuvre d'un algorithme automatique continu, qu'avec l'impossibilité de définir précocement, au stade de l'optimisation, les exigences nécessaires (tolérances et filtres) aux paramètres du système. Et d'une manière générale, il n'y a pas besoin de cela.

A mon sens, faire prendre des décisions stratégiques à une machine n'est pas «la meilleure idée». Et la sélection de paramètres (groupes de paramètres) est une stratégie. Calculer, échanger, se simplifier la vie, telles sont ses fonctions mais c'est le trader qui décide des règles de fonctionnement que doit suivre le matériel.

Chaque étape et transitions entre les étapes ont été automatisées au maximum, dans la mesure du possible.


Étape 1. Optimisation. Variante standard avec paramètres utilisateur en option.

Encore une fois, ce n'est pas un secret, mais il ne peut pas être laissé de côté.
La génétique est certainement une chose utile mais dans des limites raisonnables. La vérité est que son algorithme peut vous jouer un tour- lorsqu'un ensemble de paramètres qu'il considère comme rentables a été trouvé, tout le processus d'optimisation se déroulera à partir de là jusqu'à la fin «autour de lui». Je crois que vous comprenez à quoi cela peut conduire. La plupart des très bonnes variantes qui fonctionneraient autrement au-delà de la zone d'optimisation seront laissées de côté et ne seront pas enregistrées dans le tableau « Résultats d'optimisation ».

Il y a plusieurs façons de sortir de la situation. Un drastique est de ne pas utiliser l'algorithme génétique pour l'optimisation. Ceci n'est cependant pas toujours adapté, pour une raison ou une autre. Les deux suivantes sont des demi-mesures, mais mieux que rien :

- exécuter l'optimisation non pas une seule fois mais deux fois voire plus. La première fois, disons, par «Équilibre» et la prochaine fois par «Prélèvement Maximal» ou par d'autres paramètres. La fenêtre «Paramètre optimisé» de l'onglet «Test» des propriétés de l'Expert Advisor permet une telle sélection. Ensuite, combinez les tableaux de résultats reçus et travaillez avec un tableau combiné.

- pour réduire au maximum le nombre de combinaisons de paramètres.

Il y a encore une autre nuance à prendre en considération lors de la mise en œuvre de l'optimisation. Quelqu'un peut le trouver utile.

On peut définir différentes limites dans l'onglet «Optimisation» des propriétés de l'Expert Advisor et je voudrais dire quelques mots sur l'une d'entre elles - «Prélèvement Maximal». Lorsque vous utilisez ce paramètre, gardez à l'esprit qu'il s'agit d'une réduction du solde actuel en pourcentage. Ce qui doit être pris en compte ici. Si, par exemple, nous fixons une limite de 10 % et prenons un solde initial de 10 000, alors au cours du processus d'optimisation, lorsque le solde atteint au moins 15 000, le premier 1000 deviendra 1500 - clairement, ce sont des chiffres différents. Et le dépôt initial (qui peut garantir qu'un tel tirage ne se produira pas au tout début de la transaction ?) réagira différemment à ces derniers. Si l'on fixe un dépôt initial de 1000000 et une limite de 0,1%, ce millier restera environ un millier.


Étape 2. Travailler avec le «Résultats d'optimisation». Tous les résultats sont copiés dans Excel et y sont traités. Il y aura plusieurs ensembles et ils devraient être réduits. Le «découpage» peut être effectué sur n'importe quelle colonne du rapport - c'est au trader de décider.


Étape 3. Test. Nous sélectionnons une partie de l'historique à tester et effectuons un test de groupe automatique des ensembles qui ont « réussi » la sélection de l'étape précédente. Je précise : un test de groupe. À ce stade, il n'est pas nécessaire de considérer chaque test séparément, le but est d'obtenir les résultats des tests de tous les ensembles restants à la fois. Le Terminal implémentera en fait la même optimisation mais il utilisera les paramètres d'un fichier pré-créé.

Semblable à l'étape 2, tous les résultats reçus sont copiés dans le même tableau Excel contenant les résultats d'optimisation.


Étape 4. Analyse et sélections.

De toute évidence, les tests négatifs sont impitoyablement rejetés (lignes supprimées). La question est de savoir comment évaluer les autres ?

Beaucoup d'entre vous ont dû remarquer que la perception visuelle du tableau d'équilibre donne une idée égale et parfois même meilleure des caractéristiques du système plutôt que des chiffres du rapport. En règle générale, si la courbe semble « bonne », les chiffres du rapport sont également « bons », s'il manque toutefois une tendance à la croissance continue, alors aucun chiffre ne peut être suffisamment convaincant pour dire que c'est « bon ».

Le problème est qu'il reste pas mal de variantes et qu'il est très difficile de les tester séparément afin d'analyser le rapport et de jeter un œil au graphique de chacune d'entre elles... Si quelqu'un devient têtu, alors...

Afin d'éviter ce problème et de réduire encore le nombre d'ensembles, j'ai constitué un critère de «ratio» applicable aux surfaces comparées. Trois valeurs sont comparées : Bénéfice par jour, nombre de transactions par jour et prélèvement maximal, respectivement, dans les domaines de l'optimisation et des tests. S'ils sont à peu près, dans une certaine limite tolérable, cohérents les uns avec les autres, l'ensemble reste en travail, s'ils ne le sont pas - il est exclu de toute analyse ultérieure. Par ailleurs, dans certaines conditions, plus précisément - si les zones de test ne sont pas très longues, les trois valeurs ci-dessus peuvent, dans une certaine mesure, donner une idée d'une courbe d'équilibre « lisse ».

Les étapes 3 et 4 peuvent et doivent être répétées plusieurs fois dans différentes parties de l'historique, d'une part, afin de vérifier la fiabilité des résultats sélectionnés et d'autre part, pour les réduire au maximum en nombre. Les 3 à 5 variantes restantes seront tout à fait suffisantes pour un choix final éclairé.

L'achèvement des étapes 3 et 4 comprend la génération de fichiers d'ensembles à partir des ensembles restants, la mise en œuvre de tests individuels dans n'importe quelle partie de l'historique, la comparaison entre eux, la sélection, etc.

Fondamentalement, il s'agit d'une question de qualification, de goûts et de préférences de chaque trader et dépasse le cadre de cet article.


Technique

Il n'y a rien de difficile et époustouflant ici, vous n'avez besoin que d'attention et de précision. Commençons.

1. Configuration de l'ordinateur - Panneau de configuration/Options régionales et linguistiques/Options régionales/Russe - Personnaliser/Nombres/Symbole décimal - au lieu d'une «virgule», vous devez sélectionner un «point» - ceci est fait pour une réflexion précise des données lors de la copie du ( tester) les résultats d'optimisation du Terminal dans un tableau Excel ;

- Vous devriez avoir Microsoft Office (Excel requis) installé sur votre ordinateur - version 2000 et plus.

- Les macros doivent être activées dans les paramètres de sécurité d'Excel et le module Analise.bas (joint à l'article) doit être importé. L'examen du module et de sa structure n'est pas fourni dans cet article car les utilisateurs ordinaires n'ont pas besoin de modifier ou d'éditer quoi que ce soit dedans, et les utilisateurs «non ordinaires», s'ils le souhaitent, le découvriront eux-mêmes.

2. Préparation de l’Expert Advisor

Un exemple de l'Expert Advisor préparé est disponible dans la pièce jointe.

Au tout début du code, ce qui suit doit être inséré avant les paramètres externes :

// Test and optimization parameters
extern int          VarOptimTest    = 0;       // 0 - standard optimization (normal operation of the Expert Advisor)
                                                                     // 1 - test run of the selected sets         
                                                                     // 2 - generation of set-files
extern int          Counter              = 1;       // counter    
extern string       nameEA          = "MA";  // Expert Advisor name

Ces variables contrôleront les modes d'optimisation et de test.

La fonctioninit() doit ressembler à ceci :

int init() 
{
   // BLOCK OF THE OPTImizaTION AND TESTING FUNCTION CALL
   if(IsOptimization() && VarOptimTest !=0)
      {
      if (VarOptimTest == 1 && Counter !=0) _ReadParametrs();
      if (VarOptimTest == 2 && Counter !=0)
         {_ReadParametrs(); _WriteSet();}
      }   
...........
...........
return (0);
} 

Deux fonctions seront appelées à partir d'ici assurant l'automatisation de l'ensemble du processus.

La ligne suivante est ajoutée à la fonction start()  :

int start() 
{
   if(IsOptimization() && VarOptimTest ==2) return(0);
..........

1. Fonction de lecture de paramètres pour lire un fichier Excel créé après l'analyse des résultats d'optimisation (de test).

La partie variable de la fonction est en gras. Il est nécessaire de répertorier avec précision et soin, en suivant la même structure et la même syntaxe, tous les paramètres d'entrée de l'Expert Advisor, à l'exception des trois premiers qui sont responsables de l'optimisation et des tests ainsi que des variables de type boolet chaîne, le cas échéant.

void  _ReadParametrs()
{
   string FileName="test.csv";
   int handle=FileOpen(FileName,FILE_READ||FILE_CSV);//,''); 
   if(handle<1) return(0);
   FileSeek(handle,0,SEEK_SET);
   int str = StrToInteger(FileReadString(handle)); 
   int data = StrToInteger(FileReadString(handle)); 
   if (data < Counter) 
      {
      Alert("Incorrect number of test runs entered. Sorry");
      return(0);
      }
   for (int y=1; y <=Counter; y++)
      {
      for (int x=1; x <= str; x++)
         {
         string s = FileReadString(handle); 
         string ds = FileReadString(handle); 
         if (y != Counter) continue;
         s=StringTrimLeft(s);s=StringTrimRight(s);
         ds = StringTrimLeft(ds);ds=StringTrimRight(ds);
         double d = StrToDouble(ds);

         if (s == "Lots"){Lots=d;continue;}
         if (s == "MaximumRisk"){MaximumRisk=d;continue;}
         if (s == "DecreaseFactor"){DecreaseFactor=d;continue;}
         if (s == "MovingPeriod"){MovingPeriod=d;continue;}
         if (s == "MovingShift"){MovingShift=d;continue;}
         
         }
      }
   FileClose(handle);
  return(0);
}

2. Fonction de génération et d'écriture de fichiers d'ensemble. Sa structure doit refléter la structure du fichier de l’ensemble 'Expert Advisor. La partie variable de la fonction est en gras.

void  _WriteSet ()
{
   string FileName=nameEA+"_"+Symbol()+Period()+"_"+Counter+".set";
   int handle=FileOpen(FileName,FILE_WRITE|FILE_CSV);
   if(handle<1) return(0);

   FileWrite(handle,"VarOptimTest="+0);
   FileWrite(handle,"VarOptimTest,F="+0);
   FileWrite(handle,"VarOptimTest,1="+0);
   FileWrite(handle,"VarOptimTest,2="+0);
   FileWrite(handle,"VarOptimTest,3="+0);
   
   FileWrite(handle,"Counter="+0);
   FileWrite(handle,"Counter,F="+0);
   FileWrite(handle,"Counter,1="+1);
   FileWrite(handle,"Counter,2="+1);
   FileWrite(handle,"Counter,3="+100);

   FileWrite(handle,"nameEA="+nameEA+"_"+Symbol()+Period()+"_"+Counter);

   FileWrite(handle,"Lots="+Lots);
   FileWrite(handle,"Lots,F="+0);
   FileWrite(handle,"Lots,1="+0.00000000);
   FileWrite(handle,"Lots,2="+0.00000000);
   FileWrite(handle,"Lots,3="+0.00000000);
   
   .................................
   
   FileWrite(handle,"MovingShift="+MovingShift);
   FileWrite(handle,"MovingShift,F="+1);
   FileWrite(handle,"MovingShift,1="+2);
   FileWrite(handle,"MovingShift,2="+1);
   FileWrite(handle,"MovingShift,3="+4);
   
   FileClose(handle);
return(0);
}

3. En cours

ATTENTION ! Je vous recommande fortement de dupliquer toute la feuille de calcul ou le classeur avant d'effectuer toute opération. L'exécution de macros dans Excel est une opération irréversible et en cas d'erreur, les résultats d'optimisation peuvent être perdus, ce qui signifie une perte de temps. Il n'y aura aucun mal à sauvegarder les résultats intermédiaires de temps à autre.

3.1. Optimisation

Il y a suffisamment d'informations consacrées aux particularités de l'optimisation, voyons maintenant comment cela peut être fait. Les paramètres d'optimisation et de test dans les propriétés de l'Expert Advisor doivent être définis comme indiqué dans la capture d'écran :


Fig.1 Propriétés de l'Expert Advisor, onglet «Paramètres d'entrée». Paramètres d'optimisation et de test


3.2. Analyse des résultats d'optimisation et sélection initiale des paramètres

Une fois l'optimisation terminée, les résultats doivent être copiés dans le presse-papiers :


Fig.2 Copie des résultats d'optimisation

démarrez Excel et collez les données copiées dans une nouvelle feuille de calcul.

Après la copie, vous devez exécuter la macro Optim_1. Si tout a été fait correctement, la feuille de calcul ressemblera à ceci :


Fig.3 Exécution de la macro Excel

Lors de l'exécution de la macro, vous devrez entrer le nombre de jours de la période d'optimisation dans la boîte de dialogue. Ceci est nécessaire pour le calcul des critères supplémentaires.


Fig.4 Boîte de dialogue pour la saisie du nombre de jours

Comme vous pouvez le voir, il n'y a pas de noms de colonnes dans la table résultante. Ceci est fait pour une raison. Premièrement, cela permet d'éviter plus facilement les erreurs lors de la saisie du nombre de paramètres (requis ultérieurement), deuxièmement, ils ne sont pas spécialement nécessaires. Tout est familier ici, à l'exception de deux colonnes - bleue et verte. De gauche à droite Nombre de passes, Bénéfice, Bénéfice par jour, Total des transactions, Transactions par jour, Facteur de profit, Bénéfice attendu, Prélèvement en $, Prélèvement en %.

Lorsque le tableau ne contient que les paramètres sélectionnés pour un travail ultérieur (c'est-à-dire que les lignes indésirables ont été supprimées), nous passons à l'étape suivante.

Afin de faciliter le tri, il existe tout un groupe de macros dans le module permettant le tri par colonnes individuelles. Attribuez des raccourcis clavier et ....


3.3. Enregistrement des paramètres dans un fichier

Vous devez exécuter la macro «Ecrire» et entrer le chemin où le fichier de paramètres sera enregistré (.... terminal\tester\files\) dans la boîte de dialogue contextuelle

Fig.5 Boîte de dialogue pour l'enregistrement du fichier de paramètres

La fenêtre «Nom de fichier» aura un nom prédéfini «test», merci de ne pas le modifier sauf si cela est absolument nécessaire mais si vous le faites, vous devrez faire de même dans les fonctions qui ont été ajoutées à votre Expert Advisor.

À la fin de cette opération, le fichier «test.csv» apparaîtra (ou sera écrasé s'il existait auparavant) dans le répertoire spécifié.

Attention, c'est important. Après la création du fichier, ne modifiez pas les positions des lignes dans le tableau, sinon les résultats du test ne seront plus liés aux paramètres utilisés dans le test.


3.4. Tester

Paramètres de l'Expert Advisor :




Fig.6-8 Paramètres de l'Expert Advisor pour la mise en œuvre du test de groupe

Les explications, je suppose, si elles sont nécessaires, sont mineures : Aucune limite définie, Algorithme génétique désactivé, Variable de compteur définie de 1 à N, où N est le nombre de lignes restantes dans la table, Optimisation activée par ce paramètre uniquement.

Et un autre réglage :


Fig.9 Paramètres de l'onglet « Résultats d'optimisation »

Maintenant, si la période de test et d'autres paramètres d'optimisation essentiels sont définis, vous pouvez cliquer sur le bouton «Démarrer» et exécuter le testeur de stratégie en mode «Optimisation».

Une fois les tests terminés, ce qui peut prendre un certain temps, en particulier lors de la première exécution, lorsque la table est encore grande, nous pouvons passer à l'étape suivante.


3.5. Travailler avec les résultats des tests

Tout d'abord, le tableau Excel doit être préparé pour la nouvelle entrée de données et à cette fin, nous exécutons la macro «Optim_2» à la suite de laquelle 7 colonnes vides apparaîtront sur le côté gauche du tableau. Les résultats reçus doivent être triés par numéro de passe dans l'ordre croissant :


Fig. 10 Tri des résultats des tests

Les résultats doivent ensuite être copiés (comme à l'étape 2) et collés dans une nouvelle feuille de calcul Excel, suivis de la copie des 7 premières colonnes et du collage de celles-ci dans la zone précédemment préparée dans la feuille de calcul avec notre tableau.

Exécutez maintenant une séquence de macros «Optim_3» et «Optim_4». Si tout a été fait correctement, le tableau aura la structure suivante :


Fig.11 Structure du tableau après enregistrement et traitement des résultats d'optimisation et de test

Nous avons déjà discuté des colonnes L-T, les colonnes D-Ksont similaires aux colonnes М-T mais leurs données se réfèrent à la zone de test.
Mais avant de passer aux trois premières colonnes, il faudrait apparemment expliquer pourquoi des critères tels que « Profit par jour » et « Offres par jour» ont été introduits.

Les périodes d'optimisation et de test peuvent être de durée différente. Dans ce cas, une question raisonnable se pose : comment devons-nous comparer les résultats ? Ces deux paramètres sont conçus pour résoudre au moins en partie ce problème et faciliter le processus de comparaison des résultats.

Colonnes А = N/E (ratio de bénéfices par jour), B = P/G (ratio de transactions par jour),С =S/J (ratio de tirage).

Comme on peut le voir, les valeurs de ces colonnes sont actuellement représentées par 1 - variante idéale n'existant que lorsque la zone de test dans l'historique coïncide avec la zone d'optimisation. Il ne s'agit pas d'un oubli mais d'une action délibérée pour démontrer l'un des moyens de vérifier si l'Expert Advisor a été correctement préparé. De même, on peut vérifier l'exactitude de la création des ensembles-fichiers.

Ainsi, tout est prêt pour l'analyse. Toutes les informations sont disponibles. Tout est entre les mains du trader, c'est lui qui connaît toutes les caractéristiques secrètes de son Expert Advisor et peut fixer les limites tolérables nécessaires à la plage de résultats afin de filtrer les paramètres.

Passer à autre chose. Le tableau a encore été réduit mais cela reste insuffisant. Rien ne nous empêche de faire un autre test.
Supprimez les colonnes A-Ket revenez à l'étape 3.

Suite à la mise en œuvre de 3-4 tests, nous aurons le tableau composé de 3-5-8 lignes. Cela suffit pour aller plus loin.


3.6. Génération des Set-Files.

Quelqu'un pourrait dire qu'il n'est pas nécessaire et que les ensembles de paramètres 5 à 8 peuvent être traités manuellement. Cela ne me dérange pas - faites-le si vous le souhaitez. Mais je préfère que la machine fasse le travail de routine à ma place. Tout ce dont nous avons besoin est d'exécuter la macro « Ecrire » et d'exécuter une dernière fois le Strategy Tester en mode « Optimization » avec les paramètres Expert Advisor suivants :


Fig.12 Paramètres de l'Expert Advisor pour la génération des Set-Files

Les réglages sont presque identiques à ceux utilisés dans le mode test, la seule différence étant la valeur d'une variable et la valeur finale du compteur.

À la fin du processus d'optimisation, les fichiers d'ensemble de l'Expert Advisor seront générés dans le répertoire tester\files.. Le dernier chiffre du nom est le numéro de la ligne de notre tableau.


Fig.13 Fichiers Set générés

Ils peuvent être traités comme des fichiers d'ensembles Expert Advisor standard.

En fait, le sujet de l'article est maintenant épuisé.


Conclusion

Les informations exposées ci-dessus ne prétendent pas être une découverte dans le domaine classiquement appelé «Théorie de l'Optimisation».... C'est un guide purement pratique, ni plus ni moins... C'est probablement clair mais je trouve quand même nécessaire de le mentionner.
Tout ce qui est décrit ici n'est qu'un outil conçu pour faciliter au maximum le travail du trader. Personne ne donnerait jamais une garantie à 100% que la courbe d'équilibre à l'extérieur du bord droit du graphique sera aussi «bonne» que dans la partie visible du graphique.

Et encore une chose. Ne laissez pas l'abondance de mots et d'images vous effrayer. En fait, tout est assez simple et après avoir effectué une telle optimisation plusieurs fois, vous apprendrez à le faire automatiquement.

J'ai l'impression que quelqu'un peut avoir une idée sur la façon de rendre les fenêtres d'optimisation et de test plus efficaces... et si :)

Je vous souhaite bonne chance et profit.

P.S. Je n'aurais jamais pensé qu'il faudrait autant de mots pour décrire quelques dizaines de manipulations de «souris». :)