Erreurs, bugs, questions - page 1499

 
Ilyas:
Un avertissement sur l'absence d'utilisation réelle des variables locales et globales (type simple ou "complexe" sans constructeur) sera ajouté, mais la priorité de cette tâche est faible.
Compris, merci. Juste au cas où, je vais essayer d'attirer l'attention des développeurs ici.
 
Alexey Kozitsyn:
Une activation par PC. Le nombre de terminaux n'a pas d'importance.
Y a-t-il une confirmation quelque part ?
 
Vladimir Pastushak:
Y a-t-il une confirmation quelque part ?

L'Acheteur acquiert le droit d'activer le Produit autant de fois qu'indiqué par le Vendeur au moment de l'achat ou de la location du Produit. Par exemple, si 20 activations sont autorisées pour le produit au moment de l'achat, l'acheteur pourra l'installer sur 20 configurations matérielles différentes, même si le vendeur réduit ce nombre par la suite.

https://www.mql5.com/ru/market/rules

Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
Правила покупки торговых роботов, индикаторов, книг и журналов в MetaTrader Market
  • www.mql5.com
Общие положения и правила пользования сервисом Market
 
Ce poste réduit automatiquement la résolution de l'image jusqu'à 6 fois la taille (octets) de l'original. Pourquoi ?
 
Alexey Kozitsyn:
Slawa, bonjour, pouvez-vous commenter la bibliothèque (question ci-dessus) ?

Voici une solution.

long CChart::Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe)
  {
   m_chart_id=ChartOpen(symbol_name,timeframe);
   if(m_chart_id==0)
      m_chart_id=-1;
   return(m_chart_id);
  }
 
Slawa:

C'est comme ça qu'il faut faire

Oui, merci, c'est optimal. Pour la bibliothèque. Et l'erreur 4024 ?
 
Slawa:

C'est comme ça qu'il faut faire.

Quel est l'intérêt de faire ça ? La bibliothèque standard doit être utilisée non pas comme l'utilisateur le souhaite, mais en respectant strictement l'idéologie de sa structure.Alexey Kozitsyn l'utilise de manière incorrecte et c'est pourquoi il a beaucoup de bogues dans la sortie. Il vous suffit d'attacher le graphique à l'objet de la classe en utilisant la méthode Attach après avoir créé l'objet CCart. Cette méthode est surchargée et peut attacher à la fois le graphique actuel et le graphique requis. Votre modification de la méthode Open va supprimer la possibilité de travailler avec le graphique actuel.

Et la demande aux développeurs de la bibliothèque standard - s'il vous plaît faire une description de la structure de la bibliothèque. Beaucoup ne le comprennent pas et commencent à faire des erreurs, et vous les accompagnez, vous commencez à briser tout ce qui a été fait.

 
Alexey Kozitsyn:

Question sur la bibliothèque standard de MT4.

Fichier Chart.mqh

Je veux ouvrir le tableau. J'utilise la méthode Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe).

1. Si vous utilisez un symbole non disponible, la fonction ChartOpen() renverra l'erreur #4024 - erreur interne. Il s'agit sans doute d'une erreur interne, mais il existe un code d'erreur beaucoup plus précis - #4106 - un symbole inconnu. Peut-être devrions-nous modifier le code d'erreur renvoyé ? Puisque 4024 n'indique pas au développeur où chercher l'erreur.

2. En cas d'échec, ChartOpen() attribue la valeur 0 au champ m_chart_id, c'est-à-dire qu'il s'avère que nous commençons à travailler avec le graphique actuel, mais ce n'est pas correct, car nous n'avons pas réussi à ouvrir le graphique souhaité pour travailler. Par conséquent, si nous n'appelons pas la méthode Detach(), le graphique actuel sera simplement fermé après le travail. Je pense également que ce n'est pas la bonne approche. La fonction ChartOpen() devrait retourner -1 en cas d'erreur.

Avant de travailler avec un graphique, il doit être attaché à un objet de classe à l'aide de la méthode Attach ! !! Si vous ne voulez pas travailler avec le graphique actuel ( 0 ), mettez en place cette vérification et interdisez l'utilisation du graphique actuel dans votre travail.

Et qu'est-ce que cela signifie de travailler avec le graphique et de ne pas le fermer en utilisant la méthode Detach pour sortir ? Est-il vraiment difficile d'écrire une ligne dans le destructeur de vos classes ou dans OnDeinit ? Le travail avec des objets doit être strictement contrôlé, ce qui permet d'éviter les erreurs.

 
coderex:

Quel est l'intérêt de faire ça ? La bibliothèque standard doit être utilisée non pas comme le souhaite l'utilisateur, mais en respectant strictement l'idéologie de sa structure.Alexey Kozitsyn ne l'utilise pas correctement et c'est pourquoi il a beaucoup de bogues en sortie. Il vous suffit d'attacher le graphique à l'objet de la classe en utilisant la méthode Attach après avoir créé l'objet CCart. Cette méthode est surchargée et peut attacher à la fois le graphique actuel et le graphique requis. Votre modification de la méthode Open va supprimer la possibilité de travailler avec le graphique actuel.

Et la demande aux développeurs de la bibliothèque standard - s'il vous plaît faire une description de la structure de la bibliothèque. Beaucoup de gens ne le comprennent pas et commencent à faire des erreurs, et vous suivez leur exemple et commencez à briser tout ce que vous avez fait.

J'ai clairement écrit ci-dessus quel est l'intérêt de le faire. Si une erreur survient lors de l'ouverture du graphique (par exemple, si vous avez défini un symbole non valide), alors, par analogie avec la méthode Attach(void), la méthode Open() liera l'identifiant du graphique actuel à l'objet. Pourquoi devrait-elle le faire ? Si je veux travailler avec le graphique actuel, j'appelle la méthode Attach(void) { m_chart_id=ChartID() ; } et c'est tout. Mais ici, j'ai une situation manifestement erronée où, pour une raison quelconque, je commence à travailler avec la mauvaise chose. En général, c'est un problème avec la fonction ChartOpen() elle-même, mais puisqu'ils ne veulent pas la changer, laissez-les au moins la changer dans la bibliothèque.

Un autre argument. S'il vous plaît, pensez logiquement. Cette méthode s'appelle Open(). Cela implique que quelque chose de nouveau sera ouvert ! Et nous allons commencer à travailler avec ce nouvel élément. Mais ici, il semble que nous travaillons avec l'ancien. Je ne vois aucune logique. Et vous semblez utiliser cette inexactitude à vos propres fins.

Cette méthode est surchargée et peut lier à la fois le graphique actuel et le graphique requis. Et votre modification de la méthode Open va supprimer la possibilité de travailler avec le graphique actuel.

Qu'est-ce que ça va tuer ? Vous aurez toujours la méthode Attach(), elle continuera à faire ce qu'elle faisait. Comme vous l'avez dit, vérifiez l'ID de retour de la fonction Open() et si elle est inférieure à 0, appelez la méthode Attach(void). C'est tout. Je ne comprends pas pourquoi vous devez faire un tel gâchis, si vous pouvez simplement appeler la méthode Attach(void) et attacher le graphique actuel.

Peut-être que je ne vous comprends pas. Alors donnez-moi un exemple.

Veuillez également demander aux développeurs de la bibliothèque standard de faire une description de la structure de la bibliothèque. Beaucoup de gens ne le comprennent pas et commencent à faire des erreurs, et vous les suivez et commencez à briser tout ce que vous avez fait.

Quelle déclaration tapageuse... Ne pensez pas que vous êtes plus intelligent que les autres, il se peut que ce ne soit pas le cas.
 
coderex:

Avant de travailler avec un graphique, il doit être attaché à un objet de classe à l'aide de la méthode Attach ! !! Si vous ne voulez pas travailler avec le graphique actuel ( 0 ), mettez en place cette vérification et interdisez l'utilisation du graphique actuel dans votre travail.

Et qu'est-ce que cela signifie de travailler avec le graphique et de ne pas le fermer en utilisant la méthode Detach pour sortir ? Est-il vraiment difficile d'écrire une ligne dans le destructeur de vos classes ou dans OnDeinit ? Vous devez contrôler strictement le travail avec les objets, et vous éviterez ainsi les erreurs.

Je peux vous donner le même conseil. Avant de travailler avec un graphique, vous devez l'attacher à un objet de votre classe à l'aide de la méthode Attach(). Si vous voulez travailler avec le graphique actuel, utilisez la méthode Attach( void ). Si vous avez obtenu l'identifiant du graphique précédemment, utilisez la méthode Attach( chart ). Si vous voulez travailler avec un nouveau graphique, utilisez la méthode Open(). Utilisez cette méthode uniquement pour ouvrir un nouveau graphique et travailler avec lui.

Si vous voulez travailler avec le graphique, sans le fermer, vous devez oublier d'appeler la méthode Detach(). Avec l'erreur d'ouverture, le résultat est la fermeture du dossier de quelqu'un d'autre. Pas bon !

Ici, vous écrivez de façon intéressante. Si vous n'aimez pas quelque chose, faites un chèque ici, ajoutez-le là et vivons comme avant. Je peux écrire ma propre bibliothèque, je pense, tout comme vous. Pourquoi, alors que le travail a été fait pour nous ? Améliorons ce que nous avons au lieu d'inventer des béquilles. C'est une bonne chose que les développeurs aient été prompts à m'entendre et à apporter les changements nécessaires.