Bibliothèque: MultiTester - page 25

 
fxsaber:

Profitez du bug de KB : le fichier zip contient la première version.

Hélas, il contient des fichiers du 25/12/20.
J'ai encore les fichiers de novembre 2019, mais il y a déjà....
Vous en avez ?
 
Edgar Akhmadeev:
En avez-vous un ?

Je n'en ai trouvé qu'un pour décembre 2019. MTTester ne semble pas avoir supprimé les anciennes fonctions.

 
fxsaber:

Trouvé seulement pour décembre 2019. Je ne pense pas avoir supprimé d'anciennes fonctions dans MTTester.

Peut-être, au moins sous la forme d'une idée - comment définir les paramètres d'optimisation du conseiller expert à partir du code ?
Probablement, je suis confus par le temps passé et il n'y a pas une telle possibilité.
 
Edgar Akhmadeev:
Peut-être, au moins sous la forme d'une idée, comment définir les paramètres d'optimisation de l'Expert Advisor à partir du code ?
Je suis probablement déconcerté par le temps qui s'est écoulé depuis longtemps et cette possibilité n'existe pas.

Il n'y a que des possibilités.



Mais rien n'empêche de travailler en parallèle via le presse-papiers commun. Il suffit de faire une vérification supplémentaire.

 
fxsaber:

Mais rien n'empêche de travailler en parallèle via un presse-papiers commun. Il suffit de faire une vérification supplémentaire.

C'est la première chose que j'ai essayée. J'ai passé plusieurs jours à déboguer le sémaphore de fichier dans COMMON, mais je n'ai pas réussi à obtenir un travail stable. Peut-être que les fonctions de fichiers intégrées sont programmées différemment de ce que je pense qu'elles devraient être.
Peut-être devrais-je essayer les fichiers via WinAPI, la mémoire partagée ou même l'API de sémaphore (il en existe certainement une, peut-être que quelqu'un pourra me le dire ; MutEx m'est venu à l'esprit immédiatement, j'y réfléchirai).
Si vous voulez analyser mes fonctions Lock et Release (elles sont courtes), je peux les poster après-demain. Non ?
 
Edgar Akhmadeev:
C'est la première chose que j'ai essayée. J'ai passé quelques jours à déboguer le sémaphore de fichier dans COMMON, mais je n'ai pas réussi à le faire fonctionner de manière cohérente. Peut-être que les fonctions de fichiers intégrées ont un timing un peu différent de ce que je pense qu'elles devraient avoir.
Peut-être devrais-je essayer les fichiers via WinAPI, la mémoire partagée ou même l'API de sémaphore (il en existe sûrement une, peut-être que quelqu'un peut la suggérer ; MutEx m'est venu à l'esprit immédiatement, je vais y réfléchir).
Si vous voulez analyser mes fonctions Lock et Release (elles sont courtes), je peux les poster après-demain. Non ?

Eh bien, vous avez tout gâché ! Entrez une entrée de type chaîne de caractères, dans laquelle vous enfoncez le chemin vers le terminal à travers le tampon. Après avoir introduit les paramètres, lisez-les et vérifiez s'ils sont corrects. En particulier, par cette entrée de chaîne. Appuyez sur le bouton Start dès que la vérification est terminée avec succès.


On peut même faire quelque chose de similaire.

  static bool SetSettings2( string Str, const int Attempts = 5 )
  {
    bool Res = false;

    for (int j = 0; (j < Attempts) && !Res; j++)
    {
      string Str1;
      string Str2;
      string Str3;

      Res = MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str1) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str2) &&
            MTTESTER::SetSettings(Str) && MTTESTER::GetSettings(Str3) &&
            (Str1 == Str2) && (Str1 == Str3);
    }

    return(Res);
  }
 
fxsaber:

Vous avez fait preuve de beaucoup de bon sens ! Entrez une entrée de type chaîne, dans laquelle vous insérez le chemin vers le terminal à travers le tampon. Après avoir introduit les paramètres, lisez-les et vérifiez s'ils sont corrects. En particulier, par cette entrée de chaîne. Appuyez sur le bouton Start dès que la vérification est terminée.

Ce n'est pas que je sois malin, je suis juste trop direct. Multi-accès signifie sémaphores.
J'ai demandé une idée et je l'ai eue. Je vous remercie !
 

Accélération de l'AG.

Le conseiller expert en mode cadre reçoit OnTester de la part des agents. Si, après 100 à 1000 passages, rien de bon n'est trouvé, nous appuyons sur Stop.

L'optimisation peut être accélérée d'un ordre de grandeur.
 
fxsaber:
Vous pouvez accélérer l'optimisation d' un ordre de grandeur .

J'ai effectué 470 optimisations (chacune sur un symbole différent) en 4,5 heures sur des ticks réels (un mois).

 

1. Je remplacerais GetTickCount() par GetTickCount64() dans Sleep2. Sinon, le débordement menace la logique qui n'est pas tout à fait correcte. Et cela se produit nettement moins souvent dans la variante 64. En d'autres termes, vous devriez peut-être l'adopter aussi.


2) Le second ArrayResize soulève des questions ici

      ::ArrayResize(Buffer, (int)Size / sizeof(T));

      kernel32::ReadFile(handle, Buffer, (uint)Size, Read, 0);
      Res = ::ArrayResize(Buffer, Read);

Il est plus que probable qu'il devrait être

Res = ::ArrayResize(Buffer, Read / sizeof(T));


3) Et enfin, quelques types différents

static void Sleep2( const uint Pause )


  static bool IsReady( const int Pause = 100 )
  {
    if (MTTESTER::IsReady2())
      MTTESTER::Sleep2(Pause);