Optimisation et tests hors échantillon. - page 6

 
Mathemat:
Vita, bon point. Mais je dirais que la capacité de généralisation n'est pas seulement une propriété de l'EA, mais aussi une propriété de l'algorithme d'apprentissage, qui doit identifier correctement cette capacité. L'algorithme methaquot ne révèle pas cette capacité, il la détruit par sur-optimisation.

Un algorithme de métacitation ne tient pas compte de cette capacité, mais se fait au contraire ronger par la sur-optimisation. -- J'aimerais voir un exemple.
 

Les exemples abondent. Je n'étais pas clair. Je voulais dire que l'utilisation irréfléchie de l'optimiseur à la "un, deux, trois !" conduit à un optimisme excessif et déraisonnable des listes de gris. Par exemple, le dernier exemple - "Le Forex est-il en train de se retourner contre nous ? Ou peut-être que je ne le comprends pas". Ou "Trend Advisor (Expert)". J'attends les réactions.". Ce sont toutes des astuces.

À propos de la "destruction à la racine" : la probabilité que l'ajustement marginal sur un segment de données conduise à une rentabilité durable sur le segment réel, hors échantillon, est extrêmement faible. L'optimum se situe quelque part au milieu entre la surprofitabilité et le seuil de rentabilité, ce qui est inhérent à l'algorithme d'apprentissage de NS.

Dites-moi s'il vous plaît, Vita, est-ce que notre optimiseur génétique dans sa forme pure fournit une quelconque garantie de rentabilité d'un Conseiller Expert dans le futur - même à une rentabilité super-duper dans la zone de test/optimisation ? Je ne parle pas du testeur, le testeur est très bien.

P.S. J'ai enfin trouvé l'une des toutes premières mentions de l'optimiseur génétique par MQ : https://www.mql5.com/ru/forum/50805. Voir le message de Filin et la réponse de Slawa. La réponse montre que l'optimiseur n'est utile que pour l'estimation approximative des capacités d'un conseiller expert et rien de plus. La majorité des graylistes l'utilisent comme le premier et le seul outil de test "complet" des Expert Advisors. Il s'agit d'une approche amateur qui conduit à de fausses illusions. En fait, cet outil, destiné uniquement à une estimation approximative, n' est, par la loi de la mesquinerie, bon que pour mettre au rebut des conseillers experts manifestement mauvais en cas de résultats manifestement négatifs - mais pas pour tirer des conclusions positives sur la valeur du conseiller expert...

 

Mathemat писал (а):

Les exemples abondent. Je n'étais pas clair. Je voulais dire que l'utilisation irréfléchie de l'optimiseur à la "un, deux, trois !" conduit à un optimisme excessif et déraisonnable des listes de gris. Par exemple, le dernier exemple - "Le Forex est-il en train de se retourner contre nous ? Ou peut-être que je ne le comprends pas". Ou "Trend Advisor (Expert)". J'attends les réactions.". Ce sont tous des ajustements.

--> :) Je l'ai. Cependant, je suis d'accord, les méta-citations ne peuvent pas être responsables de "l'application irréfléchie de l'optimiseur". Je suis en faveur de la pensée humaine et de l'optimisation de l'optimisation. Je connais, par exemple, la loi selon laquelle mon EA opère. L'optimiseur me donne beaucoup de jeux de paramètres rentables. Comment il les obtient - "brutalement" à l'aide de la génétique ou "intelligemment" à l'aide d'un neurone - cela n'a aucune importance pour moi, car dans tous les cas, je regarde les résultats d'un œil critique (délibérément, pour ainsi dire) et je sépare immédiatement les mouches des côtelettes, car je suis le seul à connaître exactement la loi qui régit les transactions de mon conseiller expert.

--> Imaginez que nous disposions d'un optimiseur "intelligent" capable de dire avec précision : "Voici l'ensemble optimal de paramètres de fonctionnement. Je vous jure, pas d'ajustement !" ou "Non, les gars, pour cette EA je ne peux pas choisir des paramètres de travail, et pas seulement ajuster la courbe". Ce serait le bon moment ! Un optimiseur certifiant les stratégies implémentées dans les EAs ! Accès gratuit aux méta-citations ! Super ! J'en veux vraiment un.

À propos de "tuer à la racine" : la probabilité que le curvafitting marginal sur un intervalle de données conduise à une rentabilité soutenue sur l'intervalle réel, hors échantillon, est extrêmement faible. L'optimum se situe quelque part au milieu, entre le seuil de rentabilité et le seuil de rentabilité - c'est sur cela que se base l'algorithme d'apprentissage NS.

