Erreurs, bugs, questions - page 1967

 
Alexey Navoykov:

Je ne comprends pas vraiment ce qui ne va pas. Tout fonctionne.

Ok, c'est moi qui suis stupide.
 

Oui, c'est quelque chose que j'ai déjà découvert. Mais le problème est (était) que dans la source ce membre est en fait un tableau, et j'ai décidé de traiter le scalaire en premier pour plus de simplicité. Cependant, pour le tableau, la même astuce ne fonctionne pas. J'ai dû faire glisser le tableau de manière statique à l'intérieur de la fonction membre.

 
Stanislav Korotky:

Cependant, la même astuce ne fonctionne pas pour un tableau. J'ai dû faire glisser le tableau de manière statique à l'intérieur de la fonction membre.

Il s'agit déjà d'une erreur de compilation - nous devrions le dire à Service Desk

template<typename T>
struct A {
        static int i[];
};
template<typename T>
int A::i[]; //error: '[' - unexpected token
 

construire 1650. Si plusieurs modules .ex5 connexes (principal et bibliothèque), rien ne fonctionne du tout. Partout, il y a une erreur de la forme :

2017.08.18 01:49:59.759 Draw (USDJPY,H1) Impossible de trouver 'xxx' dans 'yyyy.ex5'.

Tout fonctionnait bien avant. Même maintenant, en compilant MetaEditor 1646 + MetaTrader 1650, tout fonctionne

Il y a manifestement une erreur dans MetaEditor 1650, alors que les fichiers .ex5 sont presque deux fois plus fins. Pourquoi de telles expériences ?

 

Ajout de code

//Test.mqh
class A {};
class B { public:
        B() { f(); }
        A *g() { return NULL; }
void f()
{
        void *x = g();
        if ( true )
                return; 
        delete x; //в build 1650 не работает даже если до delete никогда (!) не доходит
                   //а ошибка при выполнении возникает именно из-за наличия этой строки
                   //и указатель в исходном коде действительный (есть проверка)
}
};

//Test.mq5
#include "Test.mqh"
#import "Test2.ex5"
        A *f();
#import
void OnStart()
{
        f();
}
//Test2.mq5
#property library
#include "Test.mqh"
static B b;
A *f() export { return NULL; }

Le résultat est dans le post précédent

 
Un autre exemple à vérifier
//Test.mq5
class A;
#import "Test2.ex5"
        A *f();
        void g( A* );
#import
void OnStart() //вариант 1
{
        f(); /*возвращаемое значение не используется*/
}
//Test2.mq5
#property library
class A {};
static A *a;
A *f()       export { /*делает что-то полезное*/; return a; }

void g( A* ) export { /*делает что-то полезное*/; }

La bibliothèque est de nature générale. A propos, le pointeur f() retourné n'est pas utilisé dans ce cas - option 1 (mais il peut être utilisé - voir option 2 ci-dessous). Lors de la compilation de Test.mq5, il n'y a pas de message d'erreur - cela signifie que le compilateur n'a pas besoin de définir la classe (A). Cependant, il y a une erreur pendant l'exécution : Impossible de trouver 'f' dans 'Test2.ex5'.

Plus loin

void OnStart() //вариант 2
{
        g( f()/*возвращаемое значение используется*/);
}
 
Pouvez-vous me dire s'il est possible de définir le drawdown relatif au lieu du drawdown maximum dans les résultats du test? Mais souvent le drawdown maximal est de 3-5% et le drawdown relatif atteint 50%. Et pour voir le drawdown relatif, il faut le tester séparément. Merci d'avance
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии ( советники ) перед началом использования их в реальной торговле. При...
 
 
Vladimir Pastushak:

Le langage de Windows doit être modifié pour être heureux...

 

Pourquoi cet avertissement stupide et inutile "pas de déclaration #import" si vous l'écrivez dans le fichier d'en-tête :

void f();
void f() {}

Il n'y a pas de limite au nombre de déclarations dans les endroits décents. Ennuyeux, je veux avoir une brève description des fonctions disponibles dans l'en-tête mqh, je dois commenter les lignes, ce qui affecte négativement la lisibilité. Quelqu'un pourrait dire "mettez les méthodes statiques dans une classe ou une structure (lors de l'utilisation de structures, un autre merveilleux avertissement "struct has no members, size assigned to 1 byte" apparaît)". Je répondrai : "Je n'aime pas les classes µl, je veux utiliser la première option" sans ce flot d'avertissements gluants. Pourquoi me forcez-vous à abandonner des pratiques courantes parfaitement valables ?