Diskussion zum Artikel "Statistische Verteilungen in MQL5 - Nur das Beste aus R" - Seite 4
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
Was soll der Scheiß?! Die Ziele der Mathe-Bibel sind klar.
Ich verstehe etwas nicht
Was ist das Ergebnis des Aufrufs der angegebenen Funktion in MQL? Ein Skalar? Ein Vektor?Hier ist, was wir auf R haben
n <- 2000
>
> k <- seq(0, n, by = 20)
>
> dbinom(k, n, pi/10, log = TRUE)
[1] -754.219687 -660.247472 -592.126636 -534.532344 -483.881605
[6] -438.460449 -397.256529 -359.600217 -325.015561 -293.146935
[11] -263.718651 -236.510862 -211.344286 -188.070044 -166.562645
[16] -146.714976 -128.434635 -111.641185 -96.264050 -82.240889
[21] -69.516303 -58.040813 -47.770020 -38.663934 -30.686405
[26] -23.804662 -17.988917 -13.212041 -9.449276 -6.678001
[31] -4.877524 -4.028903 -4.114796 -5.119322 -7.027950
> a<-dbinom(k, n, pi/10, log = TRUE)> str(a)
num [1:101] -754 -660 -592 -535 -484 ...
D.h. der Aufruf der Funktion in R ergibt einen Vektor, der mit der universellen Methode plot gezeichnet werden kann
> plot(a)
Legen Sie die aktualisierte Datei bitte in /Include/Math/Stat ab.
Sie fügt eine überladene Funktion für den Vektor + einen zusätzlichen log_mode Parameter hinzu.
Hier ist eine Analogie zu Ihren Berechnungen, die vollständig mit den Ergebnissen von R übereinstimmt:
Schlussfolgerung:
Wir arbeiten jetzt daran, Vektoroperationen hinzuzufügen, um in der Syntax so nah wie möglich an R zu sein.
Natürlich werden wir viele neue Unit-Tests in die Auslieferung aufnehmen.
Übrigens sind Aussagen über die Optimierung der Geschwindigkeit mathematischer Bibliotheken in R stark übertrieben.
Dies ist das Ergebnis von frontalem Schreiben von Code und wildem System-Overhead aufgrund der Arbeit mit dynamischen Objekten/Entitäten. Im Gegensatz zu R arbeitet MQL5 mit klar typisierten Arrays und kompiliert Code in nativem x64. Dies ist ein enormer Vorteil und ermöglicht es Ihnen, sogar gegen DLL-Implementierungen von Funktionen in R zu gewinnen.
Hier ist ein Test basierend auf dem obigen Beispiel: R 3.3.1 x64
Der dreifache Durchlauf ergab eine Mindestzeit von 20 Mikrosekunden.
Derselbe Test in MQL5:
MQL5 zählt doppelt so schnell: 10 Mikrosekunden gegenüber 20 Mikrosekunden in R.
Berechnet auf i7-4930k, Windows 10 x64, MetaTrader 5 x64, keine Virtualisierungen und keine externe Last.
Übrigens sind Aussagen über die Optimierung der Geschwindigkeit mathematischer Bibliotheken in R stark übertrieben.
Dies ist das Ergebnis von frontalem Schreiben von Code und wildem System-Overhead aufgrund der Arbeit mit dynamischen Objekten/Entitäten. Im Gegensatz zu R arbeitet MQL5 mit klar typisierten Arrays und kompiliert Code in nativem x64. Dies ist ein enormer Vorteil und ermöglicht es Ihnen, sogar gegen DLL-Implementierungen von Funktionen in R zu gewinnen.
Hier ist ein Test basierend auf dem obigen Beispiel: R 3.3.1 x64
Der dreifache Durchlauf ergab eine Mindestzeit von 20 Mikrosekunden.
Derselbe Test in MQL5:
MQL5 zählt doppelt so schnell: 10 Mikrosekunden gegenüber 20 Mikrosekunden in R.
Berechnet auf i7-4930k, Windows 10 x64, MetaTrader 5 x64, keine Virtualisierungen und keine externe Last.
Übrigens sind Aussagen über die Optimierung der Geschwindigkeit mathematischer Bibliotheken in R stark übertrieben.
Dies ist das Ergebnis von frontalem Schreiben von Code und wildem System-Overhead aufgrund der Arbeit mit dynamischen Objekten/Entitäten. Im Gegensatz zu R arbeitet MQL5 mit klar typisierten Arrays und kompiliert Code in nativem x64. Dies ist ein enormer Vorteil und ermöglicht es Ihnen, sogar gegen DLL-Implementierungen von Funktionen in R zu gewinnen.
Hier ist ein Test basierend auf dem obigen Beispiel: R 3.3.1 x64
Der dreifache Durchlauf ergab eine Mindestzeit von 20 Mikrosekunden.
Derselbe Test in MQL5:
MQL5 zählt doppelt so schnell: 10 Mikrosekunden vs. 20 Mikrosekunden in R.
Berechnung auf i7-4930k, Windows 10 x64, MetaTrader 5 x64, keine Virtualisierungen und keine externe Last.
und ich bekam einen Fehler((
'vars' - Parameterumwandlung nicht erlaubt
und ich bekam eine Fehlermeldung((
'vars' - Parameterumwandlung nicht erlaubt
Sie müssen die aktualisierte Datei von https://www.mql5.com/ru/forum/97153/page4#comment_2882502 nehmen .
Dort wurde eine überschriebene Funktion für Vektoren hinzugefügt.
Sie müssen die aktualisierte Datei von https://www.mql5.com/ru/forum/97153/page4#comment_2882502 übernehmen.
Es gibt eine neu definierte Funktion für Vektoren.
Ja, danke. es funktioniert so. es hat bei mir so funktioniert. ich muss dir gleich sagen, dass ich MT unter vyne, 32bit, laufen lasse. deshalb vermute ich, was die Antwort sein wird - 64bit ist schneller))) um jede Verwirrung zu vermeiden - R ist auch 32bit.
Ja, danke. es funktioniert so. es funktionierte für mich so. ich muss sagen, dass ich MT unter wyne, 32bit laufen lasse. also was wird die Antwort sein, ich kann raten - 64bit ist schneller))))
Das ist nicht ernst gemeint.
Unter wyne, und sogar 32 Bit. Für 32 Bit verwendet MT5 einen alten Compiler ähnlich wie MT4. Er ist ein paar Dutzend Mal langsamer als 64-Bit-Code, der von einem neuen Compiler speziell für die 64-Bit-Version von MT5 erstellt wird. Wir haben einen Bericht veröffentlicht, in dem wir die Geschwindigkeit von 32- und 64-Bit-MQL5-Programmen vergleichen.
Jedes MQL5-Programm enthält eigentlich zwei Kopien des kompilierten Codes: 32-Bit für alte Systeme, um die Kompatibilität zu gewährleisten, und 64-Bit für neue Systeme.
Wir haben die Entwicklung von 32-Bit-Compilern vollständig aufgegeben, da sie keinen Sinn und keine Zukunft hat.
Deshalb sollten Sie nur 64-Bit-Versionen von MetaTrader 5 verwenden, wenn Sie die maximale Leistung erhalten wollen.
Übrigens, eine Information für diejenigen, die auf MT4 sitzen - auch dort ist die Geschwindigkeit der MQL4-Code-Ausführung ein paar Dutzend Mal langsamer als im 64-Bit-MetaTrader 5.
Herzlichen Glückwunsch! Ein klarer Sieg, auf beiden Seiten.
Die Berechnung ist doppelt so schnell wie eine vergleichbare R-Berechnung mit Kompilierung (der erste Durchlauf von R ist eine Byte- bzw. Jit-Kompilierung, so dass sie max>1,5 avg und min~=avg hat) ?
naja, Leistung... :-)
Berechnung doppelt so schnell wie die gleiche R-Berechnung mit Kompilierung (der erste Durchlauf von R ist Byte- bzw. Jit-Kompilierung, hat also max>1,5 avg und min~=avg) ?
naja, Leistung... :-)
R brauchte die minimale Zeit über viele Durchläufe, nicht den ersten Durchlauf und die maximale Zeit.
Also nein, "Kaltstart" erklärt es hier nicht. Und selbst in einer Umgebung, in der der gesamte Bibliothekscode in einer DLL enthalten ist. Da gibt es praktisch nichts zum Aufwärmen.
Was es aber erklärt:
Hier hat der Compiler sehr viel Spielraum im Vergleich zu eigentlich nicht optimierten Implementierungen in DLLs, die keine Chance haben, die Umgebung zu lernen und sich darauf einzustellen.