--> Le "l'optimum est quelque part au milieu" est un sentiment intuitif résultant du fait que les "graals" entièrement optimisés sont garantis d'échouer dans le futur, donc il ne faut pas optimiser jusqu'au bout, ou que "la vérité est quelque part proche" ou quelque chose comme ça. Ce sentiment n'a rien à voir avec la réalité. La régularité peut être optimisée jusqu'à la limite et c'est seulement là qu'elle se révélera dans toute sa gloire. Vous aurez beau le tordre, il ne servira à rien, mais le sentiment que l'optimum se situe quelque part au milieu peut être développé.

S'il vous plaît dites-moi, Vita, est-ce que notre optimiseur génétique dans sa forme pure fournit une quelconque garantie de rentabilité d'un conseiller expert à l'avenir - même en cas de rentabilité super-duper sur la partie test/optimisation ? Je ne parle pas du testeur, le testeur est très bien.

--> Je ne le suis pas, et je pense qu'il est inapproprié d'exiger de telles garanties des résultats de l'optimiseur. Voir ci-dessus à propos de "smart", donnant des garanties, optimiseur.

P.S. J'ai enfin trouvé l'une des toutes premières mentions de l'optimiseur génétique par MQ :

https://www.mql5.com/ru/forum/50805

. Voir le message de Filin et la réponse de Slawa. Vous pouvez voir dans la réponse que l'optimiseur n'est utile que pour une estimation approximative des capacités d'un conseiller expert et rien de plus. La majorité des graylistes l'utilisent comme le premier et le seul outil de test "total" des Expert Advisors. Il s'agit d'une approche amateur qui conduit à de fausses illusions. En fait, un tel outil destiné uniquement à une estimation approximative n' est, par la loi de la mesquinerie, assez bon que pour mettre au rebut des conseillers experts manifestement mauvais en cas de résultat clairement négatif - mais pas pour tirer une conclusion positive sur la valeur du conseiller expert...

--> "L'optimiseur n'est utile que pour une estimation approximative des capacités de l'EA" - à nouveau, la revendication de l'optimiseur qui est incapable d'estimer avec précision les capacités d'un EA, mais, en fait, de certifier les stratégies d'un EA. Il ne reste plus qu'à créer un robot qui génère des stratégies, à les soumettre à l'optimiseur, à obtenir un avis sur leur adéquation et à passer à la découpe garantie de l'argent. Que pensez-vous de cette illusion ?


 

L'illusion est formidable, mais ce n'est qu'une illusion. Mais il est possible d'améliorer considérablement l'application de ce que nous avons (testeur/optimiseur) avec les moyens disponibles dans MQL4. Sinon, nous continuerons à voir des super-hélicoptères tous les trois jours, avec des résultats seulement convenables, en prétendant qu'il s'agit d'essais normaux...

Et je n'ai pas à me plaindre des méta-citations : l'optimiseur fait exactement ce pour quoi il a été conçu, à savoir l'optimisation génétique dans l'espace des paramètres d'Expert Advisor, et en fait, il fait la même chose.

J'ai une suggestion pour le testeur : il serait bien d'avoir une fonction standard comme test() dans laquelle tous les paramètres nécessaires seraient clairement spécifiés, y compris le nom du fichier historique sur lequel tout est testé. La liaison rigide d'un nom de fichier à son contenu n'est pas une solution suffisamment souple.

 
leonid553:

Bonjour à tous.

Après avoir optimisé un EA, nous sommes souvent amenés à sortir de l'échantillonnage plus d'une douzaine de jeux de paramètres suggérés par l'optimiseur.

J'ai une idée pour optimiser les Expert Advisors en dehors de l'échantillon. Supposons que nous "chargions" le conseiller expert d'une optimisation par un certain nombre de paramètres. Nous avons fixé une date. Par exemple, nous avons fixé une date allant du 1er janvier 2006 au 1er janvier 2007. 2006 au 1er janvier 2007.

Nous avons reçu plusieurs milliers d'Expert Advisors. Ensuite, nous sauvegardons la page avec les RÉSULTATS DE L'OPTIMISATION dans un fichier séparé. Ensuite, nous fixons la période historique suivante pour l'optimisation, c'est-à-dire que nous ajoutons un mois ou deux, ou autant que nécessaire.

