Erreurs, bugs, questions - page 2648

 
Сергей Проценко:
En fonction du bénéfice, si le bénéfice est plus élevé, descendez, l'autre ordre a un bénéfice plus élevé, échangez les places. Si le bénéfice de l'euro devient supérieur à celui de l'or, l'ordre pour l'euro sera en bas et l'ordre pour l'or sera au-dessus.

Vous avez trié par profit. Sélectionnez un autre critère de tri.

 
fxsaber :
Pouvez-vous me dire comment contourner une erreur de compilation?

Ce n'est pas aussi compliqué que ça en a l'air :

 #define  PRINT(x) ; Print ( #x,  ":" , string (x))

struct STRUCT_BASE
{
   static const int Array[];
};
static const int STRUCT_BASE::Array[] = { 1 , 2 };

struct STRUCT : STRUCT_BASE
{
   int Array2[ sizeof (Array)];
};


void OnStart ()
{
   static const int Array[] = { 1 , 2 };
   int Array2[ sizeof (Array)];
  
  PRINT( ArraySize (Array));             //2 
  PRINT( ArraySize (Array2));           //8
  
  
  STRUCT s;
  PRINT( ArraySize (s.Array));           //2
  PRINT( ArraySize (s.Array2));         //8
}
 
Sergey Dzyublik:

Ce n'est pas aussi compliqué que ça en a l'air :

Merci, je ne suis pas arrivé à la base.

 
Je ne peux pas vérifier le code de base, lefichier principal n'a pas été trouvé, mais il est là. Veuillez en trouver la raison (si les modérateurs le peuvent). Je pense revenir à la publication sur les blogs - pas de problèmes de ce genre.
 
Stanislav Korotky:
Je ne peux pas vérifier la base de code, ça dit que lefichier principal n'a pas été trouvé, mais il est là. Veuillez en trouver la raison (si les modérateurs le peuvent). J'envisage de revenir à la publication sur les blogs, qui ne posent pas de problèmes.

placez le mq5 dans le dossier "default".

 

Deux questions immédiatement pour le compilateur MT5 (build 2321) :

#define  PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      //MQL:2         
}

////ERRROR: 'func' - template functions overloading is not supported yet
//template<typename T>     
//void func(T &it1){ 
//  printf("C++:2");                               
//}
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                       //MQL:1        
}

template<typename T>
void func(A<T> &it1){
   printf("C++:3");                       //MQL:3
}


void OnStart(){
   B<int> b;
   func(b);
}

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

1. Les priorités d'exécution des fonctions modèles en MQL ne correspondent pas à celles des fonctions modèles en C++ (en ligne : https://onlinegdb.com/Hkvz8Hu7L).
Ainsi, en C++, lorsque les trois fonctions de modèle sont présentes, la fonction de modèle dont le résultat est "C++:1" est exécutée, si elle est supprimée, "C++:2" est exécutée, et si elle est supprimée, "C++:3" est exécutée.
Les priorités dans MQL sont très différentes : "C++:2" suivi de "C++:1" et "C++:3".


Il n'est pas clair pourquoi la première des fonctions est interdite dans MQL, alors que la fonction identique avec un paramètre fictif est déjà autorisée :

//ERRROR: 'func' - template functions overloading is not supported yet
template<typename T>     
void func(T &it1){ 
  printf("C++:2");                               
}

// OK
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                              
}
 

Bonjour à tous.

Quelqu'un a-t-il rencontré le problème de tester des robots multi-devises?

Toutes les paires de devises requises pour l'EA sont-elles téléchargées ?

J'essaie de tester deux paires, par exemple EURUSD GBPUSD :

Si je teste sur EURUSD (test EURUSD GBPUSD)- le résultat est 1,

Si nous testons sur GBPUSD (test EURUSD GBPUSD), le résultat est 2, c'est-à-dire différent.

Si nous testons USDCHF (en testant EURUSD GBPUSD) - le résultat est 3, c'est-à-dire différent



Les résultats ne sont pas très différents, quelques dizaines de transactions (pendant 2 mois), mais le résultat est différent pour chaque paire (bien que nous testons certaines paires EURUSD GBPUSD)

Immédiatement, je vais supposer : Tout le code fonctionne avec la variable Symb , qui prend Symbol() de la boucle. C'est-à-dire un seul code, mais à l'intérieur du code à la variable Symb est attribué sa propre valeur.


Est-il possible qu'en raison des différentes cotations, ticks, qualité de l'historique pour les différentes paires (à savoir EURUSD et GBPUSD sont toujours testés), les résultats des tests soient différents pour les différentes paires ?

I.e.

Se peut-il que le test ait été effectué pour l'EURUSD, et que moins de cotations soient nécessaires pour le GBPUSD ?

и

Est-il possible que le test ait été défini pour GBPUSD et que moins de cotations soient téléchargées pour EURUSD ?

 
fxsaber:

Placez le mq5 dans le dossier "default".

Je sais très bien que le module principal devrait être sans dossier - c'est le cas, le dossier par défaut qu'ils "finissent" eux-mêmes en descendant les options à droite des boutons de téléchargement.

Ça ne marche pas.

 
En C++, il compile et fonctionne (en ligne : https://onlinegdb.com/Syn90dd7I), mais en MQL l'erreur : "'func' - appel ambigu à une fonction surchargée".

#define  PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};

template<typename T>
class C : public B<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      
}

template<typename T>
void func(A<T> &it1){
   printf("C++:2");                      
}


void OnStart(){
   C<int> c;
   func(c);            //ERROR: 'func' - ambiguous call to overloaded function
}

int main(){
   OnStart();
   return 0;
}
 
Stanislav Korotky:

Je sais parfaitement que le module principal devrait être dépourvu de dossiers - c'est le cas, le dossier par défaut qu'ils "terminent" eux-mêmes en faisant descendre les options à droite des boutons de téléchargement.

Cela ne fonctionne pas.

Je l'ai comme ça.