Discussion de l'article "Création de Critères Personnalisés d’Optimisation des Expert Advisors" - page 2

 
Karlson:

Voulez-vous dire que le code est du type

si (solde < 3000) ExpertRemove() ;

ne fonctionne pas ?

Il fonctionne. J'ai déjà compris. Il interrompt l'optimisation mais affiche quand même les résultats, c'est pourquoi je pensais qu'il ne fonctionnait pas.


Karlson:

Mais ce n'est pas ce que j'ai dit. J'ai dit qu'une telle panne (qui fonctionnait auparavant au moins) entraînait le départ des généticiens à la fin.

Karlson : C'est le cas.

Mais si vous remettez les résultats de OnTester() à zéro ou faites comme ci-dessus (assignez la valeur moins -777), alors la génétique peut vraiment se comporter de manière imprévisible, parce que la sélection est effectuée sur les résultats juste par la valeur de retour de OnTester().

 
la question reste de savoir comment supprimer les résultats inutiles du rapport.

Une telle chose existait dans MT4 :

MT4


Il est certainement possible de le faire à l'aide des outils MQL5, puisque les développeurs ont complètement supprimé ces fonctions.

Bien sûr, tout peut être copié dans Excel, mais j'aimerais profiter de la nouvelle plateforme.

Nous avons résolu les limitations - nous pouvons le faire avec ExpertRemove().

Qu'en est-il de l'élimination des résultats inutiles dans le rapport ?

 
sigma7i:

Qu'en est-il de la possibilité d'ignorer les résultats inutiles dans le rapport ?

Vous ne pouvez pas le faire dans le rapport standard et vous n'avez pas besoin de le faire (je suis contre). Créez votre propre rapport.

Vous pouvez désormais générer un rapport au stade de l'optimisation(https://www.mql5.com/fr/docs/optimization_frames) dans le format de votre choix.

Et bientôt (hoo-hoo) il sera possible de gérer soi-même la génétique.

 

Excellent.

Grâce à mes travaux antérieurs dans le domaine des réseaux neuronaux et des algorithmes génétiques pour la prédiction des contrats à terme, j'ai réalisé l'importance d'une courbe d'actions raisonnablement droite.

et j'ai écrit quelques routines pour en tenir compte. Il s'agit vraiment d'une mesure de la "robustesse" d'un système prédictif.

 
Et maintenant, j'ai enfin commencé à tester et à explorer les possibilités. Et je suis d'accord. Un tout nouveau monde s'ouvre à nous. C'est un outil très puissant. Merci encore pour cet article
 

Constatations lors des travaux pratiques.

Le module sur la rectitude est un bon début, mais il est incomplet. Il est possible d'obtenir une très bonne note avec un bénéfice nul. Le bénéfice doit donc entrer dans l'équation. Se contenter d'ajouter une mesure du bénéfice total ne fonctionne pas.

ne fonctionne pas. Vous pourriez obtenir une ligne très droite avec une bonne valeur en ayant quelques gains au début, quelques baisses au milieu et quelques meilleurs gains à la fin. On obtiendrait ainsi une ligne droite de niveau avec une bonne adéquation et un certain profit. Mais ce n'est pas vraiment ce que nous recherchons.

Nous voulons vraiment une ligne de régression qui monte avec un bon ajustement. Ainsi, pour concrétiser l'idée d'utiliser une ligne de régression avec le moins d'écart possible, le coefficient de la pente ascendante doit être incorporé dans l'équation. C'est ce que nous voulons voir.

c'est ce que nous voulons voir. Une ligne de régression à pente ascendante avec un bon ajustement. J'essaierai de l'incorporer. Les suggestions et l'aide sont les bienvenues :-)

 
La valeur du critère personnalisé est affichée dans la liste des résultats avec le critère "standard". Est-il possible de créer 2 valeurs dans les critères personnalisés ? Je n'ai pas trouvé de bonne façon de combiner la rectitude et la pente.
 

J'essaie le code CSTS.

Je trouve ce résultat un peu étrange :


Résultat Profit #Trades Frofit factor DrawDown Expected Payoff Recovery Factor

0.58 1237 84 1.26 12.70 14.74 0.93

0.57 1598 90 1.38 8.69 17.36 1.76


Voici un autre exemple

0.61 3175 123 1.33 21.04 25.82 1.48

0.60 4460 145 1.49 11.32 30.77 2.56

A tous points de vue, les valeurs de la deuxième ligne sont meilleures ! mais le score est plus bas.

