Fehler, Irrtümer, Fragen - Seite 548

 
ivandurak:

Gute Nacht. Ich fange gerade erst an, mir ein genaues Bild davon zu machen. Es scheint sich um einen eindeutigen Fehler zu handeln. Ich zitiere den Code unten, wenn ich auf einer Zeile Kommentar (es ist markiert) scheint es zu funktionieren, was das Problem ist - ich verstehe nicht. Ich habe in der Dokumentation nichts zu diesem Thema gefunden.

Sie haben das Array Raznica nicht zugeordnet. Er wird deklariert, aber es wird ihm kein Speicher zugewiesen, gleichzeitig ist er kein Indikatorpuffer (der Speicher für die Puffer wird automatisch zugewiesen).

Hier:

   SetIndexBuffer(0,BaseMaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MaForMaBuffer,INDICATOR_DATA);

teilen Sie dem Compiler mit, dass die Arrays BaseMaBuffer und MaForMaBuffer Indikatorpuffer sind. Die anderen Arrays sollten durch

ArrayResize()
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ivandurak:

Gute Nacht. Ich habe gerade angefangen, mich damit zu befassen. Es scheint sich um einen offensichtlichen Fehler zu handeln. Ich zitiere den Code unten, wenn ich eine Zeile unten kommentieren (es ist markiert) dann scheint es zu funktionieren - ich verstehe nicht, was das Problem ist. Diese Situation kann vermieden werden, indem eine explizite Größe für das Raznica[]-Array angegeben wird. Ich habe in der Dokumentation nichts zu diesem Thema gefunden.

Es gibt keinen Fehler. Sie sollten die Größe für dynamische Arrays mit der Option

int  ArrayResize(
   void  array[],              // массив, переданный по ссылке
   int   new_size,             // новый размер массива
   int   reserve_size=0        // резервное значение размера (избыточное)
   );

Die Funktion kann nur auf dynamische Arrays angewendet werden, aber Sie sollten bedenken, dass dynamische Arrays, die von der Funktion SetIndexBuffer() als Indikatorpuffer zugewiesen werden, nicht in der Größe verändert werden können. Bei Indikatorpuffern werden alle Größenänderungsoperationen vom ausführenden Subsystem des Terminals durchgeführt.


 
Ich hab's verstanden, danke für die Klugscheißerei. Eine weitere Frage: Was passiert mit den Daten, wenn die Größe eines Arrays geändert wird? Und auch das Ändern der Indizierungsrichtung wie bei Zeitreihen ist nur bei dynamischen Arrays möglich?
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
ivandurak:
Ich hab's verstanden, danke für die Klugscheißerei. Eine weitere Frage: Was passiert mit den Daten, wenn die Größe des Arrays geändert wird? Und ist es möglich, eine Indizierungsrichtung wie in Zeitreihen nur bei einem dynamischen Array zu ändern?

Die Daten bleiben erhalten, wenn Sie sie reduzieren und dann wiederherstellen, ist das Ergebnis ungewiss (undefiniert).

Durch die Indizierungsrichtung ändert sich nur die Indexreferenz, das Array wird in dieselbe Richtung verteilt.

Das heißt, die Daten können nicht durch Neupartitionierung des Arrays verschoben werden.

 

Dies wurde bereits gemeldet, aber der Tester setzt den benutzerdefinierten Ersteinzahlungswert immer wieder um 10.000 $ zurück.

Der verfügbare Satz von Ausgangswerten ist ziemlich schief. Das würde mindestens 1000 Dollar mehr kosten.

523 bauen

Win XP

 
War es so, oder ist etwas gebrochen... Im Allgemeinen ist der freie Zugriff auf die geschützte Methode in Nicht-Nachfolgern erlaubt
#include <Arrays/List.mqh>
//---------------------------------------
class CBasket;

class CFruit: public CObject {
private:
        double _weight;
protected:
        double GetWeight(){return _weight;}     
public:
        CFruit(double weight){_weight = weight;};
        ~CFruit(){};
};
//---------------------------------------
class CBasket {
private:
        CList _fruits;
protected:
public:
        CBasket(){};
        ~CBasket(){};
        double Weight() {
                double weight = 0;
                for(CFruit* f = _fruits.GetFirstNode(); f != NULL; f = _fruits.GetNextNode()) {
                        weight += f.GetWeight(); //свободный вызов protected метода другого класса
                }
                return weight;
        }
        
        void Attach(CFruit* f) {
                _fruits.Add(f);
        }
};
//---------------------------------------
int OnInit() {
        CBasket* b = new CBasket();
        
        CFruit* f1 = new CFruit(3.5);
        CFruit* f2 = new CFruit(6.5);
        b.Attach(f1);
        b.Attach(f2);
        Print(b.Weight());
      
   return(0);
}
//---------------------------------------
 

Nach der Optimierung kann die Ergebnisdatei nicht mehr geöffnet werden,

Build 527 + Office 2007

Das Fehlerprotokoll enthält die folgenden Daten


XML-Fehler in "Tabelle"
Ursache: Fehlerhafter Wert.
Datei: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppe: Zelle
Tag: Daten
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

XML-Fehler in "Tabelle".
Ursache: Fehlerhafter Wert
Datei: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppe: Zelle
Tag: Daten
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

XML-Fehler in "Tabelle".
Ursache: Fehlerhafter Wert
Datei: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppe: Zelle
Tag: Daten
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

XML-Fehler in "Tabelle".
Ursache: Fehlerhafter Wert
Datei: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppe: Zelle
Tag: Daten
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

XML-Fehler in "Tabelle".
Ursache: Fehlerhafter Wert
Datei: C:\Users\Dragon\Desktop\ReportOptimizer-957640.xml
Gruppe: Zelle
Tag: Daten
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

usw.

 

Ich glaube, Sie erhalten einen leeren Wert.

Sie können lesen

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

EMPTY_VALUE

Leerer Wert im Indikatorpuffer

DBL_MAX

DBL_MAX

Maximaler Wert, der durch den Typ double dargestellt werden kann

1.7976931348623158e+308

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Vigor:
War es so, oder ist etwas gebrochen... Auf jeden Fall ist der freie Zugriff auf die geschützte Methode in Nicht-Nachkommen erlaubt

Vielen Dank für den Hinweis, der Fehler ist behoben und wird in der nächsten Version behoben.
 
Karlson:

Ich glaube, Sie erhalten einen leeren Wert.

Sie können lesen

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

EMPTY_VALUE

Leerer Wert im Indikatorpuffer

DBL_MAX

DBL_MAX

Maximaler Wert, der durch den Typ double dargestellt werden kann

1.7976931348623158e+308

Und wie können leere Werte in die Datei gelangen? Im Tester-Fenster sind normale Optimierungsergebnisse zu sehen.