Was in aller Welt geht hier vor? - Seite 5

 
Andrey F. Zelinsky:

eine Variable global zu deklarieren und sie bei der Deklaration zu initialisieren, z.B. int kk=0;

dann in OnTick() unprint und Wert ändern, z.B. Print("kk=",kk); ++kk;

dann TF ändern - und das Ergebnis sehen.

es ist klar, dass die globale Variable ihren Wert behält, auch wenn die TF geändert wird - aber im Tester passiert nichts dergleichen.

 
Andrey Dik:

ist klar, dass die globale Variable ihren Wert behält, auch wenn die TF geändert wird - aber im Tester passiert nichts dergleichen.

Jetzt haben Sie die Antwort auf die Ursache der unterschiedlichen Ergebnisse gefunden.

Beim Optimieren werden die Parameter neu gewählt, d.h. der Expert Advisor wird mit anderen Einstellungen neu gestartet.

 
Andrey F. Zelinsky:

Jetzt haben Sie die Antwort auf den Unterschied in den Ergebnissen gefunden.

Glauben Sie, dass die globale EA-Variable ihren Wert aus früheren Optimierungsläufen beibehält und auf die nächsten Läufe übertragen wird?

 
Andrey F. Zelinsky:

Überprüfen Sie es, es ist einfacher zu überprüfen als zu raten.

Renat hat oben geschrieben, dass der Optimierer "wie ein Uhrwerk" funktioniert und dass der Grund dafür im Code liegt -- er hat mehrmals empfohlen, ein Unpriming durchzuführen -- ich nehme an, dass das niemand getan hat.

Haben Sie es selbst überprüft? Gibt es eindeutige Beispiele dafür, dass ein einzelner Lauf anders funktioniert als ein Teil der Optimierung?

zum beispiel erinnere ich mich, dass das entfernen eines handles im tester früher nicht funktionierte, es führte zu einem speicherüberlauf und das terminal stürzte zusammen mit dem system ab. vielleicht wurde dieses problem bereits gelöst, aber es gibt immer noch einige tücken bei der erstellung und entfernung von indikator-handles und es gibt unterschiede zwischen optimizer und einzelnen indikatorläufen. wie ich weiß, haben die entwickler sehr hart daran gearbeitet, den speicherverbrauch zu beschleunigen und zu minimieren, wo immer es möglich war.

 
Andrey Dik:

haben sie es selbst überprüft? gibt es klare beispiele, in welchen fällen ein einziger lauf anders funktioniert als im rahmen der optimierung?

In diesem Fall handelt es sich nicht um einen einzigen Lauf.

 
Andrey F. Zelinsky:

Überprüfen Sie die Initialisierung von global deklarierten Variablen.

Wenn die Initialisierung nicht in OnInit(), sondern in der Deklaration erfolgt und wenn ihre Werte im Code geändert werden.

  1. Ich habe es überprüft.
  2. Das ist es, was Variablen sind - sie können verändert werden.
  3. Korrigieren Sie mich, wenn ich falsch liege.
  • Wenn eine Variable definiert ist, wird für sie Speicherplatz reserviert.
  • Wenn er nicht initialisiert ist, kann alles darin gespeichert werden.
  • Was ist der Unterschied zwischen der Initialisierung mit Null oder der Zuweisung des Ergebnisses von Berechnungen an einer bestimmten Stelle?
  • Wenn Sie versuchen, eine nicht initialisierte Variable zu verwenden, wird der Compiler eine Warnung ausgeben.

Ein einfaches Beispiel:

int tst(int x)
{
   int y;
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);		// possible use of uninitialized variable 'y'
}

Obwohl.... Der Compiler erzeugt die Warnung aus irgendeinem Grund nicht, wenn Sie die Deklaration in den globalen Bereich (((

int y;

int tst(int x)
{
   if(x >= 0)  y = 1;
   else
   if(x < 0)   y = 0;
   return(y);           // никакого предупреждения уже нет...
}
'test.mq5'
code generated
0 errors, 0 warnings, 143 msec elapsed

Ich hatte etwas anderes erwartet...

 
Сергей Таболин:

  1. Ich habe es überprüft.
  2. Variablen sind einfach nur Variablen, sie können geändert werden.
  3. Korrigieren Sie mich, wenn ich falsch liege.
  • Wenn eine Variable deklariert wird, wird für sie Speicherplatz reserviert.
  • Wenn er nicht initialisiert ist, kann alles darin gespeichert werden.
  • Was ist der Unterschied zwischen der Initialisierung mit Null oder der Zuweisung des Ergebnisses von Berechnungen an einer bestimmten Stelle?
  • Wenn Sie versuchen, eine nicht initialisierte Variable zu verwenden, wird der Compiler eine Warnung ausgeben.

Ein einfaches Beispiel:

Obwohl.... Der Compiler erzeugt die Warnung aus irgendeinem Grund nicht, wenn Sie die Deklaration in den globalen Bereich (((

Ich hatte etwas anderes erwartet.

Die fünfte Seite ging weiter, aber es gab immer noch keinen mql5-Code... Auch bei den Tests bleibt ein Geheimnis im Dunkeln: Symbol(e), Zeitraum(e), Testeinstellungen.

 

Nun, eine Frage noch, bevor ich mit der Grundierung beginne.

Ich habe zum Beispiel die Ergebnisse aufgezeichnet:

optimizer - kaufen;verkaufen;verkaufen;kaufen;kaufen;verkaufen

tester - kaufen;verkaufen;verkaufen;kaufen;kaufen;verkaufen;kaufen;kaufen;verkaufen

Wie können die Daten über diese"zusätzlichen" Geschäfte dazu beitragen, zu verstehen, aus welcher Obergrenze sie stammen? Vielleicht sollten wir auch die Preise der vorherigen Barren aufschreiben, oder was sonst?

 
Vladimir Karputov:

Die fünfte Seite ging weiter, aber der mql5-Code war immer noch nicht da... Auch bei den Tests bleibt ein Geheimnis im Dunkeln: Symbol(e), Zeitraum(e), Testeinstellungen.

Willkommen zurück aus dem Urlaub ))))

Sie können alles hier sehen.

 
Сергей Таболин:

  1. Ich habe es überprüft.
  2. Variablen sind einfach nur Variablen, sie können geändert werden.
  3. Korrigieren Sie mich, wenn ich falsch liege.
  • Wenn eine Variable deklariert wird, wird für sie Speicherplatz reserviert.
  • Wenn er nicht initialisiert ist, kann alles darin gespeichert werden.
  • Was ist der Unterschied zwischen der Initialisierung mit Null oder der Zuweisung des Ergebnisses von Berechnungen an einer bestimmten Stelle?
  • Wenn Sie versuchen, eine nicht initialisierte Variable zu verwenden, wird der Compiler eine Warnung ausgeben.

Ein einfaches Beispiel:

Obwohl.... Der Compiler erzeugt die Warnung aus irgendeinem Grund nicht, wenn Sie die Deklaration in den globalen Bereich (((

Ich hatte etwas anderes erwartet...

Wenn 'x' vom Typ double ist, sind die angegebenen Beispiele grundlegend falsch und der Zustand von 'y' ist in beiden Fällen undefiniert

d.h. es ist möglich, dass irgendwo in den Tiefen der neuronalen Netze entweder spezielle doppelte Werte - inf-types, nan-types oder ähnliche Werte wie eps - auftauchen

Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Вещественные типы (или типы с плавающей точкой) представляют значения, имеющие дробную часть. В языке MQL5 есть два типа для чисел с плавающей точкой. Способ представления вещественных чисел в машинной памяти определен стандартом IEEE 754 и не зависит от платформ, операционных систем и языков программирования. Константы с плавающей точкой...