La seule chose que je peux déduire est qu'il y a une pénalité sur de nombreuses transactions. J'aurais préféré que ce soit l'inverse

Et pour finir, il semble qu'il n'y ait qu'une seule personne intéressée. Il semble qu'il n'y ait qu'une seule personne intéressée par ce sujet, moi.


Pour aller plus loin. J'ai fait une erreur dans mon code et cela a eu pour conséquence que les ordres en attente n'ont pas été effacés. Il en résulte également que seulement 5 ordres ont été placés pour une période de test de 12 mois. Avec un bon profit.

Cela a vraiment boosté le résultat de l'optimisation à plus de 100. Il est clair que la valeur du "gain moyen" était extrêmement élevée, ce qui a entraîné ce score extrême. Techniquement, c'est correct, mais cela n'a pas de sens dans le contexte du backtesting.

dans le contexte du backtesting. Quelle est la probabilité que des tendances longues comme celle-ci soient représentatives ? J'ai donc pensé que le nombre de transactions devait être incorporé dans l'équation d'une manière ou d'une autre.

Avec quelques essais et erreurs en modifiant le code, je suis arrivé à une méthode qui produit des résultats que je trouve utiles.

change :

// CSTS :
double tssf=real/teor ;
if(tssf <= 0) return 0 ;

work = TesterStatistics( STAT_TRADES ) ;
if( work <= 0) work = 1 ;
work = MathSqrt(work/4) ;

tssf = tssf * work ;
if( tssf < 1 ) tssf = 0 ;
if(TesterStatistics(STAT_PROFIT) <= 0) tssf = 0 ;

return(tssf) ;

La méthode originale est probablement bonne pour juger d'un système en fonctionnement mais fondamentalement inutile pour baser les paramètres d'un backtest.

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Order Properties - Documentation on MQL5
 

Eh bien, me revoilà, le loup solitaire de cet univers :-)

J'ai essayé le critère de la rectitude en essayant d'intégrer la pente de la ligne droite calculée dans l'équation. En l'état, cela peut donner une note très élevée pour un bénéfice très faible. Le simple fait d'ajouter le bénéfice final

Dans une tentative d'ajouter la pente réelle dans l'équation, j'ai modifié le code comme indiqué ci-dessous.

Ce n'est pas une solution parfaite mais elle est plus proche de ce que je veux voir. L'utilisation du résultat avec le solde ou le bénéfice fonctionne bien pour moi avec ce code.


//---------------------------------------------------------------------
// Obtenir la valeur du résultat de l'optimisation :
//---------------------------------------------------------------------
double  TBalanceSlopeCriterion::GetCriterion()
  {
// Essayons de calculer la pente de la courbe d'équilibre :
   double   current_slope=1000.0*this.balance_Ptr.CalcSlope();

// S'il est incliné vers le bas :
   if(current_slope<0.0)
     {
      return(-1.0);
     }

   double   temp=this.balance_Ptr.GetCurrentSKO();
   if(temp>0.0)
     {
      
   // return(this.scale/temp) ; //Ceci indique simplement dans quelle mesure les résultats adhèrent à une ligne droite qui peut être n'importe quoi, d'une ligne de niveau à une ligne pointant vers le haut.
      double temp2 = this.scale/temp;   // a ajouté Ingvar
      
      return(temp2 * current_slope);    // a ajouté Ingvar
      
     }

   return(0.0);
  }
 
ingvar_e:

Eh bien, me revoilà, le loup solitaire de cet univers :-)

J'ai essayé le critère de la rectitude en essayant d'intégrer la pente de la ligne droite calculée dans l'équation. En l'état, cela peut donner une note très élevée pour un bénéfice très faible. Le simple fait d'ajouter le bénéfice final

Dans le but d'ajouter la pente réelle dans l'équation, j'ai modifié le code comme indiqué ci-dessous.

Ce n'est pas une solution parfaite mais elle est plus proche de ce que je veux voir. L'utilisation du résultat avec le solde ou le bénéfice fonctionne bien pour moi avec ce code.


ingvar_e, pas si seul, j'aime beaucoup ce domaine et j'ai été surpris par votre évolution, car je crois aussi en cette ligne de pensée.

Par exemple, pour les algorithmes génétiques, vous devez avoir un bon algorithme de fitness, et bien sûr créer un critère personnalisé aligné sur ce fitness.

Je ne suis pas sûr que calculer la pente de la courbe d'équilibre soit la meilleure façon, puisque nous avons plusieurs autres façons, en tout cas comptez sur moi pour explorer et débattre de ces idées.