Fehler, Irrtümer, Fragen - Seite 2488

 

Ich könnte natürlich falsch sein, aber es scheint vor 2 Monaten meine Vorlage funktionierte, und jetzt, wenn ich die CList destructor aufrufen, die Objekte nicht zerstört bleiben im Speicher, Code:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                *Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T *operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr = new T; Tptr  = value; mlist.Add(Tptr);       }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData>*data=new CDataBase<CData>;
   int i;
   for(i=0; i<5; i++)
     {
      data.AddValue(new CData(i,i*2.0));
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 0 : 0 , 0.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 1 : 1 , 2.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 2 : 2 , 4.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 3 : 3 , 6.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 4 : 4 , 8.0

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) CData

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 nicht gelöschte Objekte übrig

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 5 Objekte vom Typ CData links

2019.06.21 07:19:45.926 tstlist (EURUSD,H1) 280 Bytes an ausgelaufenem Speicher

MT5 Baujahr 2085
 
Igor Makanu:

Ich könnte natürlich falsch sein, aber es scheint wie vor 2 Monaten meine Vorlage funktionierte, aber jetzt, wenn ich die CList Destruktor aufrufen, die Objekte, die nicht zerstört wurden, bleiben im Speicher, der Code:

#property strict
#include <Arrays\List.mqh>
//+------------------------------------------------------------------+
class CData : public CObject
  {
public:
   int               x;
   double            y;
                     CData(){};
                     CData(int ival,double dval){x=ival;y=dval;}
  };
//+------------------------------------------------------------------+
template<typename T>class CDataBase
  {
private:
   CList            *mlist;
   T                Tptr;
public:
   void CDataBase()           { mlist=new CList;                                    }
   void ~CDataBase(void)      { delete mlist;                                       }
   int ArraySize(void)        { return(mlist.Total());                              }
   T operator[](int index)   { return(mlist.GetNodeAtIndex(index));                }
   void  AddValue (T &value)  { Tptr  = value; mlist.Add(Tptr);      }
   string TypeName()          { return(typename(T));                                }
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   CDataBase<CData*>* data=new CDataBase<CData*>;
   int i;
   for(i=0; i<5; i++)
     {
      CData* Tmp = new CData(i,i*2.0);
      data.AddValue(Tmp);
     }

   for(i=0; i<data.ArraySize(); i++)
     {
      Print(i," : ",data[i].x," , ",data[i].y);
     }
   Print(data.TypeName());
   delete data;
  }
//+------------------------------------------------------------------+
 
fxsaber:

Ja, du hast wahrscheinlich recht, dein Beispiel funktioniert richtig, irgendwo habe ich die Testbeispiele in meinen Quellen verwechselt

Ich danke Ihnen!

 
Вероника Сорокина:
Guten Tag. Die Situation ist wie folgt. Mein mql4 Expert Advisor/Skript/Indikator/was auch immer ich geschrieben habe, ist nicht an ein Chart-Fenster angehängt, ich möchte, dass es an ein Programm angehängt bleibt... wie, ich werde eine nützliche Sache schreiben und ich möchte nicht, dass es an neue offene Charts die ganze Zeit angehängt wird. So etwas wie ein Service (von MT5), aber Sie brauchen es auf MT4.

Dienstleistungen nutzen

 

Ist es möglich, den aktuellen Code von ME zu den Terminal-Favoriten hinzuzufügen?



Eigentlich würde ich gerne eine separate Registerkarte "Debugging" haben, auf der ich Code hinzufügen könnte, der gerade geschrieben und getestet wird.

Nun stellt sich heraus, dass es für ein bequemes Arbeiten notwendig ist, ein separates Terminal zu haben, in dem alles, was nicht die aktuellen Projekte betrifft, nicht vorhanden ist.

Dann geht das Debuggen viel schneller, weil es keine Verwechslungen mit dem restlichen Code im Terminal selbst gibt.

 

Liebe Entwickler. Bitte klären Sie, ob die automatische Neuaufteilung der Indikatorpuffer normal ist. Unter Neuaufteilung verstehe ich Folgendes: maximale Anzahl von Balken im Fenster, z. B. 5000. Puffergröße + rates_total werden auf 5000 zurückgesetzt, wenn sie 6439 erreichen. Dasselbe geschieht, wenn die maximale Anzahl der Takte im Fenster 10000 ist. Die Rückstellung erfolgt bei 11439.

Aus diesem Grund können die Indikatoren abstürzen und falsche Daten anzeigen.

Bauen Sie 2085. Ich habe dieses Verhalten seit etwa 2000 Builds beobachtet.

 
Alexey Kozitsyn:

Liebe Entwickler. Bitte klären Sie, ob die automatische Neuaufteilung der Indikatorpuffer normal ist. Unter Neuaufteilung verstehe ich Folgendes: maximale Anzahl von Balken im Fenster, z. B. 5000. Puffergröße + rates_total werden auf 5000 zurückgesetzt, wenn sie 6439 erreichen. Dasselbe geschieht, wenn die maximale Anzahl der Takte im Fenster 10000 beträgt. Die Rückstellung erfolgt bei 11439.

Aus diesem Grund können die Indikatoren abstürzen und falsche Daten anzeigen.

Bauen Sie 2085. Ich habe dieses Verhalten seit etwa 2000 Builds beobachtet.

Dieses Verhalten war ursprünglich in fünf.

Nennen Sie ein Beispiel für einen Indikatorabsturz aufgrund einer Neuzuweisung von Puffern

 
Slava:

Das war das Verhalten von Five von Anfang an.

Nennen Sie ein Beispiel für einen Indikatorabsturz aufgrund der Umverteilung von Puffern

Sie bestätigen also, dass das Terminal bei einer Ansammlung von 1439 Balken über der Norm die Puffergröße auf den Wert der maximalen Balken im Fenster zurücksetzen MUSS? Wenn JA, sollte dies in der Dokumentation erwähnt werden. Da es sich um ein unvorhergesehenes Verhalten handelt.

Zu dem Beispiel. Ich meine benutzerdefinierte Entwicklungen, die mit Strichzahlen arbeiten. D.h. ich habe mir die Taktnummer 6438 gemerkt und nach 2 Minuten (M1 TF) wurden die Puffer umverteilt und ich bin aus dem Array raus. Es ist nun klar, dass dies ein "Standard"-Verhalten ist. Bitte aktualisieren Sie die Dokumentation.

 

Fehler bei der Ausführung:

class A { public:
        virtual void f( int = 0 ) { Print( 1 ); }
};
class B : public A { public:
        virtual void f( int     ) { Print( 2 ); }
};
void OnStart()
{
        B b;
        b.f();
}

Ergebnis: 1

Erwartet: 2 oder (wie in C++) - Kompilierungsfehler

 
Alexey Kozitsyn:

Bitte aktualisieren Sie die Dokumentation.

Wo muss die Dokumentation aktualisiert werden?

Die eindeutige Kennzeichnung eines Taktes war schon immer die Taktzeit, nicht die Taktnummer.

Wenn jemand ChartSetSymbolPeriod für Ihr Diagramm aufruft, können Sie leicht eine Änderung der Anzahl der Balken feststellen. Überrascht?

Übrigens, es gibt einen Parameter rates_total in OnCalculate