Erreurs, bugs, questions - page 2798

 
Artyom Trishkin:

Ce n'est qu'un cas particulier. Le préfixe est général et universel. Alors que la suppression de toutes les lignes de tendance affectera également les objets n'appartenant pas au programme.

Agréé. chart_id : 0 (graphique actuel). Cela signifie que cela n'affectera que ce graphique. Et s'il y aura d'autres programmes, vous pouvez ajouter ID à chaque nom d'objet et appelerObjectsDeleteAllavec un préfixe approprié et la fonction ne confondra rien. C'est pourquoi j'ai dit dans les messages ci-dessus que la dénomination des objets est compliquée et que je devais réfléchir avant d'utiliser cette fonction. Mais Alexey s'est offusqué de moi, qui suis aussi son ami... En vain !

 
Mihail Matkovskij:

Pourquoi ? chart_id : 0 (graphique actuel). Ça veut dire seulement sur ce tableau. Et s'il y aura d'autres programmes, il existe aussi une notion d'identification. S'il est ajouté à chaque nom d'objet, la fonction ObjectsDeleteAll ne confondra rien. C'est pourquoi j'ai dit dans mes posts ci-dessus que le nommage des objets est compliqué et que j'ai dû y réfléchir avant d'utiliser cette fonction. Mais Alexey s'est offusqué de moi, qui suis aussi son ami... En vain !

Utilisez votre cerveau avant de répondre :)

L'ID inscrit dans le nom de l'objet est une sorte de préfixe, qui permet d'identifier et de retirer les objets du programme.

Et maintenant regardez le code, que j'ai écrit ma réponse à Alexei, et comment son code va supprimer seulement les objets dont vous avez besoin, qui n'auront PAS d'ID, et laissera sur le tableau des objets "étrangers" qui n'appartiennent pas au programme ?

Ma réponse à ce code était Alexey avec un tel message d'Alexey :

Par conséquent, vous ne devez rien changer dans le projet, mais simplement écrire

ObjectsDeleteAll(0, 0, OBJ_TREND);
)))))))))))))
 
Artyom Trishkin:

Utilisez votre cerveau avant de répondre :)

ID, écrit dans le nom de l'objet - c'est une sorte de préfixe, par l'identification duquel les objets du programme sont retirés.

Maintenant, regardez le code, que j'ai écrit ma réponse à Alexei, et comment son code va supprimer seulement les objets dont vous avez besoin, qui n'auront PAS d'ID écrit dedans, et laissera sur le tableau des objets "étrangers" qui n'appartiennent pas au programme ?

Ma réponse à Alexey était à ce code avec un tel message d'Alexey :

Édité. Vous avez répondu correctement. C'est moi qui ai un peu déconné. Je voulais dire autre chose.

 
Mihail Matkovskij:

Mais Alexei s'est offusqué de moi...

Vous ne comprenez pas... Je suis pour la justice. Il ne faut pas exposer ses défauts, et tout le monde en a, et moi aussi, pour les bugs du terminal.

Il y a un exemple récent : il y a quelque temps, j'étais heureux d'utiliser un tel gadget, un clic droit sur une variable, "Aller à la définition" et pour revenir à la même variable j'appuyais sur les touches du cliquet "Retour". Mais aujourd'hui, j'ai remarqué qu'il ne fonctionne plus. Quelle est la raison ? Hier, j'ai fait la mise à jour vers 2530... J'ai même utilisé un langage grossier, mais je me suis soudain souvenu que je devais aussi changer le plafond. J'ai ouvert ME 2474 et oops..................... et ça ne marche pas. Et si j'avais eu un SMS dans ma tête pour écrire tout ce que je pensais des développeurs ? De quoi ça aurait l'air ?

Je veux dire, ne vous précipitez pas avant d'écrire sur les bugs, cherchez les failles dans votre code.

 
Alexey Viktorov:

Vous ne le ferez pas... Je suis pour la justice. N'exposez pas vos défauts, et tout le monde en a et moi aussi, pour les bugs de la borne .

Qui l'expose ?https://www.mql5.com/ru/forum/1111/page2795#comment_17290368 . J'espère que vous l'avez lu attentivement cettefois-ci... ? Combien de fois dois-je te le dire avant que tu ne te mettes enfindans la tête et que tu arrêtes d'écrire des bêtises ici ?

 
Mihail Matkovskij:

