Erreurs, bugs, questions - page 2012

 
Kirill Belousov:

Bug.

L'erreur 4200 n'est pas générée lors de la création d'un objet dupliqué sur le graphique NON ACTUEL (qui donne sur le graphique actuel - [voir "graphique actuel" dans le journal]),

Nous avons également découvert que trouver un objet dans le tableau RECENT prend jusqu'à 500 fois plus de temps que de trouver l'objet actuel.

а :) parce qu'il s'avère que je ne suis pas le seul à avoir cette

L'objet n'est pas créé immédiatement à l'appel de la fonction. Une commande asynchrone est envoyée à la carte. Pour notre propre tableau, nous avons la possibilité d'effectuer une vérification préliminaire. Pour la carte de quelqu'un d'autre, cette possibilité n'existe pas - ou plutôt, elle existe, mais elle est très coûteuse.

Par conséquent, le code de retour "no errors" indique que ce tableau très étranger a été trouvé et que la commande de création d'objet a été placée avec succès dans sa file d'attente pour exécution.

 
fxsaber:

Vous avez dû le tester sur MT4, mais le build est plus faible là aussi.

MT5\1653\32\Win10 - mon code atteint la ligne //Résultat : faux

Si vous disposez également de 32 bits et d'un pointeur non valide, il s'agit d'une erreur aléatoire.

ServiceDesk écrit que : La fonction f est vide et l'appel est supprimé par l'optimiseur, ainsi que l'appel de l'opérateur de copie.

Mais si

        void f() { Print( __FUNCTION__ ); }

puis le résultat :

2017.09.26 14:03:55.853 Demo (GBPUSD,M15) A::f
2017.09.26 14:03:55.853 Demo (GBPUSD,M15) false
essentiellement aucun changement

 
A100:

Si vous avez également 32 bit - alors une erreur aléatoire à tous les

Non, j'utilisais Win7x64.

Le ServiceDesk dit ça : La fonction f est vide et l'appel est coupé par l'optimiseur, tout comme l'appel de l'opérateur de copie de l'étape 1.

Mais si

alors rien ne change

J'ai rencontré des SD qui répondent rapidement sans vérifier. Et pour 90% des applications, c'est probablement correct, car la plupart des applications ne sont probablement pas dues à des bugs, mais à l'ignorance. Regardez de plus près - cela fonctionne.

 

Un bug du site avec des liens.

Si un message du forum a été déplacé par un modérateur vers un autre fil de discussion, dans la recherche de profil "Tous les messages", ce message est lié à l'ancien emplacement. Par conséquent, il n'est pas possible d'y naviguer.

 
A100:

MT5\1653\32\Win10 - J'arrive à la ligne //Résultat : false

Si vous disposez également de 32 bits et d'un pointeur non valide, il s'agit d'une erreur aléatoire.

ServiceDesk écrit que : La fonction f est vide et l'appel est supprimé par l'optimiseur, ainsi que l'appel de l'opérateur de copie.

Mais si

puis le résultat :

2017.09.26 14:03:55.853 Demo (GBPUSD,M15) A::f
2017.09.26 14:03:55.853 Demo (GBPUSD,M15) faux
essentiellement aucun changement

J'ajouterai que la fonction f ne s'adresse pas aux champs des objets, donc un pointeur d'objet (this) n'est pas nécessaire pour la fonction f.
L'optimiseur supprime le déréférencement inutile du handle (rappelez-vous, en MQL, le handle est un pointeur) vers le pointeur d'objet puisqu'il (le pointeur) n'est pas utilisé à l'intérieur de f

 
Ilyas:

J'ajoute que la fonction f ne contient pas d'adressage vers les champs de l'objet, donc elle n'a pas besoin de pointeur vers l'objet (this) pour la fonction f.
L'optimiseur supprime le déréférencement inutile du handle (rappelons qu'en MQL le pointeur est un handle) du pointeur d'objet, puisqu'il (le pointeur) n'est pas utilisé à l'intérieur de f

En clair, travailler avec f comme avec statique. Mais comment expliquer que l'un fonctionne et que l'autre s'interrompt?

 
En fait, ce serait au moins pratique.
input string Value = _MarketWatch; // Выпадающий список (а-ля enum) символов из Обзора рынка

Forum sur le trading, les systèmes de trading automatisés et l'essai de stratégies de trading

Liste de symboles ENUM en tant qu'entrée (INPUT)

Martin Nohejl, 2017.09.26 13:01

Bonjour, je vais faire ce qui suit :

Je veux avoir un symbole comme paramètre d'entrée, donc je veux une variable d'entrée (enum) à partir de laquelle je vais choisir le bon symbole, comme ceci :

J'ai fait cela avec ce code :

enum ENUM_SYMBOL
   { 
    EURUSD=0, 
    GPBUSD=1, 
    USDCHF=2
   };

Cela fonctionne parfaitement pour moi. Mais je voudrais remplir l'enum de façon dynamique par la liste complète des symboles (SymbolsTotal(0) ;).

D'une manière ou d'une autre, probablement par code :

int a = SymbolsTotal(0);
for(int i=0; i!=a;i++){
....
}
 
fxsaber:

Il est clair que l'on travaille avec f comme avec statique. Mais comment expliquer que l'un soit exécuté et que l'autre soit interrompu?

Très probablement, vous commencez à déboguer (F5) et l'A100 compile (F7) d'abord et ensuite les graphiques.

Lors de la compilation pour le débogage, l'optimiseur ne supprime que le code explicitement inutilisé, toutes les autres optimisations ne sont pas effectuées.
 
Ilyas:
Le plus souvent, vous commencez le débogage (F5) et l'A100 compile d'abord (F7) puis le lance sur le graphique.

Lors de la compilation pour le débogage, l'optimiseur ne supprime que le code explicitement inutilisé, toutes les autres optimisations ne sont pas effectuées.

J'ai tout de suite tenu compte de cette caractéristique. J'ai maintenant vérifié deux fois.

Version release:

Test (EURUSD,H1)        invalid pointer access in 'Test.mq5' (9,11)
 
fxsaber:

J'ai tout de suite tenu compte de cette caractéristique. J'ai maintenant vérifié deux fois.

Version de sortie:

Oui, en effet, il y a une différence pour amener un code 32 bits et 64 bits à un même comportement.
Raison: