Erreurs, bugs, questions - page 1733

 
A100:
L'erreur est justifiée - ces identifiants sont répertoriés comme ReadOnly dans l'aide (non combinés avec ChartSetInteger)https://www.mql5.com/ru/docs/constants/chartconstants/enum_chart_property.
Je l'ai déjà compris, mais merci quand même :)
 
coderex:
Cela aiderait-il ?

Lisez-le très attentivement. Le C++ est beaucoup plus difficile à comprendre que le MQL. Je ne comprends pas grand-chose à l'article. Et je ne comprends pas du tout le rapport avec ce qui est discuté ici.

Cependant, j'ai aimé cette fonctionnalité,

forwarding parfait

Avant de décrire ce qu'il est, revenons à la norme précédente et décrivons le problème existant. Supposons que nous ayons une fonction modèle foo prenant un paramètre et le transmettant à la fonction bar(T& quelque chose) :

template <typename T>
void foo(T& Object)
{
    bar(Object);
}

Donc, tout va bien. Mais qu'en est-il si nous voulons passer, disons, le nombre 100 comme argument à une fonction ?

Ne vous inquiétez pas, nous l'écrirons comme ça :

template <typename T>
void foo(const T& Object)
{
    bar(Object);//Ooops
}

Mais dans ce cas, il y aura une erreur de compilation car bar prend une référence non constante. Ainsi, nous devons fournir 2 barres de fonctions - constantes et non constantes. Et maintenant, imaginons qu'il n'y ait pas qu'un seul paramètre mais 2, 3 ou 5. Il s'avère que cette tâche est très difficile à mettre en œuvre, car nous avons (2^n - 1) fonctions surchargées où n est le nombre d'arguments de la fonction. Si vous pensez qu'un tel nombre de paramètres est un mauvais style et que personne n'écrit de cette façon, alors regardez std::bind, std::make_shared etc.


Voyons maintenant quelle solution la nouvelle norme nous apporte :

template <typename T>
void foo(T&& Object)
{
    bar(std::forward<T>(Object));
}

En utilisant le code ci-dessus, le problème du passage des paramètres est complètement résolu, on parle de passage parfait, car le type d'argument est préservé entre les appels à la fonction externe foo et à la fonction interne bar. Il n'est plus nécessaire de surcharger un tas de fonctions - les développeurs de code générique peuvent être satisfaits.


Cette solution est possible parce que si le paramètre du modèle est T&, le type passé s'enregistre lui-même, et std::forward est nécessaire parce que tout type nommé à l'intérieur de la fonction foo se transforme en lvalue et nous avons besoin du type original - c'est à cela que sert std::forward - il enregistre le type original et dépouille l'argument de son nom (résultant en T&&), ce qui permet de le passer à la fonction bar exacte plus tard.

"(2^n - 1) fonctions surchargées, où n est le nombre d'arguments de la fonction" - J'ai été confronté à un tel inconvénient dans MQL.
 
2016.10.15 09:48:01.820 MQL5    wrong type, loading of Test9 failed
Qu'est-ce que c'est ?
 
1455 - le débogage sur les données historiques (CTRL+F5) ne fonctionne pas. La fenêtre du testeur apparaît, la visualisation ne démarre pas.
 
fxsaber:
1455 - le débogage sur les données historiques (CTRL+F5) ne fonctionne pas. La fenêtre du testeur apparaît, la visualisation ne démarre pas.
C'est faux. De même, il n'y a pas de détails techniques ni de description de vos actions. Il s'agit d'une branche spécialisée où vous devez préparer et fournir des informations supplémentaires avant d'écrire sur un bogue prétendument découvert.
 
fxsaber:

Lisez-le très attentivement. Le C++ est beaucoup plus difficile à comprendre que le MQL. Je ne comprends pas grand-chose à l'article. Et je ne comprends pas du tout le rapport avec ce qui est discuté ici.

Cependant, j'ai aimé cette fonctionnalité,

J'ai rencontré "(2^n - 1) fonctions surchargées, où n est le nombre d'arguments de la fonction" - c'est un inconvénient dans MQL.

Il s'agit de comprendre rvalue / lvalue / prvalue / xvalue / gvalue, c'est-à-dire ce dont vous avez parlé pendant plusieurs pages :) D'après ce que je vois, MQ a suivi les normes C++, en prenant les éléments les plus précieux, selon eux, sans s'arrêter uniquement à rvalue / lvalue.

Je ne suis pas encore totalement conscient de ces concepts moi-même, bien que je les comprenne logiquement :)

