Fehler, Irrtümer, Fragen - Seite 2796

 
Mihail Matkovskij:

Hast du in diesem Forum nichts anderes zu tun, Alexey, als meine Beiträge so zu verdrehen, dass sie wie Forderungen an die Entwickler in meinem Namen aussehen...? Ich frage mich, was der Grund für diese seltsame "Begeisterung" Ihrerseits war? Du würdest lieber Neulingen bei ihren Fragen in den entsprechenden Threads helfen, als hier Unsinn zu machen...!

Dennoch haben Sie eindeutig "Fehler" geschrieben. Dies deutet auf einen gemeldeten Fehler in der Plattform hin, nicht darauf, dass Sie die Dokumentation nicht zu Ende gelesen haben.

 
Artyom Trishkin:

Dennoch haben Sie eindeutig "Fehler" geschrieben. Dies deutet auf einen gemeldeten Fehler in der Plattform hin, nicht darauf, dass Sie die Dokumentation nicht zu Ende gelesen haben.

Nun, ja, das habe ich. Ich habe den Hinweis in der Beschreibung der ObjectDelete-Funktion gelesen, dachte aber nicht, dass dies das Problem ist... Wer tut das nicht?...

Aber es dreht sich alles im Kreis. Um genau zu sein, dreht es sich im Kreis, dass ich es falsch geschrieben oder verwechselt habe... Aber aus irgendeinem Grund hat niemand ein Wort darüber verloren, wie man diesen Fehler beheben kann... Natürlich mit Ausnahme der vorgeschlagenen ObjectsDeleteAll-Funktion, für die ich das gesamte Projekt neu erstellen müsste, was ich am wenigsten möchte.

 
Mihail Matkovskij:

Ja, ich war verwirrt. Ich habe den Hinweis in der Beschreibung der ObjectDelete-Funktion gelesen, aber ich dachte nicht, dass dies das Problem ist... Wer tut das nicht?

Das kommt vor...

 

Mihail Matkovskij:

... Aus irgendeinem Grund hat niemand ein Wort darüber verloren, wie man diesen Fehler beheben kann... Natürlich mit Ausnahme der vorgeschlagenen ObjectsDeleteAll-Funktion, für die ich das gesamte Projekt neu erstellen müsste, was ich am wenigsten möchte.

Versuchen Sie, ein Präfix für die Namen von grafischen Objekten zu verwenden - es ist gängige Praxis, Ihre Objekte zu identifizieren. Verwenden Sie das Präfix, um nach Müll zu suchen und ihn gleichzeitig zu entfernen.

DasHinzufügen des Präfixes zu den Objektnamen erfordert eine erneute Bearbeitung des gesamten Projekts?

Schreiben Sie in einem prozeduralen Stil? Nun, es ist auch nicht so schwer, die Funktionen zur Erstellung von Objektnamen zu ändern.

 
Artyom Trishkin:

Versuchen Sie, ein Präfix für die Namen von grafischen Objekten zu verwenden - es ist gängige Praxis, Ihre Objekte zu identifizieren. Verwenden Sie das Präfix, um nach Müll zu suchen und ihn gleichzeitig zu entfernen.

Das Hinzufügen eines Präfixes zu den Objektnamen erfordert eine erneute Bearbeitung des gesamten Projekts?

Ok, wenn es keine anderen Möglichkeiten gibt, werde ich es versuchen.

Artyom Trishkin:

Schreiben Sie in einem prozeduralen Stil? Es ist nicht so schwer, die Funktion zu ändern, die Objektnamen erzeugt.

Eine Sisyphusarbeit? :)


Vielen Dank an Rashid Umarov für seine Hilfe bei der Suche nach der Ursache für meinen Indikatorfehler!
 
Mihail Matkovskij:

Hast du in diesem Forum nichts anderes zu tun, Alexey, als meine Beiträge so zu verdrehen, dass sie wie Forderungen an die Entwickler in meinem Namen aussehen...? Ich frage mich, woher dieser seltsame "Enthusiasmus" Ihrerseits kommt? Du würdest lieber Neulingen bei ihren Fragen in den entsprechenden Threads helfen, als hier Unsinn zu machen...!

