Erreurs, bugs, questions - page 439

 
Aidez-nous, je suis en train de créer un EA dans l'assistant de MEditor5, de le compiler, de le mettre sur un graphique et il (l'EA) se plante, c'est-à-dire que l'icône apparaît et disparaît.
 
cokfx:
Aide, plz faire un EA dans le Wizard dans MEditor5, compiler, mettre sur un graphique et il (l'EA) apparaît, c'est-à-dire, l'icône apparaît et disparaît.

Sur quel symbole et sur quel TF devons-nous placer la chouette ? Qu'est-ce que ça dit dans le journal ?
 
Renat:

Cela signifie qu'il n'y a pas d'erreur du testeur ou de l'environnement d'exécution MQL5, mais qu'il y a une erreur explicite du programmeur.

Hm. Le programmeur a détecté un comportement inattendu du programme, a détecté l'essence de ce comportement, l'a reproduit explicitement, a donné un exemple simple le portant à l'absurde(Sommeil avec des valeurs négatives) et le programmeur dit que c'est une erreur du programmeur :) Bien qu'une "erreur du programmeur" signifie, par exemple, une déclaration explicite selon laquelle la fonction Sleep du testeur ne fonctionne pas.

Il ressort des explications ci-dessus que les développeurs estiment qu'il est acceptable d'utiliser des valeurs négatives dans la fonction Sleep(). Bien que d'après la description de la fonction ("...elle retarde l'exécution de l'Expert Advisor ou du script en cours pour un intervalle particulier") nous ne pouvons pas supposer que l'intervalle de retard peut être calculé avec des nombres négatifs. En parlant d'erreurs, considérez ma déclaration selon laquelle le terminal aurait dû empêcher l'utilisation de valeurs négatives dans la fonction Sleep() en tant que telle.

 
Yedelkin:

Hm. Le programmeur a détecté un comportement inattendu du programme, a détecté l'essence de ce comportement, l'a reproduit explicitement, a donné un exemple simple le portant à l'absurde(Sommeil avec des valeurs négatives) et le programmeur dit que c'est une erreur du programmeur :) Bien qu'une "erreur du programmeur" signifie, par exemple, une déclaration explicite selon laquelle la fonction Sleep du testeur ne fonctionne pas.

Il ressort des explications ci-dessus que les développeurs estiment qu'il est acceptable d'utiliser des valeurs négatives dans la fonction Sleep(). Bien que d'après la description de la fonction ("...retarde l'exécution de l'Expert Advisor ou du script en cours pour un intervalle particulier") nous ne pouvons pas supposer que l'intervalle de retard peut être calculé avec des nombres négatifs. En parlant d'erreurs, considérez ma déclaration selon laquelle le terminal aurait dû empêcher l'utilisation de valeurs négatives dans la fonction Sleep() en tant que telle.

Et vous vous attendiez probablement à ce que vous sortiez du sommeil avant d'y entrer si le délai était négatif ?
 

Yedelkin, comment imaginez-vous que le compilateur contrôle les paramètres des fonctions ? Et il existe des dizaines de fonctions de ce type dont les valeurs des paramètres doivent être contrôlées.

Il y a deux choses ici : soit la vitesse de compilation, soit un contrôle paranoïaque total.

Nous avons choisi la première voie. Dans ce cas, le sous-système d'exécution n'ignore pas les paramètres erronés au moment de l'exécution en générant un code d'erreur, que nous pouvons obtenir à l'aide de la fonction GetLastError.

Документация по MQL5: Проверка состояния / GetLastError
Документация по MQL5: Проверка состояния / GetLastError
  • www.mql5.com
Проверка состояния / GetLastError - Документация по MQL5
 
Auriez-vous l'amabilité de calculer le résultat de votre valeur négative, de le rapporter à 32 bits d'int, puis de lire sur le débordement arithmétique et de trouver vos 17 jours.

Bienvenue dans le monde de la programmation réelle.
 
uncleVic:
Vous deviez vous attendre à sortir du sommeil avant d'y entrer avec une valeur négative ?

L'hypothèse sur les attentes est fausse.

Travailler avec des valeurs négatives n'était pas du tout prévu. Voir mon post ci-dessus :"d'après la description de la fonction ("...retarde l'exécution de l'EA ou du script en cours pendant un certain intervalle"), il est difficile de supposer que l'intervalle de retard peut être compté en nombres négatifs". Et il ne s'agit pas de ce à quoi je "pourrais m'attendre", mais du fait qu'en réalité, la fonction SLeep permet de travailler avec des valeurs négatives. Lorsque cela a été découvert - a envoyé un message. Si vous considérez qu'un tel fonctionnement de la fonction Sleep() est acceptable, il le restera.

 
Yedelkin:

mais qu'en fait, la fonction SLeep permet de travailler avec des valeurs négatives.

Que suggérez-vous ? Pour mettre fin au programme en cas d'urgence ?
 
Yedelkin:

L'hypothèse sur les attentes est fausse.

Il n'était pas du tout prévu qu'il fonctionne avec des valeurs négatives. Voir mon post ci-dessus :"d'après la description de la fonction ("...retarde l'exécution de l'EA ou du script en cours pendant un certain intervalle"), il est difficile de supposer que l'intervalle de retard peut être compté en nombres négatifs". Et il ne s'agit pas de ce à quoi je "pourrais m'attendre", mais du fait qu'en fait, la fonction SLeep permet de travailler avec des valeurs négatives. Lorsque cela a été découvert - a envoyé un message. Si vous considérez qu'un tel fonctionnement de Sleep() est acceptable, il le reste.

Bien entendu, la représentation interne est non signée.

Vous pouvez changer le type de paramètre en uint.

 
stringo:

Yedelkin, comment imaginez-vous que le compilateur contrôle les paramètres des fonctions ? Et il existe des dizaines de fonctions de ce type dont les valeurs des paramètres doivent être contrôlées.

Il y a deux choses ici : soit la vitesse de compilation, soit un contrôle paranoïaque total.

Nous avons choisi la première voie. Dans ce cas, le sous-système d'exécution ne passe pas les paramètres erronés au stade de l'exécution, générant un code d'erreur, que nous pouvons obtenir à l'aide de la fonction GetLastError.

Oui messieurs, je suis toujours de votre côté ! :) Et je ne connais en programmation qu'une petite partie de ce que vous savez (je ne suis guidé que par la référence MQL5). Mais si je vois des points qui ne sont pas clairs pour moi personnellement, je l'écris. J'essaie de donner un exemple concret des "points obscurs", si possible. Par conséquent, si vous pensez que "l'alarme est fausse", il s'avère que soit j'ai mal compris les documents de référence, soit les documents de référence ne reflètent pas toutes les informations nécessaires pour comprendre le moment. Dans ce cas, il me suffirait d'avoir une indication (avertissement) dans la section "Fonction Sleep" indiquant que (1) "le compilateur ne contrôle pas la valeur du paramètre de la fonction, la fonction peut donc fonctionner avec des valeurs négatives" et (2) "la fonction Sleep() est entièrement prise en charge par le testeur".

Je n'ai aucune idée de la façon dont le compilateur fonctionne. En partant du paradigme décrit du travail du compilateur, j'ai une envie : refléter dans les notes de dizaines de fonctions que les valeurs de leurs paramètres ne sont pas contrôlées par le terminal.