Liebe Freunde, ich schlage vor, hier ein Archiv der MT-Versionen anzulegen. Manchmal können bei Aktualisierungen unerwartete Fehler auftreten, so dass man auf eine frühere Version zurückgehen muss...
Ich brauche jetzt Build 2007. Haben Sie es? Teilen Sie es bitte.
Es gibt hier einen Mann, der eine Sammlung hat. Aber soweit ich mich erinnere, werden seine Beiträge mit Links zu den Archiven der MT-Version manchmal gelöscht, damit der Fortschritt nicht gebremst wird. ))
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Neue Version von MetaTrader 5 build 2007: Wirtschaftskalender, MQL5-Programme als Service
Andrey Khatimlianski, 2019.03.15 23:03
Ich bin zu einem anderen Google-Konto umgezogen. Neuer Link hier.
Wenn Sie andere Builds brauchen, sagen Sie es, es gibt viele.
mein Link wurde hier gelöscht,
die Entwickler empfehlen, nur von verifizierten Quellen herunterzuladen
Wenn Sie meinen Aufbau riskieren wollen, schreiben Sie mir einfach eine Nachricht.
Sie sollten stabil im Portal oder Archiv weiterarbeiten und bewusst auf die Test-Builds upgraden
sollten Sie unbedingt auf die neuesten Builds aktualisieren.
mein Link wurde hier gelöscht,
die Entwickler empfehlen, nur von verifizierten Quellen herunterzuladen
Wenn Sie meinen Aufbau riskieren wollen, schreiben Sie mir einfach eine Nachricht.
Sie sollten stabil im Portal oder Archiv weiterarbeiten und bewusst auf die Test-Builds upgraden
Sie sollten die Arbeit in der portablen Version oder im Archiv stabil halten und sich generell über Aktualisierungen der Test-Builds im Klaren sein
Sie haben Recht, alte Versionen zu entfernen.
Sie müssen normale Programme schreiben. Ignorieren Sie keine Warnungen. Initialisieren Sie Variablen und verwenden Sie so wenig wie möglich globale Variablen. Vermeiden Sie potenziell gefährliche Fragmente im Code.
Ich habe Zehntausende von Codezeilen - keine einzige Warnung im Strict-Mode. Bei der Hälfte meiner Projekte in der Codebasis gibt es auch ohne strict Warnungen, obwohl sie nicht einmal Tausende von Zeilen umfassen. Und dann beschweren Sie sich, dass "in der alten Version alles funktioniert hat und in der neuen nicht mehr"...
Sie haben Recht, alte Versionen zu entfernen.
Sie müssen Programme richtig schreiben. Ignorieren Sie keine Warnungen. Initialisieren Sie Variablen und verwenden Sie so wenig wie möglich globale Variablen. Vermeiden Sie potenziell unsichere Fragmente im Code.
Ich habe nicht eine einzige Warnungin zehntausenden von Codezeilen im Strict-Modus. Die Hälfte meiner Projekte in der Codebasis meldet Warnungen auch ohne strict, obwohl sie nicht einmal tausend Strings enthalten. Und dann beschweren Sie sich, dass "in der alten Version alles funktioniert hat und in der neuen nicht mehr"...
Ist dies das Mars-Rover-Programm? Was können Sie in so vielen Zeilen beschreiben???
Es gibt hier eine Person, die eine Sammlung aufbaut. Aber soweit ich mich erinnere, werden seine Beiträge mit Links zu MT-Versionsarchiven manchmal gelöscht, damit der Fortschritt nicht gebremst wird. ))
Ich danke Ihnen. Ich habe es heruntergeladen.
der Link hat meinen Link hier gekillt,
Die Entwickler empfehlen, die Software nur von verifizierten Quellen herunterzuladen.
Wenn Sie meinen Aufbau riskieren wollen, schreiben Sie mir einfach eine Nachricht.
Sie sollten stabil im Portal oder Archiv weiterarbeiten und bewusst auf die Test-Builds upgraden
Ich bin jetzt in DC und habe vielleicht ein Baujahr 2007.
Ich aktualisiere nicht auf Test-Builds. Aber jetzt werde ich sparen))).
Sie haben Recht, alte Versionen zu entfernen.
Man muss Programme richtig schreiben. Ignorieren Sie keine Warnungen. Initialisieren Sie Variablen und verwenden Sie so wenig wie möglich globale Variablen. Vermeiden Sie potenziell unsichere Fragmente im Code.
Ich habe Zehntausende von Codezeilen und überhaupt keine Warnungen im Strict-Mode. Die Hälfte meiner Codebasis-Attrappen zeigt auch ohne strict Warnungen an, obwohl sie nicht einmal tausend Zeichenfolgen enthalten. Und dann beschweren Sie sich, dass "in der alten Version alles funktioniert hat und in der neuen nicht mehr"...
George, lesen Sie meinen letzten Beitrag in diesem Thema. Ich habe die Ursache des Problems gefunden. Das steht nicht in meinem Code.
Ich danke Ihnen. Heruntergeladen.
Ich aktualisiere nicht auf Testversionen. Aber jetzt werde ich sparen))).
George, lesen Sie meinen letzten Beitrag in diesem Thema. Ich habe die Ursache des Problems gefunden. Das steht nicht in meinem Code.
Ich habe es gelesen.
Die Ursache des Problems ist, dass die Entwickler und Sie die Situation etwas anders angegangen sind. Deshalb bestehe ich darauf, dass der Code immer sehr einfach und klar sein muss und dass alle Stellen, an denen es Unklarheiten geben könnte, ausgeschlossen werden.
Ich erinnere mich noch an die Zeit, als MT5 sich gerade seinen Weg bahnte - ich war erstaunt, dass die Leute Variablen ohne Initialisierung verwendeten, weil sie dachten, sie würden Null enthalten.
Man kann nicht umhin, sich an einen Witz zu erinnern:
Pinocchio gab Pinocchio drei Äpfel. Er hat zwei gegessen. Wie viele Äpfel sind noch übrig?
Programmierer N1:
- Sie wissen nicht, wie viele. Niemand weiß, wie viele Äpfel er vorher hatte!
Moral: Klären Sie die Ausgangsvariablen.
Programmierer N2
- Es ist nicht klar, wie viele es sind. Vielleicht hat Pierrot die Äpfel auch gegessen, während Malvina sie verschenkt hat?
Moral: Verwenden Sie keine globalen Variablen.
Programmierer N3
- Unbekannt wie viele. Es wird nicht gesagt, dass Pinocchio genau Äpfel gegessen hat, sondern dass er zwei gegessen hat, aber es ist nicht klar, was er gegessen hat. Außerdem ist der Name "Pinocchio" nicht dekliniert - Pinocchio und Pinocchio sind verschiedene Variablen.
Moral: Achten Sie auf Ihre Syntax
Ich danke Ihnen. Heruntergeladen.
Ich aktualisiere nicht auf Testversionen. Aber jetzt werde ich sparen))).
George, lesen Sie meinen letzten Beitrag in diesem Thema. Ich habe die Ursache des Problems gefunden. Sie ist nicht in meinem Code enthalten.
Und die Ursache des Problems war, dass ich die Dokumentation nicht gelesen habe, nicht das neue Build. Sie sind also hinterhältig, wenn Sie sagen, dass es nicht Ihr Code ist.
1:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Was wollen Sie also als nächstes tun?
Sergey Tabolin, 2019.06.16 00:17
Ich habe den Grund für diese Empörung gefunden.
Die Sache ist die:
//--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) TesterStop(); check_init = true; } //*/
Es stellt sich heraus, dass nach TesterStop() auch OnTester() in der neuen Version gestartet wird, obwohl es nicht gestartet werden sollte.
Natürlich werden keine Daten aufbereitet, und das ist es, was wir bekommen.
Das ist die Schuld von MT 2085.
2:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Was soll ich als nächstes tun?
Sergey Tabolin, 2019.06.16 09:02
Entschuldigung. In der Beschreibung steht nur, dass OnTester() danach aufgerufen wird. (((
Auch dort muss ich Kontrollen durchführen. Ich werde versuchen, es durch ExpertRemove() zu ersetzen...
Und dann werde ich es wieder "versuchen". Und wenn Ihre Versuche erfolglos bleiben, ist dann wieder MQ schuld?
Ich kann mich nicht mehr erinnern, aber ich glaube, es gibt eine spezielle Funktion zum Überspringen "schlechter" Pässe. Und genau das, was Sie ausprobieren wollen, haben die Entwickler - wenn ich mich recht erinnere - nicht empfohlen.
Aber was in meiner Nachricht wichtig ist - bevor man die Schuld auf die Entwickler schiebt, muss man zuerst die Dokumentation lesen, im Forum nach einer Lösung fragen und erst dann, und nur dann, wenn der Fehler wirklich gefunden wurde, einen Fehlerbericht mit einem minimalen Code schreiben, der ihn reproduziert. Das wäre eine ernste Sache, aber sonst...
Und die Ursache des Problems war, dass ich die Dokumentation nicht gelesen habe, nicht das neue Build. Sie lügen also, wenn Sie sagen, dass der Code nicht Ihnen gehört.
1:
2:
Und dann "versuchen" Sie es noch einmal... Und wenn Ihre Versuche erfolglos sind, ist es wieder die Schuld von MQ?
Ich kann mich nicht mehr erinnern, aber ich glaube, es gibt eine spezielle Funktion zum Überspringen "schlechter" Pässe. Und genau das, was Sie ausprobieren wollen, haben die Entwickler - wenn ich mich recht erinnere - nicht empfohlen.
Aber was in meiner Nachricht wichtig ist - bevor man den Entwicklern die Schuld in die Schuhe schiebt, sollte man zuerst die Dokumentation lesen, im Forum nach einer Lösung fragen und erst dann, und nur im Falle eines wirklich gefundenen Fehlers, einen Fehlerbericht schreiben und ihn mit minimalem Code reproduzieren. Das wäre eine ernste Sache, aber sonst...
Artyom, das Problem liegt in der neuen Version!
Sagen Sie mir, hier haben Sie einen Code geschrieben, der ohne Fehler funktioniert. Es funktioniert für eine lange Zeit. Und plötzlich, nach der neuen MT-Version, stürzt es mit einer Reihe von Fehlern ab. Wessen Schuld ist das? Zumal die Dokumentation, wie viele wissen, nicht immer mit den Innovationen Schritt hält.
Mein Code funktionierte also ohne Fehler.
Ich habe dies verwendet:
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Wodurch soll INIT_PARAMETERS_INCORRECT ersetzt werden? Lösung gefunden )))
Sergey Tabolin, 2019.04.24 08:48
Ich habe die Antwort auf meine eigene Frage in diesem Thread gefunden:
Es stellte sich heraus, dass es ganz einfach war. Es genügt, die Prüfung auf ungültige Parameter von OnInit() nach OnTick() zu verschieben
bool check_init = false; // флаг проверки входных параметров .......... //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) ExpertRemove(); if(period_HMA7C == 0 && move_stop) ExpertRemove(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) ExpertRemove(); check_init = true; } //*/ //+------------------------------------------------------------------+
Geprüft! Es funktioniert. Die Genetik versagt nicht ))))
Jetzt, nachdem Probleme aufgetreten sind, habe ich noch ein paar Zeilen hinzugefügt:
bool check_init = false; // флаг проверки входных параметров bool tester_stop = true; // флаг проверки выхода по TesterStop ............. void OnTick() { //--- пропустить бесполезные проходы оптимизации //* if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(period_HMA7C == 0 && move_profit) TesterStop(); if(period_HMA7C == 0 && move_stop) TesterStop(); if(period_HMA7C == 0 && shift_correction_HMA7C != 5) TesterStop(); if(indent_channel_line_a0 == 0.0 && indent_channel_line_a4 != 0.0) TesterStop(); if(indent_channel_line_a4 == 0.0 && indent_channel_line_a0 != 0.0) TesterStop(); if((stop_loss_buy > 0 && stop_loss_buy < 700) || (stop_loss_sell > 0 && stop_loss_sell < 700)) { Print("Результат в OnTester() должен быть -99999999999.99"); TesterStop(); } check_init = true; tester_stop = false; } //*/ ......... }
Вызов TesterStop() считается нормальным завершением тестирования, и поэтому будет вызвана функция OnTester() с отдачей тестеру стратегий всей накопленной торговой статистики и значения критерия оптимизации.
Es wird davon ausgegangen, dass der Transfer sofort ausgeführt wird, ohne dass der Rest des Codes ausgeführt wird. Oder?
Und in der Tat hält TesterStop() den Test überhaupt nicht an!
double OnTester() { if(tester_stop) return(-99999999999.99); double equity_dd_percent = TesterStatistics(STAT_EQUITY_DDREL_PERCENT); if(equity_dd_percent > 0.0) { equity_dd_percent = 100.0 / equity_dd_percent; } else equity_dd_percent = 1.0; double param = 0.0; double profit = TesterStatistics(STAT_PROFIT); double stability = 0.0; int balance_arr_size = ArraySize(balance_arr) - 1; int alpha_size = balance_arr_size - 1; int beta_size = alpha_size - 1; double trade2time = ratioTrades2Time(TesterStatistics(STAT_TRADES)); double max_balance = balance_arr[0]; //+------------------- if(balance_arr[balance_arr_size-1] - balance_arr[0] == 0.0) return(-99999999999.88); //+-------------------
Ich habe einen "ungültigen" Parameter eingegeben und dieses Ergebnis erhalten:
LL 0 11:30:20.816 Core 1 2016.10.01 00:00:00 Советник получил MAGIC = 153128312914612747. QN 0 11:30:20.816 Core 1 2016.10.03 00:00:00 Результат в OnTester() должен быть -99999999999.99 NJ 3 11:30:20.816 Core 1 TesterStop() called on 0% of testing interval CD 0 11:30:20.816 Core 1 final balance 10000.00 USD QF 0 11:30:20.816 Core 1 OnTester result -99999999999.88
Das ist also ein Fehler, und genau das ist der Fehler von MQ.
Ich glaube, dass TesterStop() undExpertRemove() true zurückgeben sollten, wenn sie die Kontrolle nicht sofort an OnTester() übergeben können. Damit kann man zum Beispiel wie folgt reagieren:
bool tester_stop = false; // флаг проверки выхода по TesterStop ....... void OnTick() { //--- пропустить бесполезные проходы оптимизации if(!check_init && (MQLInfoInteger(MQL_OPTIMIZATION) || MQLInfoInteger(MQL_TESTER))) { if(недопустимый параметр) tester_stop = TesterStop(); ........ } double OnTester() { if(tester_stop) return(-99999999999.99);
In diesem Fall können wir genau das Ergebnis erhalten, das logischerweise erwartet wird, anstatt herumzutanzen und alle Fehler vorherzusehen, die theoretisch als Folge des Abbruchs des Tests auftreten könnten.
Artyom, das Problem liegt in der neuen Version!
Sagen Sie mir, hier haben Sie einen Code geschrieben, der ohne Fehler funktioniert. Es funktioniert für eine lange Zeit. Und plötzlich, nach der neuen MT-Version, stürzt es mit einer Reihe von Fehlern ab. Wessen Schuld ist das? Zumal die Dokumentation, wie viele wissen, nicht immer mit den Innovationen Schritt hält.
Mein Code funktionierte also ohne Fehler.
Ich habe diese benutzt:
Jetzt, nach einigen Problemen, habe ich noch ein paar Zeilen hinzugefügt:
Die Übertragung soll klugerweise sofort erfolgen, ohne dass der Rest des Codes ausgeführt wird. Oder?
Aber tatsächlich hält TesterStop() den Test gar nicht an!
Ich habe einen "ungültigen" Parameter eingegeben und dieses Ergebnis erhalten:
Das ist also ein Fehler, und genau das ist der Fehler von MQ.
Ich glaube, dass TesterStop() undExpertRemove() true zurückgeben sollten, wenn sie die Kontrolle nicht sofort an OnTester() übergeben können. In einem solchen Fall ist es möglich, irgendwie zu reagieren, z. B. auf diese Weise:
In diesem Fall ist es möglich, genau das Ergebnis zu erhalten, das logischerweise erwartet wird, anstatt herumzutänzeln und alle Fehler vorherzusehen, die theoretisch als Folge des Abbruchs der Prüfung auftreten könnten.
Alle Ihre Berechnungen und Tests sollten Sie mir nicht zeigen, und zwar nicht mit einer gewissen Portion Sarkasmus und Irritation, sondern trocken und prägnant im Thread"Fehler, Bugs, Fragen". Es sei denn, Sie wollen gehört werden und eine Antwort erhalten.
ZS. Und vergessen Sie am besten Wörter wie "Bug", "Fehler", "mit Tamburin tanzen" und andere "Shitcodes" in Fehlerberichten - alle Menschen, und Sie sind nicht ohne Fehler. Und die "psychotischen" Äußerungen wirken nicht sehr seriös oder konstruktiv.
Alle Ihre Berechnungen und Tests sollten Sie mir nicht zeigen, und zwar nicht mit einer gewissen Portion Sarkasmus und Irritation, sondern trocken und prägnant im"Bugs, Bugs, Fragen"-Thread. Es sei denn, Sie wollen gehört werden und eine Antwort erhalten.
Es tut mir leid, wenn Sie das so empfinden. Natürlich gibt es Irritationen, aber wie sollte es auch anders sein, wenn Probleme aus heiterem Himmel auftauchen? Und der Sarkasmus... - Ich bin eher verwirrt über das, was ich als offensichtliche Patzer betrachte. ))
Was das betreffende Thema angeht, so scheint mir, dass die Frage dort leicht "verloren" gehen könnte. Ich denke also, dass ein neues Thema mit einem spezifischen Problem effektiver ist? Oder ist es nicht so?
Auf jeden Fall können Sie als Moderator die Entwickler auf einige Probleme aufmerksam machen, wenn Sie selbst von deren Existenz überzeugt sind )))
Ich werde versuchen, dort eine Frage zu stellen...
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Liebe Freunde, ich schlage vor, hier ein Archiv der MT-Versionen anzulegen. Manchmal können bei Aktualisierungen unerwartete Fehler auftreten, so dass man auf eine frühere Version zurückgehen muss...
Ich brauche jetzt Build 2007. Haben Sie es? Teilen Sie es bitte.