À propos, le gestionnaire de mémoire de MT5 fonctionne de manière incompréhensible, si le programme utilise la mémoire au maximum. Je ne l'ai pas mesuré sur les petites tailles.

Par exemple, je possède 4 gigas de RAM, 2 cœurs, MT5 v1455 x64 sur une machine virtuelle.

Je charge la mémoire avec des objets et dans le gestionnaire des tâches, je vois que 1,5 gigaoctet de mémoire est utilisé par terminal et 1,5 gigaoctet par mémoire virtuelle.MQL_MEMORY_USED indique 400 Mo de mémoire utilisable. Avant le démarrage, il y avait environ 140 mb pour le terminal et 150 mb pour l'application virtuelle.

J'ai également remarqué que dès que l'utilisation de la mémoire dépasse 400 mb, le gestionnaire de mémoire peut échouer à la libérer complètement, bien que les objets soient effectivement supprimés. Et le comportement du débogueur est imprévisible - j'arrive à supprimer des objets, j'attends leur suppression complète et après cela, j'arrête le débogueur (par le bouton STOP dans le débogueur), il s'arrête, le gestionnaire MT5 n'a pas alloué de mémoire au système, c'est-à-dire qu'il y a encore 1,5 Go pour le terminal et 1,5 Go pour la mémoire virtuelle. МТ5 lui-même n'a pas terminé le processus de débogage, bien que ME montre que le débogage est terminé. Si la mémoire de l'objet est inférieure à 400 mb, tout va bien, sauf que la mémoire est libérée.

La mémoire n'est libérée qu'après avoir retiré la tâche terminale de la liste des tâches en cours.

 
Karputov Vladimir:
Ce n'est pas le cas. De même, il n'y a pas de détails techniques ni de description de vos actions. Il s'agit d'une branche spécialisée où vous devez préparer et fournir des informations supplémentaires avant d'écrire sur un bogue que vous auriez trouvé.

Les développeurs du Service Desk ont déjà mémorisé ma configuration plusieurs fois.

Je prends n'importe quel conseiller expert standard et j'appuie sur CTRL+F5 dans le MetaEditor. La fenêtre principale du testeur de stratégie s'ouvre avec les paramètres spécifiés dans le MetaEditor. Mais la visualisation ne démarre pas.

Le journal

2016.10.15 10:06:09     Tester  Leverage 1:100 set error
 
fxsaber:
Les développeurs du Service Desk se sont déjà souvenus de ma configuration à plusieurs reprises.

Tu n'as même pas réalisé de quoi je parlais.

Qu'avez-vous fait avant de commencer à déboguer l'histoire ? Avez-vous configuré MetaEditor (onglet "Outils" - "Paramètres" - "Débogage") ? Donnez une capture d'écran de MetaEditora (onglet "Tools" - "Settings" - "Debugging"), ce qui est écrit dans le Tester dans l'onglet "Log" ? Qu'est-ce qui est écrit dans le Viewer dans l'onglet "Log" ?

 
fxsaber:

Les développeurs du Service Desk ont déjà mémorisé ma configuration plusieurs fois.

Je prends n'importe quel conseiller expert standard et j'appuie sur CTRL+F5 dans le MetaEditor. La fenêtre principale du testeur de stratégie s'ouvre avec les paramètres spécifiés dans le MetaEditor. La visualisation ne démarre pas.

MACD Sample sera lancé normalement. Peut-être que quelque chose ne va pas dans les réglages ?
 
Karputov Vladimir:

Tu n'as même pas réalisé de quoi je parlais.

Qu'avez-vous fait avant de lancer le débogage sur l'historique ?

J'ouvre n'importe quel Expert Advisor et j'appuie sur CTRL+F5, démo le serveur des développeurs (même chose sur le robot).

Avez-vous configuré MetaEditor (onglet "Outils" - "Options" - "Débogage") ? Apportez une capture d'écran de MetaEditora (onglet "Outils" - "Paramètres" - "Débogage"),

Qu'est-ce qui est écrit dans le Strategy Tester dans l'onglet "Log" ?

2016.10.15 10:06:09     Tester  Leverage 1:100 set error
Qu'est-ce qui est écrit dans le Visualiseur dans l'onglet "Log" ?

La visionneuse de débogage ne démarre pas.

Les modifications apportées à l'épaule dans les réglages entraînent

2016.10.15 10:18:44     Tester  Leverage 1:1 set error
2016.10.15 10:18:37     Tester  Leverage 1:500 set error
2016.10.15 10:18:30     Tester  Leverage 1:50 set error
2016.10.15 10:18:13     Tester  Leverage 1:100 set error