Erreurs, bugs, questions - page 2681

 
Andrey Kaunov:

Bonjour chers collègues.

Je ne suis peut-être pas le premier à poser cette question. J'ai écrit dans un autre fil de discussion, mais je n'ai pas reçu de réponse des développeurs. Comment se fait-il que la valeur réelle du pip de XAUUSD soit de 1USD ?

La fonction SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE) affiche de manière persistante 0.1USD

Et comment compter le drawdown, le profit, et d'autres choses, tandis que les paires de devises montrent la valeur normale du tick.

Terminal Z.U. MT5

Vous devriez demander à votre courtier, ces données sont remplies par le courtier...

 
Bug MT5 (build 2366), erreur de compilation lors de l'accès à uneméthode statique d'une classe à laquelle on accède via un type d'argument de fonction template.

template<typename _Tp>
struct It_g{
   class Opt{
      template<typename _It>
      static void test(_It &it){               
         _Tp p = it.p;                  
      };
   };
   
   _Tp p;
};

template<typename _Tp>
class V{
public:
   struct It : public  It_g<_Tp>{};
   It b;
};


template<typename T>
class GetStructType{
public:
   struct type : public T{};
};

template<typename _It>
void test(_It &it){
   GetStructType<_It>::type::Opt::test(it);   // Ok
   
   _It::Opt opt;
   opt.test(it);                              // Ok
   
   _It::Opt::test(it);                        // '_It' is not a class, struct or union | 'Opt' is not a class, struct or union
}

class ClassA{};


void OnStart(){ 
   V<int> v1;
   test(v1.b);
   
   V<ClassA*> v2;
   test(v2.b);
   
   V<int>::It it3;
   test(it3);
   
   V<ClassA*>::It it4;
   test(it4);
}
 
Bug MT5 (build 2366), erreur de compilation due à une utilisation incorrecte de l'espace de nom et de la portée dans le constructeur du modèle lors de l'appel de la classe de base.
Le problème se produit lorsque le même nom de classe est utilisé : dans l'espace de noms global, dans la classe interne et lorsqu'il est hérité en tant que classe de base.

template<typename T>
struct B{
   char data;
   
   B(){}
   B(int){}
};


template<typename T>
class A{
public:
   struct __reverse_iterator : public B<T>{
      __reverse_iterator() : B<T>(1){}                 // Ok
      
      template<typename TT>
      __reverse_iterator(const TT& n) : B<T>(n){}      //'<' - template mismatch
   };
   
   struct B : public __reverse_iterator{
      B() : __reverse_iterator(){}
      B(int n) : __reverse_iterator(n){}
   };
};

   
void OnStart(){  
   A<int>::B it_1();      // Ok
   A<int>::B it_2(1);     // Compile Error
}


En C++, tout fonctionne en faisant explicitement référence à l'espace de noms global. C++ en ligne: https://onlinegdb.com/BJIV6frUI
Dans MQL, cela ne peut pas être fait - erreur de compilation, bogue dans la définition de la classe interne - pas de possibilité de faire explicitement référence à l'espace de nom global lors de la spécification d'une classe de base(non corrigé dans MT5 (build 2366)).

Il y a également un problème dans le constructeur lors de l'appel de la classe de base qui est lié au bogue présenté plus tôt -https://www.mql5.com/ru/forum/1111/page2680#comment_15546487.
Veuillez noter que cela "fonctionne" aussi bien avec les espaces de noms qu'avec les classes internes.

 
Vladimir Pastushak:

Vous devriez demander à votre courtier, c'est lui qui remplit les données...

Je vois, merci Vladimir.

 

Le culbuteur ne fonctionne pas dans le testeur ? - Je n'ai rien trouvé sur cette question dans l'aide.

MarketBookAdd (Symbol ()) s'abonne au verre et donne true, mais l'événement OnBookEvent (const string &symbol) ne vient pas une seule fois pendant tout le test.

 
Andrey Dik:

Le culbuteur ne fonctionne pas dans le testeur ? - Je n'ai rien trouvé sur cette question dans l'aide.

MarketBookAdd (Symbol ()) s'abonne au verre et donne true, mais l'événement OnBookEvent (const string &symbol) ne vient pas une seule fois dans tout le test.

Ça ne marche pas. Et il n'y a pas d'histoire de la coupe.

 

Quelqu'un peut-il me dire ce qu'est l'erreur 533 ?

J'ai supposé que la version où il a été compilé est plus récente - j'ai demandé une mise à jour. Cela n'a pas aidé.

 
Igor Zakharov:

Quelqu'un peut-il me dire ce qu'est l'erreur 533 ?

J'ai supposé que la version où il a été compilé est plus récente - j'ai demandé une mise à jour. Cela n'a pas aidé.

L'intégrité de l'ex5 est rompue.

Où avez-vous eu cet ex5 ?

Ilyas pourra vous répondre plus en détail si vous lui envoyez cet expert.

Ilyas
Ilyas
  • www.mql5.com
Профиль трейдера
 
Slava:

L'intégrité de ex5 a été compromise.

Où avez-vous eu cet ex5 ?

Ilyas pourra répondre plus en détail, si vous lui envoyez cet expert.

Je l'ai compilé dans le build 2361. Sur le terminal où il a été compilé - il fonctionne. Je l'ai envoyé par skype à une autre personne pour qu'elle l'essaie (sans source) - erreur 533.

Je ne peux pas le lui renvoyer, alors j'ai téléchargé 2366 et l'ai recompilé à nouveau (avec le même nom).

ajouté : skype l'a sauvegardé. je l'enverrai.

added2 : la recompilation en 2366 provoque la même erreur. J'ai envoyé la source et la compilation à Ilyas.

 

Bug MT5 (build 2367) Les priorités d'exécution des fonctions templates en MQL ne correspondent pas à celles en C++ (online : https://onlinegdb.com/B172m1PLL).
Il semble que, dans le cadre de la correction du bogue, le bogue de compilation soit corrigé, mais que la priorité d'exécution des fonctions template surchargées ne soit toujours pas alignée sur le comportement du C++.

template<typename T>
struct B{
   T data;
};

template<typename T>
struct BB : public B<T>{};


template<typename T>                                             
struct A{
public:
   static void test(T& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};

                                         
struct AA{
public:
   static void test(B<int>& src){
      printf("1");
   }
   
   template<typename TT>
   static void test(B<TT>& src){
      printf("2");
   }
};
      

void OnStart(){
   BB<int> bb;
   
   A<B<int>>::test(bb);         // MQL:2,  should be 1     
   AA::test(bb);                // MQL:2,  should be 1     
}