Erreurs, bugs, questions - page 2673

 
Aliaksandr Hryshyn:

La différence ici est la présence de parenthèses.

   ulong n_yes=3*1000;; ok  
   ulong n_no=(3*1000;); ne ok


 
Aliaksandr Hryshyn:

La différence ici est la présence de parenthèses.

c'est à vous de voir, mais vous auriez pu vérifier avant d'écrire

 
Bug MT5 (build 2361) : un autre problème avec les priorités d'appel des fonctions template surchargées par rapport au comportement du C++.
Dans MT5 erreur de compilation "appel ambigu à une fonction surchargée", en C++ c'est OK.
C++ en ligne(https://onlinegdb.com/Sy8cqdFr8);

template<typename _Tp>
struct It_wrapper{
   _Tp p;
};

template<typename _Tp>
struct It_g : public It_wrapper<_Tp>{};


template<typename _It, typename _Tp>
int __test_print(const It_wrapper<_It> &it, int n, const _Tp &value){
   Print(it.p);
   return 0;
};

template<typename _It> 
int test_print(const It_wrapper<_It> &it, int n, const int value){
   return __test_print(it, n, value);
}    

template<typename _It, typename _ValueType>                                                                                                    
int test_print(const It_wrapper<_It> &it, int n, const _ValueType &value){                                                              
   return __test_print(it, n, value);                                                                                                     
}   
  
   
void OnStart(){
   It_g<int> it;
   It_g<string> it_s;
   
   it.p = 4;
   it_s.p = "test";
   
   const int n = 10;
   test_print(it, 5, n);          // Compile Error: 'test_print' - ambiguous call to overloaded function
   test_print(it_s, 5, n);        // Compile Error: 'test_print' - ambiguous call to overloaded function
};


int main(){
   OnStart();
   return 1;
};
 

L'éditeur de texte ne fonctionne pas sur le marché. Lorsqu'on essaie de l'étendre en plein écran, seul le bouton d'enregistrement se bloque. ....

De plus, il est possible de télécharger une image de grand poids, l'image est téléchargée mais ne s'affiche pas correctement dans la description.
 
Bug 1 La commission position.Comision() dans les tests est toujours égale à 0 (dans le testeur lui-même, la commission est affichée dans l'historique de la position), cela affecte l'optimisation des paramètres pour les Expert Advisors qui calculent des calculs en utilisant la commission.

Bug 2 simbol.Spred() ne donne les valeurs réelles qu'au troisième accès depuis le début du programme.

Bug 3 : lorsque je perds un agent de test (je travaille en réseau local uniquement) pendant des heures, il ne peut pas l'oublier et essaie de le retrouver même si l'agent est déjà apparu dans le réseau local - je dois changer l'ip de l'agent et seulement après que le testeur oublie l'agent dans l'heure qui suit, je retourne l'ip de l'agent et le testeur continue à travailler. Le résultat est l'arrêt des tests pendant une période allant de 30 minutes à quelques heures - comme par hasard.

Bug 4 dans la description de l'algorithme génétique, il est écrit quand vous arrêtez le test ou quand vous arrêtez le test manuellement si les paramètres du test ne sont pas modifiés le cache de l'optimisation est stocké et quand vous reprenez le test, l'optimisation continue à partir du point d'arrêt - pas de conneries en réalité - l'optimisation recommence, et les résultats de l'optimisation sont ajoutés au fichier des résultats de l'optimisation arrêtée. Par conséquent, il y a juste plus de résultats d'optimisation dans le fichier de résultats d'optimisation - aucune utilité pratique pour trouver les paramètres optimaux, le temps d'optimisation global augmente.

Le bogue 5 dans le compilateur mql5 me semble qu'il n'est tout simplement pas optimisé - les programmes deviennent simplement plus lents, ce qui affecte la vitesse d'optimisation des paramètres. Un programme de 20 lignes ne peut pas être aussi lent.
 
Vladimir Pastushak:

Market a cassé l'éditeur de texte, lorsque j'essaie de l'étendre en plein écran, seul le bouton d'enregistrement se bloque .....

De plus, il est possible de télécharger une image de grand poids, l'image est téléchargée mais ne s'affiche pas correctement dans la description.

Bonjour !

Merci pour le rapport de bogue!

Pourriez-vous préciser le problème posé par la photo ?

 

J'ai rencontré un problème étrange, sur un tick il ouvre un ordre et ferme l'autre, tout fonctionne bien dans le testeur, mais je l'ai mis sur le compte réel et à un endroit le tambourin a commencé, la position s'ouvre, mais l'autre ne se ferme pas. J'ai une question à ce sujet : est-il possible d'envoyer deux ordres simultanément (d'ouverture et de fermeture) lorsque l'on négocie sur le compte réel ?

Razgon_y=OrderSend(Symbol(),OP_BUY,Razgon_Lot,Ask,100,0,0,Razgon_Comment,Razgon_Magic,0,clrBlue); 
       if(Razgon_y<0) 
       { 
        Print("OrderSend завершилась с ошибкой #",GetLastError()); 
       } 
       else ( Print("Функция OrderSend успешно выполнена") );
       for(int Razgon_index=0; Razgon_index<=OrdersTotal(); Razgon_index++)
       {
        if(OrderSelect(Razgon_index,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderMagicNumber()==Razgon_Magic && OrderType()==OP_SELL && OrderProfit()>0)
         {
          Razgon_OC=OrderClose(OrderTicket(),OrderLots(),Ask,100,clrGreen);
          if(Razgon_OC==false) 
          { 
           Print("OrderClose завершилась с ошибкой #",GetLastError()); 
          } 
           else ( Print("Функция OrderClose успешно выполнена") );
          Razgon_AccountEquity=AccountEquity();
         }
        }
       }
      }
 
