Das ist ein guter Trick. Der Trick besteht darin, das Muster auf TParent anzuwenden. So etwas habe ich noch nie gesehen.
Nun, es ist keine Mehrfachvererbung. Es ist eigentlich eine Kette Basis -> A -> B -> C -> X. Wer hindert Sie daran, es direkt zu verwenden, wenn es ausreicht?
Nun, es ist keine Mehrfachvererbung. Es ist eigentlich eine Kette Basis -> A -> B -> C -> X. Wer hindert Sie daran, es direkt zu verwenden, wenn es ausreicht?
Wenn plötzlich Mehrfachvererbung eingeführt wird, müssen Sie nur eine kleine Ersetzung in nur einer Zeile vornehmen
Schade, dass das Forum nicht zusätzlich zu den Umfragen ein Wettformular hat - wie eine Umfrage mit Optionen, aber mit Sperrung von ein paar "Pennies" auf dem Konto für die Antwort. Diejenigen, die sich für die richtige Option entscheiden, erhalten nach der Veranstaltung die Wetten der Verlierer ;-). Ich glaube nicht, dass sie es einführen würden.
Nun, es ist keine Mehrfachvererbung. Es ist eigentlich eine Kette Basis -> A -> B -> C -> X. Wer hindert Sie daran, es direkt zu verwenden, wenn es ausreicht?
Ja, aber die Besonderheit ist, dass alle Ausgangsklassen als Vorlagen definiert und verwendet werden. Daher kann diese Kette in beliebiger Reihenfolge eingestellt werden. Im Grunde genommen gibt es bei der Mehrfachvererbung keinen grundlegenden Unterschied. Wie ich bereits geschrieben habe, kann es bei Klassen Fallstricke geben. Was die Schnittstellen betrifft, ist alles identisch. Das Einzige ist, dass es ein wenig verkrustet aussehen wird, aber hier ist es jedem freigestellt, ob er nachschauen oder fahren möchte)
Eine Sache möchte ich noch hinzufügen. Eine vollständige Alternative zur Mehrfachvererbung (und mit flexibleren Optionen) könnte durch Überladen des Ghost-Operators implementiert werden. Aber aus irgendeinem Grund fügt MQ diese Überlastungsfunktion nicht hinzu, obwohl ich sie schon seit langem darum gebeten habe. Und ich habe noch nicht einmal eine konkrete Antwort von ihnen gehört, sie ignorieren es einfach.
EA ist unter 1641 kompiliert, wo schneller Handel Geschichte implementiert ist.
Ist es möglich, während der Optimierung zum Agent-Build 1596 zu gelangen, wo der Verlauf SEHR langsam arbeitet, und folglich eine Verlangsamung der Optimierung um ein Vielfaches zu erhalten?
Ganz allgemein führt die Optimierung in der Cloud manchmal zu unterschiedlichen Ergebnissen, nicht nur in Bezug auf die Zeit, sondern auch in Bezug auf die Berechnungen. Manchmal kann es vorkommen, dass das Optimierungsergebnis nicht mit einem einzigen Lauf übereinstimmt.
Dies kann darauf zurückzuführen sein, dass Agenten, die an der Optimierung beteiligt sind, und ein lokaler Agent, der an einem einzelnen Lauf beteiligt ist, eine unterschiedliche Build-Nummer haben können.
Und jeder Build enthält unterschiedliche Fehler. Zum Beispiel ist hier ein Fehler, der jetzt relevant ist, aber vor ein paar Jahren in den Builds nicht vorhanden war
Wieder einmal der HistorySelect-Fehler im Tester. Im Jahr 1626 schien das nicht der Fall zu sein. Im Jahr 1629 gibt es.
#include <Trade\Trade.mqh>
voidOnTick()
{
static CTrade Trade;
constdatetime NowTime = TimeCurrent();
if (Trade.Buy(1) && Trade.PositionClose(_Symbol) && HistorySelect(NowTime, NowTime))
{
Print(HistoryDealsTotal()); // 0 - это при том, что мы открыли и закрыли позицию в NowTime-времяExpertRemove();
}
}
Wenn Ihr EA also während der Optimierung auf den Agenten b1626 trifft, kann er ein Ergebnis anzeigen, aber wenn er auf dem lokalen Agenten b1641 läuft, ein völlig anderes.
Daraus können wir schließen, dass Sie sich vor der Optimierung bewusst sein sollten, für welche Builds Sie Ihren EA optimieren wollen und für welche nicht.
Die Entwickler haben einen Cutter für die untauglichen Agenten vorgesehen - INIT_AGENT_NOT_SUITABLE.
Daher würde ich empfehlen, eine Prüfung auf Übereinstimmung vonTerminalInfoInteger(TERMINAL_BUILD) mit den gewünschten Werten in OnInit für Cloud-basierte Optimierungen zu schreiben.
Aber es ist fast unmöglich, die Liste der Schecks zu kennen, die Ihren Bedürfnissen entsprechen, so dass Sie wahrscheinlich Folgendes schreiben würden
intOnInit( void )
{
// Если Агент не совпадает с билдом компиляции, отказываемся от его услугif (TerminalInfoInteger(TERMINAL_BUILD) != __MQLBUILD__)
return(INIT_AGENT_NOT_SUITABLE);
//....
Aber es ist auch eine schlechte Lösung. Eine flexiblere Lösung besteht darin, die Build-Nummer während der Optimierung an Agents zu übergeben.
Seien Sie im Allgemeinen wachsam.
SZY: Es ist möglich, einen Handelsbericht für jeden Agentendurchlauf zu erstellen und ihn während der Optimierung zu optimieren. Dies kann dazu beitragen, besser zu verstehen, warum sich das Ergebnis des Cloud-Agenten in einem einzigen Durchlauf von dem des lokalen Agenten unterscheidet. Die automatische Erstellung solcher Berichte während der Optimierung und des einzelnen Laufs ist mit Hilfe dieser Bibliothek möglich.
Bei der Fehlersuche (nicht unbedingt beim Debuggen), wenn Sie das Testintervall im Tester schnell reduzieren müssen, verwende ich die folgenden Funktionen
Korrigieren Sie den Code, Sie haben die Nummer 5 in der ersten Funktion anstelle von DealsNum.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Das ist ein guter Trick. Der Trick besteht darin, das Muster auf TParent anzuwenden. So etwas habe ich noch nie gesehen.
Nun, es ist keine Mehrfachvererbung. Es ist eigentlich eine Kette Basis -> A -> B -> C -> X. Wer hindert Sie daran, es direkt zu verwenden, wenn es ausreicht?
Nun, es ist keine Mehrfachvererbung. Es ist eigentlich eine Kette Basis -> A -> B -> C -> X. Wer hindert Sie daran, es direkt zu verwenden, wenn es ausreicht?
Knappheit.
Knappheit.
Ich könnte nicht mehr zustimmen. IMHO wäre es kürzer und übersichtlicher, die vier Nachfolgeklassen direkt vorzuschreiben.
Da kann ich nur zustimmen. IMHO wäre es kürzer und übersichtlicher, die vier Nachfolgeklassen direkt vorzuschreiben.
Wenn plötzlich Pluralvererbung eingeführt wird, müssen Sie nur eine kleine Änderung in nur einer Zeile vornehmen
Wenn plötzlich Mehrfachvererbung eingeführt wird, müssen Sie nur eine kleine Ersetzung in nur einer Zeile vornehmen
Schade, dass das Forum nicht zusätzlich zu den Umfragen ein Wettformular hat - wie eine Umfrage mit Optionen, aber mit Sperrung von ein paar "Pennies" auf dem Konto für die Antwort. Diejenigen, die sich für die richtige Option entscheiden, erhalten nach der Veranstaltung die Wetten der Verlierer ;-). Ich glaube nicht, dass sie es einführen würden.
Nun, es ist keine Mehrfachvererbung. Es ist eigentlich eine Kette Basis -> A -> B -> C -> X. Wer hindert Sie daran, es direkt zu verwenden, wenn es ausreicht?
Eine Sache möchte ich noch hinzufügen. Eine vollständige Alternative zur Mehrfachvererbung (und mit flexibleren Optionen) könnte durch Überladen des Ghost-Operators implementiert werden. Aber aus irgendeinem Grund fügt MQ diese Überlastungsfunktion nicht hinzu, obwohl ich sie schon seit langem darum gebeten habe. Und ich habe noch nicht einmal eine konkrete Antwort von ihnen gehört, sie ignorieren es einfach.
Es gibt Situationen wie diese
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
fxsaber, 2017.07.24 09:27
EA ist unter 1641 kompiliert, wo schneller Handel Geschichte implementiert ist.
Ist es möglich, während der Optimierung zum Agent-Build 1596 zu gelangen, wo der Verlauf SEHR langsam arbeitet, und folglich eine Verlangsamung der Optimierung um ein Vielfaches zu erhalten?
Ganz allgemein führt die Optimierung in der Cloud manchmal zu unterschiedlichen Ergebnissen, nicht nur in Bezug auf die Zeit, sondern auch in Bezug auf die Berechnungen. Manchmal kann es vorkommen, dass das Optimierungsergebnis nicht mit einem einzigen Lauf übereinstimmt.
Dies kann darauf zurückzuführen sein, dass Agenten, die an der Optimierung beteiligt sind, und ein lokaler Agent, der an einem einzelnen Lauf beteiligt ist, eine unterschiedliche Build-Nummer haben können.
Und jeder Build enthält unterschiedliche Fehler. Zum Beispiel ist hier ein Fehler, der jetzt relevant ist, aber vor ein paar Jahren in den Builds nicht vorhanden war
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
fxsaber, 2017.07.17 23:08
Wieder einmal der HistorySelect-Fehler im Tester. Im Jahr 1626 schien das nicht der Fall zu sein. Im Jahr 1629 gibt es.
Wenn Ihr EA also während der Optimierung auf den Agenten b1626 trifft, kann er ein Ergebnis anzeigen, aber wenn er auf dem lokalen Agenten b1641 läuft, ein völlig anderes.
Daraus können wir schließen, dass Sie sich vor der Optimierung bewusst sein sollten, für welche Builds Sie Ihren EA optimieren wollen und für welche nicht.
Die Entwickler haben einen Cutter für die untauglichen Agenten vorgesehen - INIT_AGENT_NOT_SUITABLE.
Daher würde ich empfehlen, eine Prüfung auf Übereinstimmung vonTerminalInfoInteger(TERMINAL_BUILD) mit den gewünschten Werten in OnInit für Cloud-basierte Optimierungen zu schreiben.
Aber es ist fast unmöglich, die Liste der Schecks zu kennen, die Ihren Bedürfnissen entsprechen, so dass Sie wahrscheinlich Folgendes schreiben würden
Aber es ist auch eine schlechte Lösung. Eine flexiblere Lösung besteht darin, die Build-Nummer während der Optimierung an Agents zu übergeben.
Seien Sie im Allgemeinen wachsam.
SZY: Es ist möglich, einen Handelsbericht für jeden Agentendurchlauf zu erstellen und ihn während der Optimierung zu optimieren. Dies kann dazu beitragen, besser zu verstehen, warum sich das Ergebnis des Cloud-Agenten in einem einzigen Durchlauf von dem des lokalen Agenten unterscheidet. Die automatische Erstellung solcher Berichte während der Optimierung und des einzelnen Laufs ist mit Hilfe dieser Bibliothek möglich.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Wanzen, Wanzen, Fragen
Renat Fatkhullin, 2017.07.25 08:26
Wir unterbrechen regelmäßig alte Builds in der Clouda und warten darauf, dass sie aktualisiert werden, was sehr schnell und unbemerkt geschieht.Bei der Fehlersuche (nicht unbedingt beim Debuggen), wenn man das Testintervall im Tester schnell reduzieren möchte, verwende ich folgende Funktionen
Bei der Fehlersuche (nicht unbedingt beim Debuggen), wenn Sie das Testintervall im Tester schnell reduzieren müssen, verwende ich die folgenden Funktionen