Erreurs, bugs, questions - page 2671

 
Sauf pour les variables dans les paramètres de l'indicateur, mais elles ont peut-être été modifiées avant moi.
 
Dmitri Custurov:

Les gars, j'ai pris un job en freelance. Un client m'a envoyé le fichier à la dernière minute. On dirait qu'il a été décompilé. Je veux d'abord m'assurer que c'est vrai avant de me plaindre. Je joins un morceau de code.

Une des fonctions. Toutes les variables et fonctions ressemblent à ceci.

Décompilation sans équivoque.
 
Comment dois-je me séparer du client dans ce cas ? La violation a été signalée, mais l'accord a déjà été conclu. Sera-t-il impossible d'annuler sauf par arbitrage ?
 
Dmitri Custurov:
Comment dois-je me séparer du client dans ce cas ? La violation a été signalée, mais l'accord a déjà été conclu. Sera-t-il impossible d'annuler sauf par arbitrage ?

Écrire à l'arbitrage. J'en ai informé l'administration.

 
Sergey Dzyublik:

Bug MT5 (build 2340) utilise deux fois le même code : premier passage - compilation réussie, deuxième passage - erreur de compilation.
Apparemment,
lesproblèmes sont liés au cache du générateur de fonction modèle.
L'erreur disparaît si pour la fonction modèle "
void run(const T &ff)" le transfert par référence est remplacé par le transfert par valeur"void run(const T ff)".

Merci pour le message, corrigé

 

Merci aux développeurs d'avoir fourni la fonctionnalité d'espace de nom.
Cependant, pourquoi MT5 (build 2361) manque-t-il complètement de support intellisense pour les espaces de noms, même pour le global via :: ?

En même temps, il y a un support pour l'intellisense pour les méthodes des classes statiques, pour le meilleur ou pour le pire.
Par conséquent, du point de vue de l'utilisateur, il est logique de se demander : "Pourquoi ne pas réutiliser le code responsable de l'intellisense dans les classes pour mettre en œuvre l'intellisense pour les espaces de noms ?".

 
Bug MT5 (build 2361) ré-exécute le script sur le même graphique lorsque la première exécution n'est pas encore terminée et provoque le blocage du terminal.

Le problème est observé pour le projet principal où des "calculs mathématiques" sont effectués - là, le terminal se bloque.
Le code suivant peut être pris comme exemple à reproduire :
#define  K 1000
   
void OnStart(){    
   uint start = GetTickCount();
   printf("Start");
   while(GetTickCount() - start < 10*K){
      Sleep(1*K);   
      printf("Progress bar...");
   };
   printf("End");
}


La ré-exécution du script proposé sur le même graphique, lorsque la première exécution est encore incomplète, se produit sans message de confirmation.
Une suspension se produit pendant quelques secondes - il n'y a pas de sortie "Barre de progression...", puis l'indicateur de sortie du terminal est activé et la mise enveille n'est plus déclenchée.
Pour le projet principal, après un blocage de plusieurs secondes, le terminal ne se développe pas du tout - je dois tuer le processus.

 

est-il possible d'obtenir le numéro de passe de l'agent de test ?


ZS : ou nous avons besoin d'un identifiant unique pour chaque passage pendant les tests pour le nom du fichier - je veux sauvegarder les paramètres de l'EA pendant les tests dans un fichier, mais nous avons besoin de quelque chose d'unique pour former un nom de fichier avec les paramètres.

 
Igor Makanu:

est-il possible d'obtenir le numéro de passe de l'agent de test ?

Il n'y a que les données qui se trouvent dans le fichier opt. Le format est disponible.

 
fxsaber:

Il n'y a que les données dans le fichier opt. Le format est disponible.

Je ne veux pas lire à partir d'un fichier, j'ai déjà fait ce que je voulais - nom de fichier unique - MD5 des paramètres d'entrée, comme ceci :

string getMD5(const SSaveStruct &inpstr)
{
   const uchar key[1]= {0};
   uchar data[],md5[];
   StructToCharArray(inpstr,data);
   CryptEncode(CRYPT_HASH_MD5, data, key, md5);
   string result = "";
   for(int i = 0; i < ArraySize(md5); i++)
      result += StringFormat("%02x", md5[i]);
   return(result);
}

void SaveInputParam()
{
   SSaveStruct savestruct;
   FillSaveStruct(savestruct);
   string fname = "EA_TST//" + getMD5(savestruct) + ".bin";
   int handle = FileOpen(fname,FILE_WRITE|FILE_COMMON|FILE_BIN);
   FileWriteStruct(handle,savestruct);
}

double OnTester()
{

   if(!IS_OPTIMIZATION)
   {
      SSaveStruct savestruct;
      FillSaveStruct(savestruct);
      Print("fname = " + getMD5(savestruct));
      return(AccountInfoDouble(ACCOUNT_BALANCE));
   }

#define  BADTEST() { srand((int)TimeCurrent()); return (-(rand() % 1000)); }
   if(EA_STOP || TesterStatistics(STAT_TRADES) < EA_MIN_TRADEES)  BADTEST();
   SaveInputParam();
   return(AccountInfoDouble(ACCOUNT_BALANCE));
#undef  BADTEST
}

les fichiers sont écrits et en une seule passe je vois le nom du fichier : fname = 04a19580d36f0a749143211b57efbebc

Le code est un peu répétitif, mais afin de ne pas remplir la structure de l'optimiseur avec des paramètres d'entrée si le test est infructueux ..... mais je vais probablement le réécrire, ce n'est pas un beau code, je ne comprendrai pas pourquoi je l'ai fait de cette façon ;)))