Alexey Kozitsyn: Ich weiß nicht, von welcher grafischen Benutzeroberfläche Sie sprechen, aber auf der Registerkarte "Parameter" des Testerfensters können Sie Start- und Stoppfelder festlegen. Und das Prüfgerät ermittelt korrekt die Anzahl der Parameterwerte.
Der Grund dafür ist wahrscheinlich, dass Aufzählungsfeldern Eigenwerte gegeben werden können, die kein Vielfaches einer Stufe sein dürfen.
Ja, es ist kein Fehler, deshalb haben wir in diesem Thread darüber gesprochen. Wenn wir einen Optimierungsschritt wünschen, kann dieser über MQL for enum eingestellt werden.
Einfügen von nur einer Zeile in jede der MT5-Varianten
#define Comment(A)
Vollwertig um 67% beschleunigt, handwerklich um 108%!
Aber das ist nicht der springende Punkt. Wir haben es geschafft, unsere EAs mit einer Zeile zu beschleunigen! Und das ist im Optimierer, wo der Kommentar keine Rolle spielt.
// Возвращает true только в случае, если выбран (в тестере) режим по реальным тикам// Перед использованием должен быть хотя бы один OnTick вызван тестеромbool IsRealTicks( void )
{
MqlTick Tick;
return(SymbolInfoTick(_Symbol, Tick) && (Tick.volume || !(Tick.flags & TICK_FLAG_LAST)));
}
Beispiel für die Verwendung
// Советник будет тестироваться только в режиме по реальным тикамvoidOnTick()
{
staticbool IsRemove = true;
if (IsRemove)
{
IsRemove = MQLInfoInteger(MQL_TESTER) && !IsRealTicks();
if (IsRemove)
{
Print("Real ticks mode is needed!");
ExpertRemove();
return;
}
}
//........
}
Wie man das in OnInit (ohne OnTick) macht - weiß ich nicht.
Verwenden Sie keine Ausdrücke in Druck- (oder Kommentar-) Parametern. Geben Sie die Parameter durch Kommata getrennt an. Dann werden mit Sicherheit alle String-Konvertierungen überschrieben
Könnten Sie anhand eines Beispiels erklären, wie sich diese beiden Zeichenfolgen im Optimierungsmodus unterscheiden?
Print((string)i + (string)d);
Print(i, d);
Support Team2017.11.24 08:44
Bei der Optimierung im ersten Fall wird vor dem Druck ein String-Ausdruck berechnet. Der Druck selbst wird aufgerufen, aber er funktioniert nicht.
Im zweiten Fall wird Print zwar aufgerufen, aber es funktioniert nicht. Auch die i+d-Stringkonvertierung funktioniert nicht
Bei einem einfachen Test sind die Ergebnisse des ersten und des zweiten Aufrufs gleich, sowohl was die Zeit als auch was die empfangene Leistung betrifft.
D.h. es ist viel billiger, Print mit Kommas für Optimize-Modi zu verwenden, als einen einzelnen Eingabeparameter dafür als String zu bilden.
Andererseits, wenn es alles als eine einzige Zeichenkette direkt in Print bildet, ist es einfach, seine Bildung im Optimierungsmodus zu deaktivieren über
#define Print(A)
aber ein solches Konstrukt funktioniert nicht, wenn Kommas verwendet werden. Außerdem wird sie durch eine solche Konstruktion auch im Optimierungsmodus deaktiviert
Print(SendOrder()); // SendOrder будет проигнорирован при #define Print(A)
Deshalb (und aus anderen Gründen) ist es besser, wirklich wichtige Funktionen nicht innerhalb von Print aufzurufen. Wenn Sie also im Optimierungsmodus auf die Leistung achten, müssen Sie immer noch etwas wie folgt tun
D.h. es ist viel billiger, Print mit Kommas für Optimize-Modi zu verwenden, als einen einzelnen Eingabeparameter als String dafür zu bilden.
Andererseits, wenn Sie alles als eine einzige Linie direkt in Print formen, ist es einfach, diese Formation im Optimierungsmodus zu deaktivieren durch
aber ein solches Konstrukt funktioniert nicht, wenn Kommas verwendet werden. Außerdem wird sie durch eine solche Konstruktion auch im Optimierungsmodus deaktiviert
Deshalb (und aus anderen Gründen) ist es besser, wirklich wichtige Funktionen nicht innerhalb von Print aufzurufen. Wenn Ihnen die Leistung im Optimierungsmodus wichtig ist, müssen Sie trotzdem etwas wie folgt tun
Entschuldigung, vielleicht verstehe ich es nicht, aber warum sollten wichtige Funktionen innerhalb von print aufgerufen werden?
Ich bin jetzt auf ein Problem gestoßen, wenn ich mehr als 1000 Geschäfte in der Historie habe und wenn ich die Funktion zur Verarbeitung der Historie aufrufe, um z.B. den Gewinn der Historie zu berechnen. + Ich weiß nicht, warum ich mich mit diesem Problem beschäftige. D.h. die Angebote kommen mit einer Verzögerung.
Ich weiß nicht, von welcher grafischen Benutzeroberfläche Sie sprechen, aber auf der Registerkarte "Parameter" des Testerfensters können Sie Start- und Stoppfelder festlegen. Und das Prüfgerät ermittelt korrekt die Anzahl der Parameterwerte.
Schritt ins Feld.
Schritt ins Feld.
Stufenfeld.
Der Grund dafür ist wahrscheinlich, dass Aufzählungsfeldern Eigenwerte gegeben werden können, die kein Vielfaches einer Stufe sein dürfen.
Der Grund dafür ist wahrscheinlich, dass Aufzählungsfeldern Eigenwerte gegeben werden können, die kein Vielfaches einer Stufe sein dürfen.
Ja, es ist kein Fehler, deshalb haben wir in diesem Thread darüber gesprochen. Wenn wir einen Optimierungsschritt wünschen, kann dieser über MQL for enum eingestellt werden.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Bibliotheken: TesterBenchmark
fxsaber, 2017.11.22 16:54
Einfügen von nur einer Zeile in jede der MT5-Varianten
Vollwertig um 67% beschleunigt, handwerklich um 108%!
Aber das ist nicht der springende Punkt. Wir haben es geschafft, unsere EAs mit einer Zeile zu beschleunigen! Und das ist im Optimierer, wo der Kommentar keine Rolle spielt.
Beispiel für die Verwendung
Wie man das in OnInit (ohne OnTick) macht - weiß ich nicht.Ein Ausschnitt aus dem Dialog zum genannten Thema
Könnten Sie anhand eines Beispiels erklären, wie sich diese beiden Zeichenfolgen im Optimierungsmodus unterscheiden?
Bei der Optimierung im ersten Fall wird vor dem Druck ein String-Ausdruck berechnet. Der Druck selbst wird aufgerufen, aber er funktioniert nicht.
Im zweiten Fall wird Print zwar aufgerufen, aber es funktioniert nicht. Auch die i+d-Stringkonvertierung funktioniert nicht
Bei einem einfachen Test sind die Ergebnisse des ersten und des zweiten Aufrufs gleich, sowohl was die Zeit als auch was die empfangene Leistung betrifft.
D.h. es ist viel billiger, Print mit Kommas für Optimize-Modi zu verwenden, als einen einzelnen Eingabeparameter dafür als String zu bilden.
Andererseits, wenn es alles als eine einzige Zeichenkette direkt in Print bildet, ist es einfach, seine Bildung im Optimierungsmodus zu deaktivieren über
aber ein solches Konstrukt funktioniert nicht, wenn Kommas verwendet werden. Außerdem wird sie durch eine solche Konstruktion auch im Optimierungsmodus deaktiviert
Deshalb (und aus anderen Gründen) ist es besser, wirklich wichtige Funktionen nicht innerhalb von Print aufzurufen. Wenn Sie also im Optimierungsmodus auf die Leistung achten, müssen Sie immer noch etwas wie folgt tun
Ein Ausschnitt aus dem Dialog zu dem genannten Thema
D.h. es ist viel billiger, Print mit Kommas für Optimize-Modi zu verwenden, als einen einzelnen Eingabeparameter als String dafür zu bilden.
Andererseits, wenn Sie alles als eine einzige Linie direkt in Print formen, ist es einfach, diese Formation im Optimierungsmodus zu deaktivieren durch
aber ein solches Konstrukt funktioniert nicht, wenn Kommas verwendet werden. Außerdem wird sie durch eine solche Konstruktion auch im Optimierungsmodus deaktiviert
Deshalb (und aus anderen Gründen) ist es besser, wirklich wichtige Funktionen nicht innerhalb von Print aufzurufen. Wenn Ihnen die Leistung im Optimierungsmodus wichtig ist, müssen Sie trotzdem etwas wie folgt tun
Verzeihung, vielleicht verstehe ich das nicht, warum muss ich wichtige Funktionen im Druck aufrufen?
Es ist nicht verboten.
Es ist nicht verboten.
Ich stimme zu.
Ich wollte nur wissen, was das soll?
Ich bin jetzt auf ein Problem gestoßen, wenn ich mehr als 1000 Geschäfte in der Historie habe und wenn ich die Funktion zur Verarbeitung der Historie aufrufe, um z.B. den Gewinn der Historie zu berechnen. + Ich weiß nicht, warum ich mich mit diesem Problem beschäftige. D.h. die Angebote kommen mit einer Verzögerung.