Erreurs, bugs, questions - page 2797

 
Nikolai Karetnikov:

L'intelligence IntelliSense continue de faire ses preuves ;))

c'est-à-dire qu'un indice est tout ce sur quoi vous pouvez compter.

Mon message concernait les structures imbriquées, aucune sélection IntelliSense n'apparaît à la troisième imbrication.
Ce qui est très ennuyeux, car les structures imbriquées étaient prévues pour être utilisées uniquement pour la sélection dans l'intellisense.
Et comme cela n'apparaît pas, je dois retourner dans la structure et regarder quels champs s'y trouvent. Pas bon.
J'aimerais qu'ils le réparent.

En ce qui concerne votre exemple, pour les fonctions MQL standard, les indications sont claires.
Si vous ne comprenez pas l'infobulle, placez le curseur sur la fonction et appuyez sur F1.

 
Mihail Matkovskij:

J'ai remplacé la fonction ObjectDeleteAll par la première dans votre exemple :

Puis dans l'indicateur.

Il s'est avéré facile d'utiliserObjectDeleteAll dans mon projet. Pour supprimer tous les objets, il m'a suffi de changer le préfixe 3 fois et d'appeler ObjectDeleteAll 3 fois. Le graphique est donc clair. Le langage MQL5 présente de nombreuses subtilités. Mais en même temps, c'est une langue très bien pensée.

Merci à tous ceux qui m'ont aidé à résoudre ce problème !

C'est reparti :

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift]))
      listOfTrendLines.Add(trend);
    else
      delete trend;

Un trou potentiel de fuite. Regardez ce que la méthode Add() renvoie

(Je sais que c'est un test, je sais que c'est bien de vérifier, mais si vous vérifiez le résultat de la création, pourquoi ne pas vérifier le résultat de l'addition ? Discipliné pour l'avenir)
 
Artyom Trishkin:

Vous l'avez encore une fois :

Un trou potentiel de fuite. Regardez ce que la méthode Add() renvoie

(Je comprends que c'est un test, je comprends que c'est suffisant pour vérifier, mais si je vérifie le résultat de la création, pourquoi ne pas vérifier le résultat de l'addition ? Discipline pour l'avenir)

Fais ça :

    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift])) {
      if(!listOfTrendLines.Add(trend))
        delete trend;
    }
    else
      delete trend;

C'est tout. Maintenant il n'y a plus de trou ?

Il s'agit en fait d'un programme de test et il a fait son travail. Je n'ai besoin de rien d'autre. Si cela fonctionnait, l'approche et le concept seraient différents. Les messages d'erreur partent de chaque point critique avec indication de la ligne (__LINE__) et du nom de la fonction (__FUNCTION__) ... Donc, parfois, je n'ai pas besoin d'utiliser le débogage non plus. Je regarde juste, nom du module, numéro de ligne, nom de la fonction...

 

Bonjour à tous ! Le problème est le suivant...

Après la mise à jour, le raccourci du terminal MT5 a disparu, tant sur le bureau que dans le dossier racine. Je l'ai réinstallé. Après avoir redémarré mon PC, l'histoire s'est répétée. Quel est le problème ? Quelqu'un a-t-il eu des problèmes avec cela ?

 
Artyom Trishkin:

Vous l'avez encore une fois :

Un trou potentiel de fuite. Regardez ce que la méthode Add() renvoie

(Je sais que c'est un test, je comprends que c'est suffisant pour vérifier, mais si vous vérifiez le résultat de la création, pourquoi ne pas vérifier le résultat de l'addition ? Discipline pour l'avenir)

Et dans quels cas listOfTrendLines.Add peut échouer ? Je ne les connais pas, c'est tout. Bien que j'adhère à ce principe, où "il n'y a pas de contrôles inutiles" (c). Mais hypothétiquement, nous pouvons supposer qu'il peut s'agir de paranoïa. Ok, la méthode Create d'une classe d'objets graphiques peut échouer. Mais cela fonctionne toujours correctement si le code est écrit correctement et si le programme donne des noms normaux aux objets. Mais disons qu'il peut y avoir des défauts dans son utilisation... Mais comment la méthode Add peut-elle retourner un faux objet dans des conditions normales. Ou la fonction ArrayResize (qui, soit dit en passant, est utilisée dans cette méthode), comment peut-elle retourner un résultat différent de new_size. A moins qu'il n'y ait pas assez de mémoire... :) Mais où avez-vous vu des appareils modernes présentant un déficit de mémoire aussi important ? :)

 
Mihail Matkovskij:

