Tester zur Unterstützung von MG4-Skripten und Beratern - Seite 3

 
AlexeyVik:
Nun, ich werde nicht beweisen, dass es wahr ist. Für jemanden, der mit der C++-Programmierung und OOP im Allgemeinen nicht vertraut ist, ist es ziemlich kompliziert und eignet sich keineswegs für eine gute Mundpropaganda oder die Schaffung eines Mythos. So seltsam es auch klingen mag, ich habe alles in einer Woche verstanden und das geschrieben, was ich brauchte. Dies ist ein ganz anderer Mythos; er zeigt, dass das Erlernen von mql5 auch für Nicht-Profis wie mich möglich ist.
In jeder OOP kann man algorithmisch programmieren und die OOP selbst nur als Wrapper verwenden. Als ich anfing, in Java zu programmieren, habe ich OOP anfangs auch nicht verstanden, aber ich habe keine besonderen Probleme gesehen. Später treten Probleme auf, weil es sehr schwierig ist, das Rohmaterial in algorithmischen Sprachen zu lesen. Es ist viel schwieriger, Bibliotheken in algorithmischen Sprachen zu verwenden, weil man sie vor der Verwendung anschrauben muss.
 
Reshetov:
Sie können in jeder OOP algorithmisch programmieren, aber OOP nur als Wrapper verwenden. Als ich anfing, in Java zu programmieren, verstand ich OOP anfangs auch nicht, aber ich sah keine Probleme. Später treten Probleme auf, weil es sehr schwierig ist, das Rohmaterial in algorithmischen Sprachen zu lesen. Die Verwendung von Bibliotheken in der Algorithmik ist um ein Vielfaches schwieriger, weil man sie erst anschrauben muss, bevor man sie verwendet.
Yuri, warum erklärst du mir, wie einfach es ist? Für den einen ist es einfach, für den anderen ist es sehr einfach, und für wieder einen anderen ist es unzugänglich. Ich habe nicht gesagt, dass es unmöglich ist, zu lernen... Ich habe nur von den Unterschieden zwischen den Sprachen gesprochen... das Vertraute und das Neue.
 
Renat:
Überhaupt nicht anders. Es handelt sich um zwei identische Sprachen mit einem einzigen Compiler.
In dieser Hinsicht unterscheidet sich C++ nicht von JavaScript. Und es ist wahr!
 
Integer:
In dieser Hinsicht unterscheidet sich C++ auch nicht von JavaScript. Und es ist wahr!

Sie können in unserem Forum nichts anderes sehen.

Aber es gibt keine Verantwortung. Sie können mit allem herausplatzen, was Sie wollen.

 
AlexeyVik:
Yuri, warum erklärst du mir, wie einfach es ist? Manche Menschen finden es einfach, manche finden es sehr einfach, und manche finden es unzugänglich.
Es ist schwer zu verstehen, wenn es keine Dokumentation, keine Beispiele, keine Artikel gibt. Aber wenn man alles hat und in einem problematischen Fall im Forum Fragen stellen kann, ist es eine faule Ausrede, über Unzugänglichkeit zu reden.
 
Reshetov:
Es ist schwer zu verstehen, wenn es keine Dokumentation, keine Beispiele, keine Artikel gibt. Aber wenn alles da ist und man in einem problematischen Fall in einem Forum Fragen stellen kann, ist das eine faule Ausrede, um über Unzugänglichkeit zu reden.

Gehen Sie weg. Ich persönlich kann diese Sprache ohne Probleme oder Fragen meistern. Aber für jemanden, der aufgrund seines Charakters unzugänglich ist, kann man alles schreiben.

Ich kann immer noch nicht verstehen, warum Sie sich auf einen Dialog einlassen und eine Meinung zu einem völlig anderen Thema äußern.

 
Renat:

Was man in diesem Forum nicht sieht.

Warum, es gibt keine Verantwortung. Sie können alles sagen.

Ja, das ist richtig. Vor allem, wenn man die Autorität seiner höheren Position nutzt.

Alle Sprachen sind gleich, mit Ausnahme der extravaganten Sprachen. Sie alle können von jedem Dummy in 21 Tagen erlernt werden. Alle for, while, if, switch haben zwar eine andere Schreibweise, aber das macht im Prinzip keinen Unterschied. Nicht die Art und Weise, wie die Operatoren geschrieben sind, ist von Bedeutung, sondern die Infrastruktur, mit der die Sprache interagiert. In dieser Hinsicht sind MT4 und MT5 zwei verschiedene Welten.

Der Unterschied in allem. Angefangen beim Kleinen - bei der Nummerierung der Balken im Indikator, im MT4 von rechts nach links, im MT5 von links nach rechts. Weiter geht es mit dem wichtigeren - der aggregierten Position und der Organisation der Daten der Handelsgeschichte. Der größte Unterschied liegt in der Art und Weise, wie auf die Daten von Kursen und Indikatoren zugegriffen wird. Das Kopieren von Daten erfordert eine Überprüfung, eine Indexierung von links nach rechts und von rechts nach links, die Zeit des Balkens ist entweder im Bereich enthalten oder nicht. Nehmen Sie allein die Diskussion über die Funktion iBarShift() in CodeBase.