Dans notre cas, nous fixons par exemple la date du 1er janvier. 2007 au 1er juin 2007. Et encore une fois, nous utilisons l'optimisation. Pour être plus exact, ce ne sera pas tout à fait de l'optimisation. L'optimiseur ne doit pas prendre les paramètres dans les PROPRIÉTÉS DE L'EXPERT, mais resélectionner des ensembles de paramètres à partir du fichier que nous avons enregistré après la première optimisation. Après cette seconde optimisation, il ne reste plus que les vAreAs qui ont rapporté des bénéfices en dehors de l'échantillon !

Le résultat, idéalement, est que nous obtenons les "paramètres idéaux" avec lesquels travailler et que nous pouvons tester en ligne par la suite !

Je pense que ce sera un ajout utile au testeur mt4. Probablement, et très probablement, elle est déjà mise en œuvre par quelqu'un quelque part. Si quelqu'un le sait, merci de partager le lien !

En raison de mes modestes connaissances, je ne parviens pas à trouver comment mettre cette idée en pratique.

Il existe sûrement déjà une application pratique de cet algorithme... Sur le forum je n'ai trouvé que ses dérivés... Par exemple, "Comment mettre en œuvre votre critère d'optimisation"...

Je veux partager ma solution à ce problème....

Préparons un EA... Ajoutons des paramètres externes...

extern int    Counter      = 1;        // Счетчик подсчета количества оптимизаций. Если равен 0, то обычная оптимизация...
extern string Filename     = "";       // Имя файла с оптимизируемыми параметрами

int    FilePtr=0;                      //  Положение файлового указателя

Dans la fonction init(), insérer le bloc suivant....

   if(IsOptimization() && Counter>0)
   {
// Для ускорения процесса будем поддерживать сквозной указатель файловой позиции
// с помощью глобальной переменной FilePtr 
// На первом проходе инициализируем её нулём.
      if (GlobalVariableCheck("FilePtr")==false || Counter == 1) 
      {
         FilePtr = 0; 
         GlobalVariableSet("FilePtr",0); 
      } 
      else 
      {
         FilePtr = GlobalVariableGet("FilePtr"); 
      }

      int handle=FileOpen(Filename,FILE_CSV|FILE_READ,';');
      FileSeek(handle,FilePtr, SEEK_SET);
      Parametr1=StrToInteger(FileReadString(handle));
      Parametr2=StrToInteger(FileReadString(handle));
      Parametr3=StrToInteger(FileReadString(handle));

      FilePtr = FileTell(handle); 
      GlobalVariableSet("FilePtr",FilePtr);
      
      FileClose(handle); 
   }

Parametr1, Parametr2, Parametr3 - paramètres externes, qui doivent être optimisés.....

C'est tout...

 
kharko:

Il existe sûrement déjà une mise en œuvre pratique de cet algorithme... Sur le forum je n'ai trouvé que ses dérivés... Par exemple, "Comment mettre en œuvre votre critère d'optimisation"...

Je veux partager ma solution à ce problème....

Jetez un coup d'œil aux articles de Nikolay Kositsin, par exemple "Les experts basés sur les systèmes de trading populaires et l'alchimie de l'optimisation des robots de trading (suite)".

 

Comment cela fonctionne-t-il ?

A l'intervalle de temps A nous exécutons l'optimisation habituelle des paramètres (Compteur=0) ...

Nous transférons les résultats vers Excel... Notre tâche consiste maintenant à créer un fichier avec les paramètres optimisés et à le sauvegarder dans le répertoire ...\tester\files

Sélectionnez des colonnes avec nos paramètres dans Excel, copiez et collez-les dans Word ou Notepad comme texte non formaté...

Dans Wordboard ou Notepad, convertissez chaque ligne sous la forme : valeur1;valeur2;valeur3.

Enregistrez-le dans le répertoire ...\tester\files

Si vous n'êtes pas trop paresseux, vous pouvez écrire une macro pour effectuer les opérations ci-dessus à la volée...

Maintenant nous pouvons exécuter l'optimisation sur le créneau horaire B... Maintenant le paramètre d'optimisation sera Contre... Indiquez la valeur maximale (nombre de lignes de la liste)...

Voilà, le problème est résolu... Bonne chance...

 

J'ai lu cet article... Je pense que ma variante est plus simple et plus pratique..... et le plus important, c'est qu'il est universel...

L'implémentation ci-dessus coïncide complètement avec le souhait de l'auteur de la branche...

 
Un exemple concret d'optimisation... Voir la pièce jointe
Dossiers :
sample.zip  1201 kb
 

Merci, kharko pour la solution. Je vais essayer de l'utiliser !