![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Trotzdem gewinnt der beste Code manchmal, aber sehr selten, d.h. der Link ist kostenlos
) nun, so funktioniert das nicht)
So funktioniert es in C++
In mql ist es, glaube ich, das Gleiche, aber mit zusätzlichen Wrappern von MQ
Forum für Handel, automatisierte Handelssysteme und Strategietests
FAQ von Anfängern MQL5 MT5 MetaTrader 5
Roman, 2019.12.11 14:02
Sie müssen nicht darüber nachdenken, warum sollte ich... Der Compiler erledigt das ganz von selbst. ))
C# ist nicht C
Schauen Sie sich das Video über __inline an.
Dort wird erklärt, wie Funktionen im Speicher für diejenigen funktionieren, die keinen Unterschied machen.
So funktioniert es in C++
In mql denke ich das Gleiche, aber mit zusätzlichen Wrappern von MQ
Nun, jetzt wieder lesen Sie diesen Thread und eine Menge von Aussagen und Test-Beispiele -, dass es einige Unterschiede. Und wir haben sie gefunden)))
Nun, jetzt wieder lesen Sie diesen Thread und eine Reihe von Aussagen und Beispiele für Tests -, dass es einen Unterschied gibt. Und sie haben))))
Nein )) Ich habe keine Lust, es noch einmal zu lesen.
Mir ist klar, dass es da einen Unterschied gibt.
Nein )) Ich habe keine Lust, es noch einmal zu lesen.
Mir ist klar, dass es da einen Unterschied gibt.
)))) eine weitere IMHO.
Der obere Weg ist um fast 15% schneller, was sehr bedeutsam ist (wenn das alles so offensichtlich ist, erklären Sie es mir).
)))) eine weitere IMHO
Der obere Weg ist um fast 20 % schneller, aber da alles so offensichtlich ist, erklären Sie es mir)
Die zu vergleichenden Schleifen sind hinsichtlich des Codes im Hauptteil nicht identisch.
Die erste Schleife hat einen Code im Körper, der Körper der zweiten Schleife hat einen anderen Code.
Natürlich unterschiedliche Code-Anweisungen, natürlich unterschiedliche Ausführungszeiten.
Machen Sie den gleichen Code im Schleifenkörper und ändern Sie nur die Schleifenbedingung ArraySize und die Variable size.
Wir testen diesen Teil, nicht den Körper.
Die verglichenen Schleifen sind nicht derselbe Code im Körper.
Die erste Schleife hat einen Code in ihrem Körper und der Körper der zweiten Schleife hat einen anderen Code.
Natürlich sind die verschiedenen Code-Anweisungen und die Ausführungszeit unterschiedlich.
Machen Sie den gleichen Code im Schleifenkörper und ändern Sie nur die Schleifenbedingung ArraySize und die Variable size.
Wir testen diesen Teil, nicht den Körper.
Ihr Test ist nicht ganz korrekt, da er vom Startfall abhängt, führen Sie ihn erneut durch. In beiden Fällen handelt es sich um einen Inkrement und eine Division. Nun, plus es gibt ein paar zusätzliche Dutzend~ Milliarden ArraySize-Aufrufe oben.
Übrigens sollten wir in den Textkörper schreiben, was wir testen wollen. Denn es ist der Körper, der wiederholt wird. Wir versuchen, es in loop.... einzubinden, um ein Ergebnis zu erhalten d.h. es war ursprünglich notwendig,ArraySize aus dem Body aufzurufen
Ihr Test ist nicht ganz korrekt, da er vom Startfall abhängt, führen Sie ihn erneut durch. Hier haben beide Fälle ein Inkrement und eine Division. Nun, plus es gibt ein paar Dutzend~ Milliarden von ArraySize Aufrufen auf sie.
Übrigens sollten wir in den Textkörper schreiben, was wir testen wollen. Denn es ist der Körper, der wiederholt wird. Wir versuchen, es in loop.... einzubinden, um ein Ergebnis zu erhalten d.h. es war ursprünglich notwendig,ArraySize aus dem Body aufzurufen
Bei jeder Iteration enthält die Bedingung der Schleife bereits eine Überprüfung der Bedingung i<ArraySize() oder i<size
, d.h. bei jeder Iteration wird entweder eine Funktion oder eine Variable aufgerufen.
Warum sollten wir das zu prüfende Objekt in den Körper stecken?
Die Logik selbst veranlasst uns zu entscheiden, was schneller zu erledigen ist. Zu einer Funktion oder zu einer Variablen.
Es ist mir egal, wie der Compiler es nennt. Ich verlasse mich nicht auf den Compiler, ich benutze nur meinen gesunden Menschenverstand, um herauszufinden, was vom Standpunkt der Referenz aus gesehen schneller zu handhaben ist.
Bei jeder Iteration wird in der Schleifenbedingung ohnehin die Bedingung i<ArraySize() oder i<size
geprüft, was bedeutet, dass bei jeder Iteration entweder eine Funktion oder eine Variable aufgerufen wird.
Warum sollten wir das zu prüfende Objekt in den Körper stecken?
Denn wir sind die Glücklichen, die diese Funktion haben, und die Funktion kann jede andere sein. Und es wird genau im Körper platziert. Ich habe sie nur vervielfältigt, um ihre Wirkung zu verstärken und verschiedene Arrays anzusprechen.
Es ist jedoch falsch, komplexere Aufgaben hinzuzufügen, deren Berechnungsfehler den untersuchten Effekt überschatten könnten. Übrigens ist es auch möglich, dass die Assemblierung in μl nicht konstant ist, d.h. beim erneuten Kompilieren kann man leicht unterschiedliche Daten erhalten (obwohl dies nicht exakt ist, aber es ist eine Art von Schutz gegen Hacking) So kann alles auf Ihrem Code für Sie getestet werden. Schauen Sie, ob sich die Ergebnisse ändern.
Mcl versucht einfach, den Code wie im Video gezeigt zu ersetzen. Nun, dort ist es ein wenig anders. Aber ganz allgemein gesprochen.
Und diese Anweisungen für Funktionen, die nicht wissen, welchen Wert sie erhalten werden - das ist, wie js und php und andere ähnliche Sprachen arbeiten, auch µl arbeitet auf diese Weise, aber nur im Debug-Modus
Bei jeder Iteration wird in der Schleifenbedingung ohnehin die Bedingung i<ArraySize() oder i<size
geprüft, was bedeutet, dass bei jeder Iteration entweder auf eine Funktion oder eine Variable zugegriffen wird.
Warum sollten wir das zu prüfende Objekt in den Körper stecken?
Die Logik selbst fordert uns auf, zu entscheiden, was schneller zu erledigen ist. Zu einer Funktion oder zu einer Variablen.
Es ist mir egal, wie der Compiler sie dort einbindet. Ich verlasse mich nicht auf den Compiler, ich verlasse mich auf meinen gesunden Menschenverstand und finde heraus, was vom Standpunkt der Referenz schneller zu handhaben ist.
Das klappt nicht immer.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Frage an #define-Experten
Roman, 2020.11.02 19:44
Ich habe meinen Beitrag geändert.
Es ist genau umgekehrt, d.h. ArraySize ist jetzt schneller als cnt.
Vorher war es genau umgekehrt. Vielleicht wirkt sich das Inkrement cnt-- aus, der Schleifenkörper ist anders und wahrscheinlich muss etwas anderes für die Last erfunden werden.