Dans quels cas listOfTrendLines.Add peut-il échouer ? Je n'en suis pas conscient. Bien que j'adhère au principe selon lequel "il n'y a pas de contrôles inutiles" (c). Mais hypothétiquement, nous pouvons supposer qu'il peut s'agir de paranoïa. Ok, la méthode Create d'une classe d'objets graphiques peut échouer. Mais cela fonctionne toujours correctement si le code est écrit correctement et si le programme donne des noms normaux aux objets. Mais disons qu'il peut y avoir des défauts dans son utilisation... Mais comment la méthode Add peut-elle retourner un faux objet dans des conditions normales. Ou la fonction ArrayResize (qui, soit dit en passant, est utilisée dans cette méthode), comment peut-elle retourner un résultat différent de new_size. A moins qu'il n'y ait pas assez de mémoire... :) Mais où avez-vous vu un système moderne avec un déficit de mémoire ? :)

Vps habituellement.
P.s. Je pense que tu es injuste envers Alexei car c'est lui qui a donné le premier et le bon conseil et de toute façon il t'a aidé.
 
Mihail Matkovskij:

J'ai remplacé la fonction ObjectDeleteAll par la première dans votre exemple :

Puis dans l'indicateur.

Il s'est avéré facile d'utiliserObjectDeleteAll dans mon projet. Pour supprimer tous les objets, il m'a suffi de changer le préfixe 3 fois et d'appeler ObjectDeleteAll 3 fois. Le graphique est donc clair. Le langage MQL5 présente de nombreuses subtilités. Mais en même temps, c'est une langue très bien pensée.

Merci à tous ceux qui m'ont aidé à résoudre ce problème !

Je me demande si vous avez consulté la documentation ou si vous avez simplement repris la description de la fonction dans mon message.

Je soupçonne donc que vous n'avez que des objets graphiques qui ont une tendance. Si oui, pourquoi avez-vous besoin d'un préfixe ? Il existe également une suppression par type d'objet

int  ObjectsDeleteAll(
   long  chart_id,            // идентификатор графика
   int   sub_window=-1,       // индекс окна
   int   type=-1              // тип объекта для удаления
   );

Par conséquent, vous n'avez pas à changer quoi que ce soit dans le projet, mais juste à écrire

ObjectsDeleteAll(0, 0, OBJ_TREND);
)))))))))))))
 
Aleksei Beliakov:
Vps habituellement.
P.s. Il me semble que vous avez traité Alexei de manière injuste, après tout, c'est lui qui a donné le premier et le bon conseil, et de toute façon, il vous a aidé.

Où est l'injustice dans tout cela, je suis gêné de le demander... ? Je pense que je suis bien avec Alexei. Vous êtes de sa famille ?

 
Alexey Viktorov:

Je me demande si vous avez regardé la documentation ou si vous avez simplement pris la description de la fonction dans mon message.

Je soupçonne que vous n'avez que des objets graphiques qui ont une tendance. Si oui, pourquoi avez-vous besoin d'un préfixe ? Il existe également une suppression par type d'objet

de sorte que vous n'avez pas à changer quoi que ce soit dans le projet.

)))))))))))))

C'est juste un cas particulier. Le préfixe est général et universel. De plus, la suppression de toutes les lignes de tendance affectera également les objets qui n'appartiennent pas au programme.

 
Alexey Viktorov:

Je me demande si vous avez regardé la documentation ou si vous avez simplement pris la description de la fonction dans mon message.

Je soupçonne que vous n'avez que des objets graphiques qui ont une tendance. Si oui, pourquoi avez-vous besoin d'un préfixe ? Il existe également une suppression par type d'objet

donc vous n'aurez pas à changer quoi que ce soit dans le projet, juste à écrire

)))))))))))))

Bien sûr, je regardais la documentation. Et oui, tout est possible ! Mais j'ai fait ça... Et si ça ne marche pas ou si ça gêne... ?

Et dans le projet, c'est plus compliqué que ça. Comme je l'ai dit plus haut...