Pas pour les développeurs MT ! Par quoi remplacer INIT_PARAMETERS_INCORRECT ? - page 11

 
Сергей Таболин:

Une idée est apparue pour éliminer les paramètres "invalides" pendant l'optimisation génétique dans OnTester() :

Il s'avère que sans interférer avec la génétique, les résultats de INIT_PARAMETERS_INCORRECT peuvent ne pas être vus.

Mais nous avons ici une autre question : pouvons-nous obtenir un " deep minus " sur les bénéfices dans ce cas ?

cette méthode est très lente. Nous dépensons des ressources pour calculer l'ensemble du col.

 
Mikhail Mitin:

est une méthode très lente. Nous gaspillons nos ressources à faire des erreurs de calcul dans toute l'allée.

Entre deux maux...

 
Mikhail Mitin:

est une méthode très lente. Nous gaspillons des ressources en calculant tout le passage.

EntrerINIT_PARAMETERS_INCORRECT_ONTESTER - passer à OnTester.

 

Comment j'ai résolu ce problème (plusieurs variantes) :

  • Un paramètre distinct est créé, et d'autres valeurs sont substituées en fonction de sa valeur (décrite dans quelques messages ci-dessus). L'optimisation ne porte que sur ce paramètre
  • il y a aussi un moyen de sortir de cette situation, mais il n'est pas facile à mettre en œuvre :
    1. a créé un fichier csv, dans lequel se trouvait l'énumération des seuls paramètres nécessaires
    2. Je lis le fichier dans le OnInit, je lis les valeurs du fichier et je les assigne aux paramètres (lecture des fichiers avec le drapeau Shared).
    3. optimise seulement 1 paramètre (numéro de ligne dans le fichier csv)
  • J'ai écrit un algorithme pour générer un fichier mqh à partir d'un fichier csv (similaire aux points ci-dessus, mais plus rapide) et je l'ai connecté à l'Expert Advisor.

 
Mikhail Mitin:

Comment j'ai résolu ce problème (plusieurs variantes) :

  • Un paramètre distinct est créé, et d'autres valeurs sont substituées en fonction de sa valeur (décrite dans quelques messages ci-dessus). L'optimisation ne porte que sur ce paramètre
  • il y a aussi un moyen de sortir de cette situation, mais il n'est pas facile à mettre en œuvre :
    1. a créé un fichier csv, dans lequel se trouvait l'énumération des seuls paramètres nécessaires
    2. Je lis le fichier dans le OnInit, je lis les valeurs du fichier et je les assigne aux paramètres (lecture des fichiers avec le drapeau Shared).
    3. optimise seulement 1 paramètre (numéro de ligne dans le fichier csv)
  • écrit un algorithme pour générer un fichier mqh à partir d'un fichier csv (similaire aux points ci-dessus, mais plus rapide) et l'a connecté au Conseiller Expert.

Et comment cela vous permet-il de mettre en œuvre un algorithme génétique, si vous n'avez qu'une seule variable ?

 

J'ai compris ! ))))

Dans les lignes OnInit

   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                  return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                    return(INIT_PARAMETERS_INCORRECT);
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)  return(INIT_PARAMETERS_INCORRECT);

déplacé vers.

void OnTick()
{
//--- пропустить бесполезные проходы оптимизации
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_profit)                                 ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && move_stop)                                   ExpertRemove();
   if((MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER)) && period_HMA7C == 0 && shift_correction_HMA7C != 5)                 ExpertRemove();

La génétique n'interfère pas, etPARAMETERS_INCORRECT n'est pas calculé. )))

 
Сергей Таболин:

J'ai compris ! ))))

Dans les lignes OnInit

déplacé vers.

La génétique n'interfère pas, etPARAMETERS_INCORRECT n'est pas calculé. )))

Une solution intéressante. Et comment, la génétique réussit, ne s'enlise pas dans un seul descendant ?

 
Aleksey Vyazmikin:

C'est une solution intéressante. Et comment, la génétique se déroule-t-elle bien, sans s'enliser dans une seule descendance ?

C'est bon. Ce n'est pas un échec. ))) Du moins pas encore. Quelque part, j'avais une chouette avec beaucoup de paramètres invalides. Je vais devoir l'optimiser et voir.

L'idée du portage est que la génétique trébuche exactement à l'initialisation. Mais si la vérification est déplacée vers OnTick, alors l'initialisation se passe bien, le test commence, se termine immédiatement et la génétique obtient le résultat du passage à zéro.

 
Сергей Таболин:

C'est bon. Il ne tombe pas. ))) Du moins pas encore. Quelque part, j'avais une chouette avec beaucoup de paramètres invalides. Je vais devoir l'optimiser et voir.

L'idée du portage est que la génétique trébuche exactement à l'initialisation. Mais si la vérification est déplacée vers OnTick , alors l'initialisation se passe bien, le test commence et se termine immédiatement et la génétique obtient un résultat nul.

C'est bien qu'il n'échoue pas. L'essence du code est claire, mais j'ajouterais l'exécution une seule fois, surtout s'il existe de nombreuses conditions de sortie anticipée.

 
Aleksey Vyazmikin:

C'est bien que ça ne s'enlise pas. L'essentiel du code est clair, mais je n'ajouterais l'exécution qu'une seule fois, surtout s'il existe de nombreuses conditions de sortie anticipée.

L'optimisation de la chouette dont je parlais avance bien. )))

Bonne idée. Nous devons ajouter un drapeau de contrôle.