Qui le met en place ?https://www.mql5.com/ru/forum/1111/page2795#comment_17290368 . J'espère que vous l'avez lu attentivement cettefois-ci... ? Combien de fois dois-je encore vous le dire pour que vouscompreniez enfin et que vous n'écriviez pas de bêtises ici !

Je suis pour l'équité.

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

Bugs, bugs, questions

Mihail Matkovskij, 2020.07.11 14:47

J'ai fait un code source où ce bug se produit :
//+------------------------------------------------------------------+
//|                                           DeleteChartObjects.mq5 |
//|                                      Copyright 2020, © Cyberdev. |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, © Cyberdev."
#property version   "1.00"
#property indicator_chart_window

#property indicator_plots 0

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

#include <ChartObjects\ChartObjectsLines.mqh>
#include <Arrays\ArrayObj.mqh>

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//--- input parameters
input int      nBars = 100000;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int customN_Bars = 0;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
CArrayObj listOfTrendLines;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit() {
//--- indicator buffers mapping
  int totalBars = iBars(NULL, PERIOD_CURRENT);
  customN_Bars = (nBars < totalBars) ? nBars : totalBars;
//---
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]
) {
  CChartObjectTrend * trend;
  int delta = rates_total - customN_Bars;
  int shift;
  int i;
  for(i = 0; i < customN_Bars; i++) {
    shift = delta + customN_Bars - i - 1;
    trend = new CChartObjectTrend();
    if(trend.Create(0, "trend"+(string)i, 0, time[shift], low[shift], time[shift], high[shift]))
      listOfTrendLines.Add(trend);
  }
  return(rates_total);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
  
  CChartObjectTrend * trend;
  
  int i = listOfTrendLines.Total() - 1;
  for(; i >= 0; i--) {
    trend = dynamic_cast <CChartObjectTrend *> (listOfTrendLines.At(i));
    
    if(CheckPointer(trend) == POINTER_INVALID)
      continue;
    
    delete trend;
  }
}
//+------------------------------------------------------------------+

Actions pour démontrer le bug.

Lancez l'indicateur sur le graphique.

2. Retirez l'indicateur du tableau.

3. appuyez sur Ctrl+B, puis appuyez sur le bouton "List all" dans la fenêtre et voyez les objets qui n'ont pas été supprimés.

Objets

J'en ai jusqu'à 294 sur 100000.

Si vous réduisez la valeur du paramètre d'entrée nBars, le bogue n'apparaît pas.


 
Alexey Viktorov:

Je suis pour l'équité.



Ce message ne précisait pas de quel bug il s'agissait, mon programme ou le bug du terminal. Je pensais que c'était un bug du terminal. Mais Rashid Umarov m'a tout expliqué et je l'ai compris. Tout était très clair pour moi. Il n'y avait pas de bogue terminal, je me suis trompé dans mes hypothèses. Vous me suivez avec une sorte d'enthousiasme maniaque. Je t'ai demandé quelle était la raison, tu me l'as dit :

Tu te serais tu depuis longtemps et je n'aurais pas continué.

C'est la raison pour laquelle...

Arrêtez ces bêtises ! Un adulte (j'espère)...

 
Mihail Matkovskij:

Donc ce message ne disait pas quel bug c'était, mon programme ou le bug du terminal. Je pensais que c'était un bug du terminal. Mais Rashid Umarov m'a tout expliqué et je l'ai compris. Tout était très clair pour moi. Il n'y avait pas de bogue terminal, je me suis trompé dans mes hypothèses. Vous me suivez avec une sorte d'enthousiasme maniaque. Je t'ai demandé quelle était la raison, tu me l'as dit :

C'est la raison pour laquelle...

Arrêtez ces bêtises ! Un adulte, j'espère...

Très bien. Dans un tumble, j'ai changé de chaussures. Je l'ai signalé comme un bug terminal et ............ vous vivez votre vie comme vous la connaissez.

 
Connexion du stockage

https://storage.mql5.io il n'est pas possible de se connecter.

 
Alexey Viktorov:

Ok. Tombé dans un tumbleweed. On l'a fait passer pour un bug terminal et ............ vous vivez votre vie.

C'est quoi ce bordel ? ! Oh, allez... Écrivez ce que vous voulez, selon votre imagination malade... Je ne ferai pas attention, parce que tu es sans espoir, Alexey...