Fehler, Irrtümer, Fragen - Seite 1962

 
Andrey Khatimlianskii:

Wie kann das helfen?

Die Optimierung ist durchgelaufen, wir haben alle zu suchenden Parameter mit Wertebereichen aufgeschrieben.

Und dann führen wir einen einzelnen Test durch, lesen die Parameterliste und zeigen sie an: Parameter = Wert. In diesem Fall kennen wir den Wert nicht, da wir die Eingabevariable nicht mit ihrem Namen ansprechen können.

Sie machen den Eingabeparameter bool Optim. In OnInit geben Sie INIT_FAILED zurück, wenn Optim == true ist. Gleichzeitig schreiben Sie in OnTesterPass durch FrameInputs und ParameterGetRange (oder im Destruktor des globalen Klassenobjekts) das eigentliche SET von Optimization.

Dann setzen Sie Optim = false. Und nehmen Sie einen weiteren Parameter sinput int Range, setzen Sie ihn durch ParameterSetRange von Null auf Eins. Lesen der SET-Datei in OnTesterInit und Setzen der Werte aller Parameter aus der Datei in ParameterSetRange. Wenn Range == 0 ist, wird in OnInit INIT_FAILED zurückgegeben.

Das ist alles! Anstelle der Einzeloptimierung gibt es die imaginäre Optimierung, die ebenfalls schneller ist als die Einzeloptimierung.... Plus Lesen/Schreiben von Eingabeparametern.

 

Off-Topic-Frage, aber ich werde Sie fragen, ob es möglich ist, das MQL5-Handbuch mit zusätzlichen Beispielen für die Implementierung von Algorithmen mehr und klarer zu ergänzen

 
fxsaber:

Machen Sie den Eingabeparameter bool Optim. In OnInit geben Sie INIT_FAILED zurück, wenn Optim == true ist. Zur gleichen Zeit in OnTesterPass durch FrameInputs und ParameterGetRange (oder im Destruktor der globalen Klasse Objekt) schreiben Sie tatsächlich SET-Datei Optimierung.

Dann setzen Sie Optim = false. Und nehmen Sie einen weiteren Parameter sinput int Range, setzen Sie ihn durch ParameterSetRange von Null auf Eins. Lesen der SET-Datei in OnTesterInit und Setzen der Werte aller Parameter aus der Datei in ParameterSetRange. Wenn Range == 0 ist, wird in OnInit INIT_FAILED zurückgegeben.

Das ist alles! Anstelle der Einzeloptimierung gibt es die imaginäre Optimierung, die ebenfalls schneller ist als die Einzeloptimierung.... Plus Lesen/Schreiben von Eingabeparametern.

Vielen Dank für den detaillierten Algorithmus.

 
Kompilierzeit in 1643
'TesterBenchmark_Example.mq5'   TesterBenchmark_Example.mq5     1       1
'TesterBenchmark.mqh'   TesterBenchmark.mqh     1       1
0 error(s), 0 warning(s), compile time: 3113 msec               1       1

Kompilierzeit bei 1648

'TesterBenchmark_Example.mq5'   TesterBenchmark_Example.mq5     1       1
'TesterBenchmark.mqh'   TesterBenchmark.mqh     1       1
0 error(s), 0 warning(s), compile time: 219 msec                1       1

Es wurde etwas verändert!

 

Kompilierungsfehler

typedef void (*fn)( int );
struct A {
                void f() { return   ; } //(*)
        static  void f( int ) {}
};
void g( fn ) {}
void OnStart()
{
        g( A::f ); //error: 'f' - cannot resolve function address
}

Und wenn Sie die Zeile (*) durch

                int  f() { return 0; } //(*)
dann ist das in Ordnung. Was ist der Unterschied?

Es sieht aus wiehttps://www.mql5.com/ru/forum/1111/page1977#comment_5595772, hat aber einen anderen Fehlercode


Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2017.08.11
  • www.mql5.com
Форум алго-трейдеров MQL5
 

Fehler bei der Kompilierung

template<typename T>
void g( T ) {}
void f() {}
void OnStart()
{
        g( f ); //error: 'g' - cannot to apply function template
}

Ansonsten:


template<typename T>
void g( T ) {}
void f() {}
typedef void (*fn)();
void OnStart()
{
        fn ff = f;
        g( ff ); //нормально
}

Das ist in Ordnung. Welchen Unterschied macht das?
 
A100:

Fehler bei der Kompilierung

aber auf diese Weise:

normalerweise. Was ist der Unterschied?

Der Unterschied ist gewaltig. Wenn g(f) aufgerufen wird, hat der Compiler keine Ahnung, welchen Typ f hat, da nur die Vorlage vorgeschrieben ist. Wenn Sie die Vorlage überladen, gibt es kein Problem

typedef void (*fn)();

template<typename T>
void g( T Value ) { Print(typename(Value)); }
void f() {}

void g( fn Value ) { Print(typename(Value)); }
void OnStart()
{
        g( f ); // void(*fn)()
}
 
fxsaber:
Kompilierzeit: 1643.

Kompilierzeit bei 1648


Das ist ein cooler Tweak!

Meiner ist derselbe wie vorher, die Zusammenstellung ist nicht schneller!

 
Vitaly Muzichenko:

Ich habe es noch, die Kompilierung wird nicht beschleunigt.

Vielleicht nicht das verwenden, was in TesterBenchmark.mqh zu einer Verlangsamung geführt hat

 
fxsaber:

Der Unterschied ist gewaltig. Wenn g(f) aufgerufen wird, hat der Compiler keine Ahnung, welchen Typ f hat, da nur die Vorlage vorgeschrieben ist. Wenn Sie die Vorlage überladen, gibt es kein Problem

Wenn es einen großen Unterschied gibt, warum lässt sich C++ dann mit beiden Varianten gut kompilieren?