Guten Tag, das MT5-Log zeigt folgende Meldung: 2020.05.21 05:49:44.364 Virtual Hosting failed to get list of virtual hosts (www.mql5.com:443 send request failed [12002])
Könnt ihr mir bitte sagen, was das bedeutet und was ich dagegen tun kann?
time of [Bench1()] = 1483377100000000
time of [Bench2()] = 1725035100000000
time of [Bench1()] = 1523441100000000
time of [Bench2()] = 1712777100000000
time of [Bench1()] = 1416779100000000
time of [Bench2()] = 1452093100000000
time of [Bench1()] = 1399366100000000
time of [Bench2()] = 1449939
Mein Debugger weigert sich, in einem meiner Projekte zu arbeiten. Außerdem ist sein Verhalten schwer vorhersehbar. Manchmal weigert er sich einfach, Haltepunkte einzugeben. Es weigert sich auch, einige Funktionen einzugeben. Zuerst dachte ich, der Grund dafür seien Aktualisierungen (vielleicht ging bei der Fehlersuche etwas schief). Aber bei anderen, einfacheren Programmen scheint alles zu funktionieren. Ich habe es aber nicht oft überprüft, weil ich an meinem Hauptprojekt arbeite. Es ist recht komplex und umfasst allein 15 Module meines eigenen Entwurfs (die Anzahl der Standardmodule habe ich nicht gezählt). Das Hauptmodul enthält bis zu 2000 Zeilen. Ich dachte, vielleicht liegt es an der Komplexität des Projekts... Außerdem verwende ich an einigen Stellen Makros für sich wiederholende Codeschnipsel. Außerdem verwende ich Standard-UI-Elemente, wie CAppDialog, CCheckGroup, CComboBox, CButton usw., die ich für die Funktionalität meines Programms umgeschrieben habe. Vielleicht funktioniert das Debugging wegen ihnen nicht... Die Methode CCheckGroup::itemCheckState(const string item), die ich eigens geschrieben habe, ist zum Beispiel nicht debuggingfähig. Die Methode findet das Element des Kontrollkästchens und prüft, ob es ausgewählt ist (sein Status):
Diese Art von Benutzeroberfläche habe ich am Ende erhalten:
Einige der UI-Elemente sind vorübergehend klassifiziert. Und hier ist ein Zweig, in dem ich beschrieben habe, wie ich die Show()- und Hide()-Methoden des CAppDialog-Elements überschrieben habe:https://www.mql5.com/ru/forum/338301 Der Compiler beschwerte sich in diesem Moment und ein kritischer Fehler trat auf.
Am Ende kompiliert das Projekt normal, der Compiler erzeugt keine Fehler. Aber das Debugging schlägt fehl und zeigt die Ausführung einiger Codefragmente, Funktionen, Methoden usw. einfach nicht an.
Soweit ich weiß, kann es dafür mehrere Gründe geben.
Komplizierter Code des Projekts, Verwendung von Makros
Komplizierter Code unter Verwendung von Standard-Benutzeroberflächenelementen wie CAppDialog, CCheckGroup, CComboBox, CButton (für die ich auch neue Methoden geschrieben und einige der bestehenden neu definiert habe)
Debugger-Fehler im Zusammenhang mit dem neuen Build (möglich, unwahrscheinlich).
Build- und Systeminformationen:
Wer hat ähnliche Probleme mit dem Debugger gehabt und was könnte die Ursache sein?
Es stellt sich heraus, dass die Methode gut funktioniert, aber der Debugger sieht sie aus irgendeinem Grund nicht mehr. Ohne die ordnungsgemäße Arbeit des Debuggers kann sich die Arbeit am Projekt lange Zeit verzögern. Ich möchte, dass die Entwickler diesem Fehler, der wahrscheinlich mit dem Debugger zusammenhängt, Aufmerksamkeit schenken.
Es stellt sich heraus, dass die Methode richtig funktioniert, aber der Debugger sieht sie aus irgendeinem Grund nicht mehr. Wenn der Debugger nicht richtig funktioniert, kann sich das Projekt lange Zeit verzögern. Ich möchte, dass die Entwickler diesem Fehler, der wahrscheinlich mit dem Debugger zusammenhängt, Aufmerksamkeit schenken.
Es ist eine Menge Text, ich habe ihn nicht ganz gelesen. Aber wenn etwas in der Debug-Version funktioniert und in der Release-Version nicht, oder umgekehrt, überprüfen Sie, ob alle Variablen und Felder, insbesondere in der Klasse/Struktur, initialisiert wurden.
inputint Range = 0;
double Res = 0;
#define GETCURRENTTICK GetCurrentTick1(Tick)
//#define GETCURRENTTICK GetCurrentTick2(Tick, !i)//#define GETCURRENTTICK GetCurrentTick3(Tick)voidOnTick()
{
MqlTick Tick;
for (int i = 0; i < 100; i++)
if (GETCURRENTTICK)
Res += Tick.bid;
}
doubleOnTester()
{
return(Res);
}
bool GetCurrentTick1( MqlTick &Tick )
{
return(SymbolInfoTick(_Symbol, Tick));
}
bool GetCurrentTick2( MqlTick &Tick, constbool NewTick = false )
{
staticMqlTick CurrentTick;
if (NewTick)
SymbolInfoTick(_Symbol, CurrentTick);
Tick = CurrentTick;
return(true);
}
bool GetCurrentTick3( MqlTick &Tick )
{
staticMqlTick _Tick; // Аналог Bid в MT4
_Tick.bid += _Point; // Хоть какой-то расход вычислительный ресурсов.
Tick = _Tick;
return(true);
}
#define GETCURRENTTICK GetCurrentTick1(Tick)
#define GETCURRENTTICK GetCurrentTick2(Tick, !i)
#define GETCURRENTTICK GetCurrentTick3(Tick)
2020.05.2114:19:52.450 Core 1 pass 0 returned result 693275970.165784in0:00:08.9252020.05.2114:19:59.980 Core 1 pass 1 returned result 693275970.165784in0:00:07.5292020.05.2114:20:07.370 Core 1 pass 2 returned result 693275970.165784in0:00:07.3902020.05.2114:20:14.694 Core 1 pass 3 returned result 693275970.165784in0:00:07.3232020.05.2114:20:21.688 Core 1 pass 4 returned result 693275970.165784in0:00:06.9942020.05.2114:20:29.114 Core 1 pass 5 returned result 693275970.165784in0:00:07.4252020.05.2114:20:36.133 Core 1 pass 6 returned result 693275970.165784in0:00:07.0192020.05.2114:20:43.557 Core 1 pass 7 returned result 693275970.165784in0:00:07.4242020.05.2114:20:49.580 Core 1 pass 8 returned result 693275970.165784in0:00:06.0222020.05.2114:20:57.273 Core 1 pass 9 returned result 693275970.165784in0:00:07.6932020.05.2114:21:03.993 Core 1 pass 10 returned result 693275970.165784in0:00:06.7192020.05.2114:21:03.993 Tester optimization finished, total passes 112020.05.2114:21:04.003 Statistics optimization done in1 minutes 22 seconds
2020.05.2114:21:04.003 Statistics shortest pass 0:00:06.022, longest pass 0:00:08.925, average pass 0:00:07.3142020.05.2114:21:04.003 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.2114:21:49.346 Core 1 pass 0 returned result 693275970.165784in0:00:03.0502020.05.2114:21:51.108 Core 1 pass 1 returned result 693275970.165784in0:00:01.7612020.05.2114:21:52.903 Core 1 pass 2 returned result 693275970.165784in0:00:01.7952020.05.2114:21:54.731 Core 1 pass 3 returned result 693275970.165784in0:00:01.8272020.05.2114:21:56.536 Core 1 pass 4 returned result 693275970.165784in0:00:01.8032020.05.2114:21:58.341 Core 1 pass 5 returned result 693275970.165784in0:00:01.8052020.05.2114:22:00.135 Core 1 pass 6 returned result 693275970.165784in0:00:01.7932020.05.2114:22:01.912 Core 1 pass 7 returned result 693275970.165784in0:00:01.7772020.05.2114:22:03.663 Core 1 pass 8 returned result 693275970.165784in0:00:01.7502020.05.2114:22:05.458 Core 1 pass 9 returned result 693275970.165784in0:00:01.7942020.05.2114:22:07.274 Core 1 pass 10 returned result 693275970.165784in0:00:01.8152020.05.2114:22:07.274 Tester optimization finished, total passes 112020.05.2114:22:07.284 Statistics optimization done in0 minutes 21 seconds
2020.05.2114:22:07.284 Statistics shortest pass 0:00:01.750, longest pass 0:00:03.050, average pass 0:00:01.9062020.05.2114:22:07.284 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2020.05.2114:23:00.873 Core 1 pass 0 returned result 661757660284.981689in0:00:02.8592020.05.2114:23:02.704 Core 1 pass 1 returned result 661757660284.981689in0:00:01.8302020.05.2114:23:04.488 Core 1 pass 2 returned result 661757660284.981689in0:00:01.7832020.05.2114:23:06.227 Core 1 pass 3 returned result 661757660284.981689in0:00:01.7372020.05.2114:23:07.778 Core 1 pass 4 returned result 661757660284.981689in0:00:01.5502020.05.2114:23:09.517 Core 1 pass 5 returned result 661757660284.981689in0:00:01.7382020.05.2114:23:11.288 Core 1 pass 6 returned result 661757660284.981689in0:00:01.7712020.05.2114:23:12.997 Core 1 pass 7 returned result 661757660284.981689in0:00:01.7082020.05.2114:23:14.815 Core 1 pass 8 returned result 661757660284.981689in0:00:01.8172020.05.2114:23:16.621 Core 1 pass 9 returned result 661757660284.981689in0:00:01.8052020.05.2114:23:18.313 Core 1 pass 10 returned result 661757660284.981689in0:00:01.6912020.05.2114:23:18.313 Tester optimization finished, total passes 112020.05.2114:23:18.323 Statistics optimization done in0 minutes 21 seconds
2020.05.2114:23:18.323 Statistics shortest pass 0:00:01.550, longest pass 0:00:02.859, average pass 0:00:01.8442020.05.2114:23:18.323 Statistics local 11 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
TheXpert: vielleicht ist die Methode inline, dann ist es nicht das Problem des Debuggers, sondern das des Compilers für den Debug-Modus
Genau, das Projekt war überfüllt mit Makros, sowohl mit meinen als auch mit denen von Standardmodulen. Vielleicht gelingt es dem Debugger deshalb nicht immer, Befehle in der *.ex5-Debug-Datei mit Zeilen in der *.mq5-Quelldatei und anderen Modulen abzugleichen...
fxsaber: Die SymbolInfo-Funktionen sind kostenlos.
Es handelt sich also um die Kosten der Funktion selbst, nicht um die Kosten der Übergabe der Zeichenkette als Wert und nicht als Referenz!
Ihre Version mit dem Cache ist eine gute Lösung, wenn die Ausführung dieser Funktion einen signifikanten Prozentsatz der Ausführungszeit des EAs in Anspruch nimmt (was ich nicht wirklich glaube)
Genau, das Projekt war überfüllt mit Makros, sowohl mit meinen als auch mit denen von Standardmodulen. Vielleicht gelingt es dem Debugger deshalb nicht immer, Befehle in der *.ex5-Debug-Datei mit Zeilen in der *.mq5-Quelldatei und anderen Modulen abzugleichen...
vielleicht ist Ihre Dateistruktur so komplex, dass der Debugger keinen Haltepunkt zuordnen kann, dann ist das das Problem des Debuggers.
Im Optimierer werden diese Funktionen zig-Milliarden Mal aufgerufen.
Außerdem ist Ihre Variante mit dem Cache eine gute Lösung, wenn die Ausführung dieser Funktion einen signifikanten Prozentsatz der Laufzeit eines EA einnimmt (was ich nicht wirklich glaube)
In einem bestimmten Stadium wird nicht nur der relative Teil der benötigten Zeit wichtig, sondern auch der absolute Teil.
Guten Tag, das MT5-Log zeigt folgende Meldung: 2020.05.21 05:49:44.364 Virtual Hosting failed to get list of virtual hosts (www.mql5.com:443 send request failed [12002])
Könnt ihr mir bitte sagen, was das bedeutet und was ich dagegen tun kann?
Ich danke Ihnen!
Mein Debugger weigert sich, in einem meiner Projekte zu arbeiten. Außerdem ist sein Verhalten schwer vorhersehbar. Manchmal weigert er sich einfach, Haltepunkte einzugeben. Es weigert sich auch, einige Funktionen einzugeben. Zuerst dachte ich, der Grund dafür seien Aktualisierungen (vielleicht ging bei der Fehlersuche etwas schief). Aber bei anderen, einfacheren Programmen scheint alles zu funktionieren. Ich habe es aber nicht oft überprüft, weil ich an meinem Hauptprojekt arbeite. Es ist recht komplex und umfasst allein 15 Module meines eigenen Entwurfs (die Anzahl der Standardmodule habe ich nicht gezählt). Das Hauptmodul enthält bis zu 2000 Zeilen. Ich dachte, vielleicht liegt es an der Komplexität des Projekts... Außerdem verwende ich an einigen Stellen Makros für sich wiederholende Codeschnipsel. Außerdem verwende ich Standard-UI-Elemente, wie CAppDialog, CCheckGroup, CComboBox, CButton usw., die ich für die Funktionalität meines Programms umgeschrieben habe. Vielleicht funktioniert das Debugging wegen ihnen nicht... Die Methode CCheckGroup::itemCheckState(const string item), die ich eigens geschrieben habe, ist zum Beispiel nicht debuggingfähig. Die Methode findet das Element des Kontrollkästchens und prüft, ob es ausgewählt ist (sein Status):
Diese Art von Benutzeroberfläche habe ich am Ende erhalten:
Einige der UI-Elemente sind vorübergehend klassifiziert. Und hier ist ein Zweig, in dem ich beschrieben habe, wie ich die Show()- und Hide()-Methoden des CAppDialog-Elements überschrieben habe:https://www.mql5.com/ru/forum/338301 Der Compiler beschwerte sich in diesem Moment und ein kritischer Fehler trat auf.
Am Ende kompiliert das Projekt normal, der Compiler erzeugt keine Fehler. Aber das Debugging schlägt fehl und zeigt die Ausführung einiger Codefragmente, Funktionen, Methoden usw. einfach nicht an.
Soweit ich weiß, kann es dafür mehrere Gründe geben.
Build- und Systeminformationen:
https://www.mql5.com/ru/forum/1111/page2746#comment_16481481
In der CCheckGroup::itemCheckState-Methode (in die der Debugger nicht hineingelangen kann) habe ich etwas wie das Folgende eingegeben:
Und erhielt die folgende Meldung:
2020.05.21 13:20:44.229 CCheckGroup::itemCheckState item: 39 state: 32
https://www.mql5.com/ru/forum/1111/page2746#comment_16481481
Wenn der Debugger nicht richtig funktioniert, kann sich das Projekt lange Zeit verzögern. Ich möchte, dass die Entwickler diesem Fehler, der wahrscheinlich mit dem Debugger zusammenhängt, Aufmerksamkeit schenken.
Es ist eine Menge Text, ich habe ihn nicht ganz gelesen.
Aber wenn etwas in der Debug-Version funktioniert und in der Release-Version nicht, oder umgekehrt, überprüfen Sie, ob alle Variablen und Felder, insbesondere in der Klasse/Struktur, initialisiert wurden.
#define GETCURRENTTICK GetCurrentTick1(Tick)#define GETCURRENTTICK GetCurrentTick2(Tick, !i)#define GETCURRENTTICK GetCurrentTick3(Tick)Zum Thema, dass die SymbolInfo-Funktionen kostenlos sind.
vielleicht ist die Methode inline, dann ist es nicht das Problem des Debuggers, sondern das des Compilers für den Debug-Modus
Genau, das Projekt war überfüllt mit Makros, sowohl mit meinen als auch mit denen von Standardmodulen. Vielleicht gelingt es dem Debugger deshalb nicht immer, Befehle in der *.ex5-Debug-Datei mit Zeilen in der *.mq5-Quelldatei und anderen Modulen abzugleichen...
Die SymbolInfo-Funktionen sind kostenlos.
Es handelt sich also um die Kosten der Funktion selbst, nicht um die Kosten der Übergabe der Zeichenkette als Wert und nicht als Referenz!
Ihre Version mit dem Cache ist eine gute Lösung, wenn die Ausführung dieser Funktion einen signifikanten Prozentsatz der Ausführungszeit des EAs in Anspruch nimmt (was ich nicht wirklich glaube)
Genau, das Projekt war überfüllt mit Makros, sowohl mit meinen als auch mit denen von Standardmodulen. Vielleicht gelingt es dem Debugger deshalb nicht immer, Befehle in der *.ex5-Debug-Datei mit Zeilen in der *.mq5-Quelldatei und anderen Modulen abzugleichen...
sind die Kosten für die Funktion selbst, nicht die Kosten für die Übergabe der Zeichenkette als Wert und nicht als Referenz!
Das ist der Punkt, auf den ich ursprünglich hinauswollte.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Fehler, Irrtümer, Fragen
fxsaber, 2020.05.20 13:24
Es ist besser, eine
Im Optimierer werden diese Funktionen zig-Milliarden Mal aufgerufen.
Außerdem ist Ihre Variante mit dem Cache eine gute Lösung, wenn die Ausführung dieser Funktion einen signifikanten Prozentsatz der Laufzeit eines EA einnimmt (was ich nicht wirklich glaube)
In einem bestimmten Stadium wird nicht nur der relative Teil der benötigten Zeit wichtig, sondern auch der absolute Teil.