Das ist es, was ich versuche, Ihnen zu helfen. Ich versuche, Ihnen zu helfen und zu erklären, was Sie falsch verstehen. Versuchen Sie eine andere Option zum Löschen von grafischen Objekten und alles wird gut. Und alle Fehler, von denen Sie sprachen, werden verschwinden. Sie brauchen Ihre Worte nicht zu verdrehen, und ich werde Sie zitieren.

 
Alexey Viktorov:

Das ist es, was ich versuche, Ihnen zu helfen. Ich erkläre Ihnen, was Sie falsch verstanden haben. Versuchen Sie eine andere Option , um die grafischen Objekte zu entfernen, und alles wird gut sein. Und alle Fehler, von denen Sie sprachen, werden verschwinden. Es gibt keinen Grund, Ihre Worte zu verdrehen, Sie haben es gesagt, ich habe es zitiert.

Ich versuche, Ihnen zu helfen und gleichzeitig grundlos zu beschuldigen, vergessen Sie nicht hinzuzufügen. Ich habe gefragt, woher dieser manische Enthusiasmus kommt, aber aus irgendeinem Grund haben Sie mir nicht geantwortet! Warum weichst du der Antwort aus, Alexey?

 
Mihail Matkovskij:

Ich versuche, Ihnen zu helfen, und gleichzeitig beschuldige ich Sie ohne Umschweife, vergessen Sie nicht hinzuzufügen. Ich habe gefragt, was diese manische Begeisterung ausgelöst hat, aber aus irgendeinem Grund haben Sie mir nicht geantwortet! Warum weichen Sie einer Antwort aus, Alexey?

Du hättest schon vor langer Zeit die Klappe halten sollen, dann hätte ich nicht weitergemacht.

Hier ist mein offener Versuch zu helfen, ohne jegliche Andeutung von Anschuldigungen.

Dies ist das Forum für Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien

Fehler, Irrtümer, Fragen

Alexey Viktorov, 2020.07.11 17:12

Wie kann es sein, dass die Schleife länger dauert als die Zeit, die für die Ausführung von OnDeinit benötigt wird?

Schließlich haben alle Objekte in Ihrem Beispiel das Präfix "trend", warum sollten Sie es nicht verwenden und die Schleife ablehnen?

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

Wie lautet die Antwort? Lesen Sie Ihre Antworten.
 
Alexey Viktorov:

Du hättest schon lange die Klappe gehalten und ich hätte nicht weitergemacht.

А... Das ist der Grund für die Anschuldigungen gegen mich! Ich verstehe... :)

Alexey Viktorov:
Wie lautet Ihre Antwort? Lesen Sie Ihre Antworten.

Dort ist alles in Ordnung. Nur habe ich mich anfangs geweigert, diese Funktion zu nutzen. Und das muss Ihnen peinlich gewesen sein. Nun, dann tut es mir leid... :)

 

Ersetzen Sie die Funktion ObjectDeleteAll zuerst in Ihrem Beispiel:

//+------------------------------------------------------------------+
//|                                           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);
    else
      delete trend;
  }
  return(rates_total);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
  
  ObjectsDeleteAll(0, "trend", 0, OBJ_TREND);
  
  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;
  }
}
//+------------------------------------------------------------------+

Dann in den Indikator.

Artyom Trishkin:

Das Hinzufügen eines Präfixes zu den Objektnamen erfordert eine erneute Bearbeitung des gesamten Projekts?

Es stellte sich heraus, dass die Verwendung vonObjectDeleteAll in meinem Projekt einfach war. Um alle Objekte zu löschen, musste ich nur das Präfix dreimal ändern und ObjectDeleteAll dreimal aufrufen. Das Schaubild ist daher eindeutig. Die Sprache MQL5 hat eine Menge Feinheiten. Aber gleichzeitig ist es eine sehr gut durchdachte Sprache.

Vielen Dank an alle, die mir bei der Lösung dieses Problems geholfen haben!