Maksim Slovakov:

J'ai rencontré un problème étrange, sur un tick il ouvre un ordre et ferme l'autre à un certain moment. Dans le testeur tout fonctionne bien, mais je l'ai mis sur le compte réel et à un endroit le tambourin a commencé, la position s'ouvre, mais l'autre ne se ferme pas. À cet égard, j'ai une question : est-il possible d'envoyer deux ordres simultanément (ouverture et fermeture) lorsque l'on négocie sur le compte réel ?

Votre cycle n'est pas correct pour les positions de fermeture. Faites le cycle inverse.

 

Une erreur critique a été détectée dans le terminal lors du travail avec le débogueur sur des données réelles (build 2361) :

2020.03.16 16:30:41.730 (RTS Splice,M1)    crash -->  00000115A15300A5 488D0B            lea        rcx, [rbx]

2020.03.16 16:30:41.730 (RTS Splice,M1)               00000115A15300A8 E8850B0000        call       0x115a1530c32

2020.03.16 16:30:41.730 (RTS Splice,M1)               00000115A15300AD 90                nop        

2020.03.16 16:30:41.730 (RTS Splice,M1)               00000115A15300AE 89842488000000    mov        [rsp+0x88], eax

2020.03.16 16:30:41.730 (RTS Splice,M1)               00000115A15300B5 F4                hlt        

2020.03.16 16:30:41.730 (RTS Splice,M1)               00000115A15300B6 842488            test       [rax+rcx*4], ah

2020.03.16 16:30:41.730 (RTS Splice,M1)               00000115A15300B9 0000              add        [rax], al

2020.03.16 16:30:41.730 (RTS Splice,M1)

2020.03.16 16:30:41.730 (RTS Splice,M1) 00: 0x00000115A15300A5

2020.03.16 16:30:41.730 (RTS Splice,M1) 01: 0x00000115A7DFFD64

2020.03.16 16:30:41.730 (RTS Splice,M1) 02: 0x00000001776FA270

2020.03.16 16:30:41.730 (RTS Splice,M1) 03: 0x0000000000000001

2020.03.16 16:30:41.730 (RTS Splice,M1) 04: 0x00000001776FA23C

2020.03.16 16:30:41.730 (RTS Splice,M1)



 

Rappelez-moi s'il existe un moyen efficace de résoudre l'erreur "appel ambigu à une fonction surchargée" lorsque vous avez besoin d'une gestion séparée pour les types simples et les pointeurs, comme ceci :

    template<typename V>
    void process(V value)
    {
    }

    void process(BaseFunctor *ptr)
    {
    }

Ici, le compilateur considère que (BaseFunctor *) correspond aussi à V. Vous pouvez spécifier explicitement la conversion de type lors de l'appel d'une méthode, mais c'est laid. Si vous prenez un paramètre par référence dans une fonction de modèle, vous ne pouvez pas passer des constantes et d'autres valeurs temporaires (une variable est nécessaire).

Raison: