Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 153
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
In der ArrayReverse Hilfe:
Die FunktionArraySetAsSeries() verschiebt die Elemente des Arrays nicht physisch, sondern kehrt lediglich die Indizierungsrichtung um, um den Zugriff auf die Elemente wie bei einerZeitreihe zu gestalten. Die Funktion ArrayReverse() verschiebt Array-Elemente physisch, so dass das Array "umgekehrt" wird.
Dieser Code beweist jedoch das Gegenteil:
Und warum? Das ist richtig.
Wenn wir es mit einem Array zu tun haben, bei dem die Nummerierung wie bei einer Zeitreihe ist, d. h. der Nullstrich ist das jüngste und das jüngste das früheste Element, wird ein neues Element neben dem jüngsten, d. h. dem frühesten, eingefügt.
Und wenn das Array nicht nummeriert ist, wie bei Zeitreihen, dann ist das Nullelement das früheste und das jüngste Element das jüngste. Wenn also ein neues Element hinzugefügt wird, steht es neben dem letzten.
Und genau das passiert in Ihrem Test.
Wo ist hier der Beweis, den ich nicht verstehe. Wie können wir das beweisen und herausfinden, wo der Anfang des Arrays im Speicher liegt und welcher Inkrementschritt positiv oder negativ ist.
Sie können dies nur durch die Übergabe des Arrays und die Verwendung von Zeigern beweisen.
Aber es ist einfacher, dies zu beweisen, indem man die Zeit misst, die für die Ausführung dieses Vorgangs benötigt wird. Wenn ein Array mit 100 000 000 Elementen sofort "umkippt", ist es klar, dass es kein Umkippen gibt; der Verweis auf den Anfang ändert sich und das Inkrement ändert sein Vorzeichen.
Ich verwende die FunktionArraySetAsSeries() ständig, und ich sehe, dass es absolut frei in der Zeit ist. Sie irren sich also.
Um ehrlich zu sein, verstehe ich nicht, warum wir eine langsameArrayReverse-Funktion benötigen, wenn wir eine schnelleArraySetAsSeries()haben
In der ArrayReverse Hilfe:
Die FunktionArraySetAsSeries() verschiebt die Elemente des Arrays nicht physisch, sondern kehrt lediglich die Indizierungsrichtung um, um den Zugriff auf die Elemente wie bei einerZeitreihe zu gestalten. Die Funktion ArrayReverse() verschiebt Array-Elemente physisch, so dass das Array "umgekehrt" wird.
Dieser Code beweist jedoch das Gegenteil:
Sie haben Speicher Neuzuweisung für ein Array mit dem asSeries-Flag, natürlich haben sie das berücksichtigt. So etwas müssen sie dort haben:
Sie haben Speicher Neuzuweisung für ein Array mit asSeries Flag, natürlich haben sie das berücksichtigt. So etwas müssen sie dort haben:
Ja, sie müssen das berücksichtigt haben. Dieses Verhalten entspricht jedoch nicht der FunktionCopyRates():
Unabhängig davon, welche Eigenschaft das empfangende Array hat - as_series=true oder as_series=false - werden die Daten so kopiert, dass das zeitlich älteste Element am Anfang des dem Array zugewiesenen physischen Speichers liegt.
Auch zuArrayCopy():
Wenn count<0 oder count>src_size-src_start, wird der gesamte Rest des Arrays kopiert. Arrays werden von links nach rechts kopiert. Bei seriellen Arrays wird die Startposition korrekt überschrieben , wobei das Kopieren von links nach rechts berücksichtigt wird.
Ich stehe ein wenig unter Schock. Ich habe einen Test in Java geschrieben. Es stellt sich heraus, dass Java fast so schnell ist wie C und damit etwas schneller als MQL5.
Ich weiß nicht, wie sie das machen, es ist ja eine Dolmetschersprache.
Ich frage mich, ob das bei Python auch so ist.
Natürlich heißt das nicht, dass MQL5 schlecht ist. Es ist nur so, dass Java zu cool ist.
Ich muss etwas übersehen haben. Seit wann sind Interpreter so schnell wie Compiler?
Offenbar ist dies nur bei partieller Kompilierung möglich, d.h. Interpreter sind nicht rein.
Ich stehe ein wenig unter Schock. Ich habe einen Test in Java geschrieben. Es stellt sich heraus, dass Java fast so schnell ist wie C und damit etwas schneller als MQL5.
Ich verstehe nicht, wie sie das machen können, es ist ja eine Dolmetschersprache.
Ich frage mich, ob das bei Python auch so ist.
Natürlich heißt das nicht, dass MQL5 schlecht ist. Es ist nur so, dass Java zu cool ist.
Ich muss etwas übersehen haben. Seit wann sind Interpreter so schnell wie Compiler?
Offenbar ist dies nur bei partieller Kompilierung möglich, d.h. Interpreter sind nicht rein.
MQL ist auch ein Interpreter.
Ich stehe ein wenig unter Schock. Ich habe einen Test in Java geschrieben. Es stellt sich heraus, dass Java fast so schnell ist wie C und damit etwas schneller als MQL5.
Ich weiß nicht, wie sie das machen, es ist ja eine Dolmetschersprache.
Ich frage mich, ob das bei Python auch so ist.
Natürlich heißt das nicht, dass MQL5 schlecht ist. Es ist nur so, dass Java zu cool ist.
Ich muss etwas übersehen haben. Seit wann sind Interpreter so schnell wie Compiler?
Offenbar ist dies nur bei partieller Kompilierung möglich, d.h. Interpreter sind nicht rein.
Java wird zwar in Bytecode übersetzt, hat aber eine eigene virtuelle Ausführungsmaschine (JVM).
Die Sprache ist außerdem streng typisiert, im Gegensatz zu anderen Sprachen mit einem Interpreter.
Höchstwahrscheinlich ist die strikte Typisierung und die JVM der Grund für die schnelle Ausführung und Übertragung von Anweisungen an die Hardware.
Die amerikanischen Handelsterminals sind nicht ohne Grund in Java geschrieben. Die CME Group in Chicago bietet offiziell in Java geschriebene Terminals an.
Ein Programmierer sagte mir einmal, dass Java seine Wurzeln in der Telekommunikation hat.
In der Telekommunikation muss man von Anfang an die Geschwindigkeit haben, Daten zu verarbeiten und zu übertragen.
Und Oracle hat eine eigene Community für die Entwicklung dieser Sprache.
Das heißt, die Sprache ist lebendig und wird von der Oracle-Gemeinschaft weiterentwickelt.
Auch die Marke Quik und die Sprache LUA wurden übrigens von den Amerikanern entwickelt.
Aber in den zotteligen 90er Jahren wurde es erfolgreich an die Russische Föderation verkauft.
Damals haben die Amerikaner schon verstanden, dass LUA keine Zukunft hat.
Und sie verkauften sie erfolgreich an die Russische Föderation, wo sich nach dem Zusammenbruch der Sowjetunion gerade ein Devisenmarkt zu bilden begann.
Ich stehe ein wenig unter Schock. Ich habe einen Test in Java geschrieben. Es stellt sich heraus, dass Java fast so schnell ist wie C und damit etwas schneller als MQL5.
Ich verstehe nicht, wie sie das machen, es ist im Grunde eine Dolmetschersprache.
Das Modell ist das gleiche wie in .Net - der Quellcode wird in Bytecode kompiliert, es wird ein Interpreter sein, und wenn Sie den Bytecode auf einem bestimmten PC entpacken, wird der native Code für die virtuelle Umgebung erzeugt, in der er ausgeführt wird, d.h. es wird kompilierter Code sein
https://habr.com/ru/post/107585/
googeln Sie "Java Compiler oder Interpreter" für Java - es wird ähnliche Artikel geben
MQL ist auch ein Interpreter.
Rechtfertigung?
Ich stehe ein wenig unter Schock. Ich habe einen Test in Java geschrieben. Es stellt sich heraus, dass Java fast so schnell ist wie C und damit etwas schneller als MQL5.
Ich weiß nicht, wie sie das machen, es ist ja eine Dolmetschersprache.
Ich frage mich, ob das bei Python auch so ist.
Natürlich heißt das nicht, dass MQL5 schlecht ist. Es ist nur so, dass Java zu cool ist.
Ich muss etwas übersehen haben. Seit wann sind Interpreter so schnell wie Compiler?
Offenbar ist dies nur bei partieller Kompilierung möglich, d.h. Interpreter sind nicht rein.
Haben Sie sich jemals gefragt, wie viel Zeit der Startvorgang in Anspruch nimmt, wie viel Arbeitsspeicher verschlungen wird und wie viele Threads die JVM laufen lässt, um Bytes von Code zu kompilieren? Ich habe ein Monster laufen lassen, das Hallo Welt on the fly kompiliert hat, und es endete sowohl mit nativ. Nur hat das Monster C keins. Und über Python.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
MetaTrader 5 Python User Group - Wie man Python in Metatrader verwendet
Vict, 2019.12.07 07:12
Über Python - kürzlich wurde über Ranger (Dateimanager) gesprochen, das in Python geschrieben ist. Ich habe es ein paar Tage lang benutzt und mein Eindruck ist, dass es eine coole Idee mit interessanten Funktionen ist, aber Python ist wirklich langsam (wenn einige komplizierte Aufgaben im Hintergrund ausgeführt werden). Ich weiß nicht, warum die Leute Python so sehr mögen. Ähnliches gilt für C.Nun gut - kaufen Sie einen Multi-Core-Nummern-Brecher mit einem Wagen voller RAM und sagen Sie mein Java/Sharp/... sind in diesem Test sehr kühl, und über die Gesamtbelastung wollen wir uns nicht auslassen. Sie werden nie zu C aufschließen. Fortschritt, nehmen Sie Tetris aus den 80er Jahren, schreiben Sie es in Sharpe um, und fahren Sie so schnell wie früher, aber mit einer 60-Kern-CPU)).
ZS: Ähnlich wie zwei Threads in Elbrus nur an der Übertragung von x86-Befehlen beteiligt sind. BelAZ beim Transport eines Pakets.