In MT4 reichte es aus, den Rückgabewert von OrderSelect() zu überprüfen, um einen stabilen Betrieb des EA zu gewährleisten, aber in MT5 ist es notwendig, bei jedem Schritt Überprüfungen durchzuführen, sogar bei den Daten des letzten Ticks. Es gibt auch einige Feinheiten der MT5-Programmierung, die Sie erst lernen werden, wenn Sie viel gelitten haben, denn es gibt viele Fallstricke.

 

Ich unterstütze Ihre Meinung von ganzem Herzen!

Die Erweiterung des Funktionsumfangs ist natürlich eine gute Sache, aber unter der Haube von MT5 hätten wir aus Kompatibilitätsgründen die MT4-Funktionen belassen sollen. Natürlich nur solche, die in den Rahmen des MT5-Handelsmodells passen.

Damit die Quellen von MT4 mit minimalen Änderungen portiert werden können.

Ich benutze zwar MT5 als Multiwährungs-Tester, aber unangemessen komplexe Funktionsaufrufe stoßen mich ab.

Die gleichen Funktionen für den Wechsel zu MT5(https://www.mql5.com/ru/articles/81), warum nicht im Kernel selbst implementieren?

Warum müssen Sie Funktionen umbenennen, um Typen zu konvertieren, zum Beispiel

CharToStr - CharToString,  StrToDouble - StringToDouble

Scheint elementar zu sein, aber... Reformen um der Reformen willen?

Oder Funktionen für die Arbeit mit der Zeit, zum Beispiel

int Hour()
int HourMQL4()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }

Funktion zum Abrufen von Daten aus einem Diagramm

double iClose(string symbol,
              int timeframe,
              int shift)
double iCloseMQL4(string symbol,int tf,int index)
{
   if(index < 0) return(-1);
   double Arr[];
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   if(CopyClose(symbol,timeframe, index, 1, Arr)>0) 
        return(Arr[0]);
   else return(-1);
}

Es gibt Hunderte von solchen Beispielen!

Natürlich ist MT5 funktioneller, aber MT4 ist bequemer! Und das ist manchmal viel wichtiger!

 
Integer:

Ganz genau. Insbesondere das Ausnutzen der Autorität einer höheren Position.

Die Aussage "C++ unterscheidet sich auch in dieser Hinsicht nicht von JavaScript" ist Unsinn, ähnlich wie die Diskussion über den Unterschied zwischen MQL4 und MQL5. Und jemand hat es herausposaunt.

Glaubwürdigkeit wird durch lange und harte Arbeit erworben. Ich habe diesen Band erfüllt und ich kann mich an das halten, was ich sage.


Es gibt bei allem einen Unterschied. Zunächst eine kleine - die Nummerierung der Balken im Indikator, in MT4 von rechts nach links, in MT5 von links nach rechts. Weiter geht es mit dem wichtigeren - der aggregierten Position und der Organisation der Daten der Handelsgeschichte. Der größte Unterschied besteht darin, was oft erforderlich ist - in der Art und Weise des Zugriffs auf Daten Zitate und Indikatoren, das Kopieren von Daten erfordert die Überprüfung, dann Indexierung von links nach rechts, dann von rechts nach links, die Zeit der Bar ist entweder in den Bereich, oder nicht. Nehmen Sie allein die Diskussion über die Funktion iBarShift() in CodeBase.

Was für eine merkwürdige Situation wir haben. Jede Sprache kann von einem Dummy in 21 Tagen erlernt werden, aber die Taktnummerierung und der Datenzugriff werden zu einem Problem.

Auch hier sind die Sprachen fast identisch, sie unterscheiden sich nur in einigen wenigen Funktionen und haben einen gemeinsamen Compiler. MQL4 hat einen veralteten Ansatz für die Handhabung von Daten, der für Systeme mit einer tiefen und detaillierten Historie inakzeptabel ist. Verwenden Sie die neuen CopyXXX-Funktionen in MQL4 und es wird wie in MQL5 sein.


In MQL4 reichte es aus, den Rückgabewert von OrderSelect() zu prüfen, um die Stabilität des EA zu gewährleisten, und in MQL5 ist die Prüfung bei jedem Schritt erforderlich, sogar beim Empfang der Daten des letzten Ticks. Es gibt auch einige Feinheiten der MT5-Programmierung, die Sie erst lernen müssen, wenn Sie eine Menge Probleme hatten, denn es gibt eine Menge Fallstricke.

In MQL4 und MQL5 müssen Sie die Ergebnisse von Funktionen überall überprüfen.

In MQL4 haben viele Händler die Überprüfung einfach ignoriert und die Daten so genommen, wie sie waren. In MQL5 schreiben sie dasselbe, und dann stürzen ihre Forex-Programme ab, wenn sie auf CFDs, Futures oder Aktien gestartet werden, einfach weil die Autoren zu faul waren, die Parameter der Instrumente oder die Datenverfügbarkeit zu überprüfen.

 
Nemser:

Auch wenn ich MT5 benutze, als Multiwährungs-Tester, aber die unnötig komplizierten Funktionsaufrufe sind abstoßend.

Denken Sie darüber nach, was die neuen Datenzugriffsfunktionen bieten und warum sie auf diese Weise durchgeführt werden.

MetaTrader 4 verfügt über eine begrenzte Tiefe der Historie, separate Zeitrahmen und einen direkten Zugang zu den Symbolleisten über Open/High/Low/Close/Time[xxx]. Ein solcher Direktzugriff ist in Bezug auf Ressourcen und CPU-Kosten sehr kostspielig zu implementieren. Beachten Sie, dass jeder Expert Advisor seine eigene lokale Kopie dieser Daten hat, um Konflikte mit anderen Expert Advisors und dem Terminal selbst zu vermeiden.

Mit der zunehmenden Anzahl von Symbolen (z.B. in MT5 können Sie 5.000-10.000 Symbole haben) und der Verwendung der tiefen 1-Minuten-Historie als Basis aller Zeitrahmen ist es im Prinzip nicht mehr möglich, die Methoden von MT4 zu verwenden. Der Arbeitsspeicher reicht nicht aus, und das Kopieren großer Datenmengen beeinträchtigt die Leistung. Aus diesem Grund unterhält MT5 nicht mehr automatisch eine versteckte und teure Kopie des Charts für jeden Experten.

Stattdessen sind wir zu sehr sparsamen CopyXXX-Funktionen übergegangen, bei denen der Entwickler genau so viele Daten in das lokale Array anfordert, wie er benötigt, und nicht das gesamte verfügbare Diagramm. Als nächstes kommt die schnellstmögliche lokale Datenverarbeitung (anstelle des alten, recht teuren Open/High/Low/Close/Time[xxx]), und der Autor kann diese Daten zwischenspeichern und beim nächsten Aufruf sparsam verwenden. Die Einsparungen bei Speicher und CPU sind enorm. Darüber hinaus ist die Plattform selbst besonders frei bei der Verwaltung umfangreicher Datenbanken - der Zugriff auf sie erfolgt immer auf Anfrage (im Gegensatz zum unkontrollierten Direktzugriff), was eine flexible Verwaltung der Caches ermöglicht.

Es sollte auch beachtet werden, dass die Einfachheit der Open/High/Low/Close/Time[xxx]-Aufrufe in MQL4 auf das aktuelle Symbol und den aktuellen Zeitrahmen beschränkt war und alle anderen Daten für andere Symbole und Zeitrahmen mit Hilfe von iClose/iLow(...)-Funktionen erhalten wurden, was zu erheblichen Verzögerungen führte. Der Übergang in MQL5 zu einem einzigen CopyXXX-Funktionsmodell hat die Situation radikal verbessert und ermöglicht es Entwicklern, die erforderlichen Datenpakete in einer einzigen Anfrage zu erhalten und nicht mehrere blockierte Aufrufe zu tätigen (denken Sie an die Sperren in jedem einzelnen Aufruf von iClose).


Die gleichen Funktionen für den Wechsel zu MT5(https://www.mql5.com/ru/articles/81), warum also nicht im Kernel selbst implementieren?

Das sind nicht unsere Aufgaben, und dieser Artikel ist es auch nicht. Dieser Artikel ist eine Reihe von monströsen Krücken, aber veröffentlicht, um den Unterschied zu zeigen.

Ich habe wiederholt erklärt, dass die neuen Funktionen von MQL5 genutzt werden müssen und nicht die schrecklichen Krücken.


Warum müssen die Typumwandlungsfunktionen umbenannt werden, z. B.

scheinbar elementar, aber... Reformen um der Reformen willen?

Dies ist der richtige Ansatz für den Aufbau einer hochwertigen Spracharchitektur. Funktionsnamen sollten verständlich sein und nicht aus einer Reihe von Abkürzungen bestehen.

Die neue Sprache und die praktischen Autovervollständigungsfunktionen haben es uns ermöglicht, die Sprache zu überarbeiten und sauberer zu gestalten.


Oder, zum Beispiel, Funktionen, um mit der Zeit zu arbeiten Die Funktion, um Daten aus einem Diagramm zu erhalten Und es gibt hunderte solcher Beispiele!

Dies sind Beispiele für Krücken (in der Regel heißt es "für eine Tonsillektomie mit Drüsenlöchern"), die nicht zum Vergleich herangezogen werden sollten.

Das theoretische Material ist veraltet, da MQL4 direkt auf MQL5 reduziert wurde und MQL4 nun eine Menge kompatibler Funktionen hat.


Natürlich ist MT5 funktioneller, aber MT4 ist bequemer! Und das ist manchmal viel wichtiger!

Dem stimme ich nicht zu.

MetaTrader 5 ist viel benutzerfreundlicher, sowohl in Bezug auf die Software als auch auf die Sprache.