Erreurs, bugs, questions - page 2784

 
sershi87:
Comme je l'ai dit plus haut, après la mise à jour, le terminal est très lent et se bloque complètement. Avant la mise à jour, il n'y avait pas de tels problèmes et tout fonctionnait bien. Je suis conscient du problème de Debian et je suis entièrement d'accord avec le fait que c'est un disque très stable. Cependant, je pense que la nécessité d'une version native se fait attendre et que nous devons la poursuivre.

Je suppose que les ralentissements et les plantages sont causés par une synchronisation incorrecte avec le serveur d'histoire.
C'est-à-dire, par exemple, le réglage des barres dans la fenêtre du terminal est de 100000, par exemple je demande 3000 barres du code
mais la synchronisation peut échouer et commence à se synchroniser avec tout l'historique disponible sur le serveur et à pomper tout l'historique du serveur.
En raison de ce pompage complet de l'historique, le terminal se bloque, jusqu'à ce qu'il télécharge tout l'historique du serveur disponible.
Si vous attendez ce téléchargement, le terminal raccroche et commence à fonctionner.

 
Roman:

Je suppose que les ralentissements et les plantages sont causés par une synchronisation incorrecte avec le serveur d'histoire.
C'est-à-dire, par exemple, le réglage des barres dans la fenêtre du terminal est de 100000, par exemple je demande 3000 barres du code
mais la synchronisation peut échouer et commence à se synchroniser avec tout l'historique disponible sur le serveur et à pomper tout l'historique du serveur.
En raison de ce pompage complet de l'historique, le terminal se bloque, jusqu'à ce qu'il télécharge tout l'historique du serveur disponible.
Si vous attendez ce téléchargement, le terminal raccroche et commence à fonctionner.

Le freinage ne commence que lorsque vous ouvrez la vitre. Vous fermez le gobelet et tout va bien. Mais vous ne pouvez pas travailler sans elle.
 

MT5 (build 2496) est TRÈS mauvais avec les graphiques personnalisés qui sont calculés par une formule définie par l'utilisateur.
Charge en permanence le CPU - charge du noyau à 100%.
Chargement permanent du disque - il suffit d'y écrire à partir de 3 Go et plus de données.
Terminal Hogs si un indicateur avec une mémoire tampon doit être dessiné dans la fenêtre principale (par exemple, Indicateurs/Trend/Moyenne mobile adaptative).


Étapes à suivre pour jouer :
MetaQuotes-Demo, compte Hedge.
Définir le nombre maximum de barres par graphique : 1000

Create Custom Symbol : Ctrl+U ==> Create Custom Symbol :
- Symbole : NZDUSD_AUDUSD
- Formule : NZDUSD-AUDUSD
- Allow negative prices : True

Résultat : le système commence à consommer jusqu'à 3 Go sur le disque.
Si j'ouvre un graphique avec un symbole personnalisé, la charge du noyau passe à 100 %.
Si j'ajoute un indicateur (par exemple, Indicateurs/Trend/Moyenne mobile adaptative) et que je change de TF, la fenêtre de données se met à convulser, et au bout de quelques secondes, le terminal ne répond plus du tout.


 
UPD. Des dizaines de milliers d'entrées monotones sont également écrites dans le journal :
.
QG      0       18:18:12.209    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
ML      0       18:18:12.209    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
LF      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
GO      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
CD      0       18:18:12.212    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
QN      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
FG      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
JL      0       18:18:12.215    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
FF      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
QO      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
MD      0       18:18:12.218    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
LN      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
GG      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
CL      0       18:18:12.221    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
NF      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated
IO      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: there is data from 2020.06.19 to 2020.06.19 (4294967295 M1 bars from 1970.01.01 00:00 to 2020.06.19 23:54)
ED      0       18:18:12.223    Synthetic Symbol        NZDUSD_AUDUSD: M1 bars processing finished
RN      0       18:18:12.227    Synthetic Symbol        NZDUSD_AUDUSD: M1 bar 2020.06.19 23:54 updated

La taille totale du journal est proche de 1 Go.


UPD... Si, après tous les calculs, le terminal est fermé et rouvert, les 3 à 8 Go de données calculées sont supprimés avec succès et les calculs recommencent, en utilisant un espace plus modeste - environ 500 Mo.
Si j'ouvre le graphique avec le symbole personnalisé après le redémarrage du terminal - il devient vide pour une raison quelconque, seulement 3 barres sur M1 (le comportement est quelque chose comme le drapeau "Autoriser les prix négatifs" désactivé).

 

Où dois-je envoyer mes rapports de bogue pour qu'ils soient traités par les développeurs ?

Depuis une certaine version, la compilation des classes de modèles appelant des fonctions statiques est interrompue. Exemple :

La classe Bar a été compilée avec MQL5 64 bits et 32 bits. Maintenant, il génère une erreur. construire 2485 05 juin 2020

class Foo {
public:
    static void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Bar {
public:
    Bar() {
        T::Start();
    }
};

class Foz {
public:
    Foz() {
    }

    void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Baz {
public:
    Baz() {
        T t;
        t.Start();                                                                                                                                                                                          
    }
};

void OnStart() {
    Bar<Foo> var;
    Baz<Foz> vaz;
}

template_static_bug.mq5 : information: compiling 'template_static_bug.mq5'
template_static_bug.mq5(12,12) : error 256: 'Start' - undeclared identifier
Result: 1 errors, 0 warning
 
YanGillan:

Où dois-je envoyer mes rapports de bogue pour qu'ils soient traités par les développeurs ?
Depuis une certaine version, la compilation des classes de modèles qui appellent des fonctions statiques est interrompue. Exemple :
La classe Bar a été compilée avec MQL5 64 bits et 32 bits. Maintenant, il génère une erreur. construire 2485 05 Jun 2020.

Vous serez environ le 5ème utilisateur à vous plaindre de ce bug d'une manière ou d'une autre...

 
Sergey Dzyublik:

Vous serez à peu près le 5ème utilisateur à se plaindre de ce bug sous une forme ou une autre...

Oui, eh bien, que faire ? Je connais la solution de contournement via la classe de base, mais c'est une béquille. Et ce n'est pas une bonne idée de patcher tout le code.

Où puis-je télécharger les versions précédentes ? Je ne les ai pas trouvés chez mon courtier ou sur le site mt5.

 
YanGillan:

Oui, eh bien, que faire ? Je connais la solution de contournement par la classe de base, mais c'est une béquille. Et ce n'est pas une bonne idée de patcher l'ensemble du code.

Où puis-je télécharger les versions précédentes ? Je ne les ai pas trouvés sur le site du courtier et sur le site mt5.

 
YanGillan:

Je connais la solution de contournement par la classe de base, mais c'est une béquille. Et ce n'est pas une bonne idée de patcher l'ensemble du code.

Voulez-vous dire cette méthode ou une autre ?

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


class Foo {
public:
    static void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Bar {
public:
    Bar() {
        GetClassType<T>::type::Start();
    }
};

void OnStart() {
    Bar<Foo> var;
}
 
Sergey Dzyublik:

Faites-vous référence à cette méthode ou à une autre ?

Merci pour le lien vers les archives !

J'ai trouvé ce moyen. Mais bien sûr, c'est une terrible solution. Pour faire une classe de base, l'héritage et les pointeurs dans le code d'appel pour chaque cas.

Votre solution est bien meilleure, c'est tout à fait vivant avec !

class Base {
public:
    Base() {}
    virtual void Start() {};
};

class Foo : public Base {
public:
    static void Start() {
        Print("Hallo!");
    }
};

template<typename T>
class Bar {
    Base* funcs;
public:
    Bar() {
        funcs = new T();                                                                                                                                                                                    
        funcs.Start();
    }
    ~Bar() {
        delete funcs;
    }
};

void OnStart() {
    Bar<Foo> var;
}
Raison: