Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 199

 
Alexey Burnakov:

Erläutern Sie dann in der Reihenfolge der Wörtlichkeit, wie bei einer gleichmäßigen, kontinuierlichen Verteilung die Dichte am Extrempunkt positiv ist und das Integral Null ist: https://en.wikipedia.org/wiki/Uniform_distribution_(kontinuierlich)

Zurück zur ursprünglichen Aussage über R-Fehler in dem Artikel.

Wir sind der Meinung, dass es Fehler gibt und dass diese durch Nachlässigkeit bei der Umsetzung verursacht werden.

 
Renat Fatkhullin:

Die Sache ist die, dass @Quantum eine reine Implementierung und vollständige Überprüfung der analogen mathematischen Bibliothek von R in MQL5 ist.

Dies ist nicht die Argumentation eines Theoretikers. Und er greift tief in die Tasche, wenn er Unit-Tests schreibt, die sicherstellen, dass die Bibliothek korrekt ist.


Man sollte nicht a priori davon ausgehen, dass in R alles richtig ist. Im Gegenteil, ich würde sagen, dass, selbst wenn es eine C++-Implementierung der Funktionen gibt, alles ziemlich primitiv ist. Und in Bezug auf die Geschwindigkeit können Sie sehen, dass die MQL5-Bibliothek im Quellcode auf unserem Compiler im Durchschnitt um den Faktor 3 gewinnt.

Wir haben uns die Mühe gemacht, alles noch einmal zu überprüfen und dabei offensichtliche Fehler gefunden. Diese Fehler haben sich bestätigt:

Schauen Sie sich bitte die Daten der Veröffentlichungen an. Sie werden sehen, wie die Arbeit mit den Ratschlägen der Wissenschaftler voranschreitet.

Außerdem wäre es ein Fehler, @Quantum nicht als Wissenschaftler zu betrachten.

Lieber Renat!

Ich habe folgende Fragen zu Ihren letzten Beiträgen, die für mich eine grundsätzliche Angelegenheit sind:

1. Nach dem Datum der Veröffentlichung Ihres Artikels zu urteilen, ist es das Jahr 2003. Natürlich gibt es auch bei R, wie bei jedem anderen Softwaresystem, Fehler, und bei der Veröffentlichung wird immer eine Liste mit Korrekturen veröffentlicht. Gleichzeitig hat R immer die geringe Anzahl von Fehlern aufgrund der extrem großen Anzahl von Benutzern als Vorteil von R hervorgehoben. Und hier wurde seit 2003 ein Fehler im Algorithmus auf der Publikationsebene festgestellt, der bis heute nicht behoben wurde. Das ist für mich nicht klar.

Haben Sie bei R eine Anfrage zu diesem Thema gestellt?

2. ich würde gerne den Code sehen, mit dem die Leistung von R und MQL5 verglichen wurde.

Ich danke Ihnen im Voraus dafür.

 
SanSanych Fomenko:

Lieber Renat!

Ich habe folgende Fragen zu Ihren letzten Beiträgen, die für mich grundlegend sind:

1. Nach dem Datum der Veröffentlichung des Artikels zu urteilen, handelt es sich um 2003. Natürlich gibt es auch bei R, wie bei jedem anderen Softwaresystem, Fehler, und bei der Veröffentlichung wird immer eine Liste mit Korrekturen veröffentlicht. Gleichzeitig hat R immer betont, dass die geringe Anzahl von Fehlern aufgrund der extrem großen Anzahl von Nutzern ein Vorzug von R ist. Und hier wurde seit 2003 ein Fehler im Algorithmus auf der Publikationsebene entdeckt, der bis heute nicht behoben wurde. Das ist für mich nicht klar.

Es ist elementar und absolut klar.

Jeder macht Fehler - das ist das Geschäft von Entwicklern. Wir machen eine Menge Fehler und lassen uns nicht entmutigen.

Dieser Fehler in R ist nur auf Unachtsamkeit und das Vertrauen in eine Grundfunktion zurückzuführen, die die anderen Funktionen durcheinander gebracht hat. Sie wird korrigiert werden.

Haben Sie eine Anfrage an R zu diesem Thema gestellt?

Wir haben Tests durchgeführt, beim Schreiben der Bibliothek alles im Detail untersucht, ständig MQL5 - Wolfram Alpha - R verglichen, unsere Ergebnisse gezeigt und sind bereit, dafür öffentlich einzustehen. Natürlich haben wir drei große Skripte mit Unit-Tests und einem Benchmark an unser Mathematik-Paket angehängt (das sich im Quellcode befindet).

Ich bin sicher, @Quantum wird einen Fehlerbericht in R schreiben. Der aktualisierte Artikel wurde erst vor ein paar Stunden veröffentlicht.


Ich würde gerne den Code sehen, der die Leistung von R und MQL5 vergleicht.

Der Benchmark-Code für MQL5 befindet sich in \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 und den R-Code finden Sie am Ende des Artikels Statistische Verteilungen in MQL5 - das Beste aus R nehmen und schneller machen, siehe "Anhang". Ergebnisse der Berechnung der Zeitachse statistischer Funktionen".

Stellen Sie sicher, dass Sie ein Upgrade auf MetaTrader 5 Build 1467 durchführen, indem Sie sich mit dem MetaQuotes-Demo-Server verbinden, bitte. In diese Betaversion haben wir die neue Bibliothek und alle Testskripte aufgenommen.

 
Renat Fatkhullin:

Das ist elementar und völlig verständlich.

Jeder macht Fehler - das liegt in der Natur des Entwicklers. Wir machen eine Menge Fehler und lassen uns nicht entmutigen.

Dieser Fehler in R ist nur auf Unachtsamkeit und Vertrauen in eine Grundfunktion zurückzuführen, die andere Funktionen vermasselt hat. Sie wird korrigiert werden.

Wir haben Tests durchgeführt, beim Schreiben der Bibliothek alles im Detail untersucht, ständig die Ergebnisse zwischen MQL5 - Wolfram Alpha - R verglichen, unsere Ergebnisse gezeigt und sind bereit, dafür öffentlich einzustehen. Natürlich haben wir drei große Skripte mit Unit-Tests und einem Benchmark an unser Mathematik-Paket angehängt (das sich im Quellcode befindet).

Ich bin sicher, @Quantum wird einen Fehlerbericht in R schreiben. Der aktualisierte Artikel wurde erst vor ein paar Stunden veröffentlicht.


Den Benchmark-Code in MQL5 finden Sie in \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 und den Code in R finden Sie am Ende des Artikels Statistical Distributions in MQL5 - take the best from R and make it faster in "Appendix. Ergebnisse der Zeitberechnung für statistische Funktionen".

Stellen Sie sicher, dass Sie ein Upgrade auf MetaTrader 5 Build 1467 durchführen, indem Sie sich mit dem MetaQuotes-Demo-Server verbinden, bitte. In diese Betaversion haben wir die neue Bibliothek und alle Testskripte aufgenommen.

Ich kann mir noch kein eigenes Urteil über den Leistungsvergleich bilden. Und das ist eine Frage des Prinzips.

Die Sache ist die, dass R eine ideale Umgebung für die Entwicklung ist - ein Interpreter in einem Wort. Aber der Code, der während der Entwicklung existiert, unterscheidet sich sehr stark vom Arbeitscode - um ein Vielfaches der Anzahl der Zeilen. Der Arbeitscode hingegen ist sehr kurz und sehr umfangreich. Daher sollte man auf alle Funktionen von Paketen zurückgreifen, die für Handelsentscheidungen sinnvoll sind, z.B. Randomforest, die rechenintensive Algorithmen verwenden, Matrixoperationen, Belastung aller Kerne....

PS.

Sie verwenden eine veraltete Version von R. Sie sollten R Version 3.3.1 (2016-06-21) von MRAN - Microsofn R Open Website nehmen. Dabei ist es zwingend erforderlich, MKL zu installieren. Microsoft behauptet in der erwähnten R-Veröffentlichung, dass es die Ausführungsgeschwindigkeit einiger Pakete und Funktionen um das bis zu 50-fache (!) erhöhen konnte.

Microsoft R Open: The Enhanced R Distribution · MRAN
  • Microsoft Corporation
  • mran.revolutionanalytics.com
Microsoft R Open, formerly known as Revolution R Open (RRO), is the enhanced distribution of R from Microsoft Corporation. It is a complete open source platform for statistical analysis and data science. The current version, Microsoft R Open 3.3.1, is based on (and 100% compatible with) R-3.3.1, the most widely used statistics software in the...
 
SanSanych Fomenko:

Ich kann mir noch kein Urteil über den Leistungsvergleich bilden. Und das ist eine Frage des Prinzips.

Die Sache ist die, dass R eine ideale Umgebung für die Entwicklung ist - ein Interpreter in einem Wort. Aber der Code, der während der Entwicklung existiert, unterscheidet sich sehr stark vom Arbeitscode - um ein Vielfaches der Anzahl der Zeilen. Der Arbeitscode hingegen ist sehr kurz und sehr umfangreich. Deshalb sollte man auf Funktionen aus Paketen zurückgreifen, die bei Handelsentscheidungen sinnvoll sind, z.B. Randomforest, die rechenintensive Algorithmen verwenden, Matrixoperationen, Belastung aller Kerne....

Wir übersetzen R-Merkmale methodisch in MQL5. Und zwar so, dass sich das Wesen der Funktionsaufrufe als sehr ähnlich erweist.

Hier ein Beispiel für den Schriftverkehr in dem Artikel:


Vertrieb
MQL5-Funktionen
R-Funktionen
1Normal
MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2Beta
MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
3Binomisch
MathProbabilityDensityBinomial
MathCumulativeDistributionBinomial
MathQuantileBinomial
MathRandomBinomial
dbinom
pbinom
qbinom
rbinom
4
Cauchy
MathProbabilityDensityCauchy
MathCumulativeDistributionCauchy
MathQuantileCauchy
MathRandomCauchy
dcauchy
pcauchy
qcauchy
rcauchy
5Chi-Quadrat
MathProbabilityDensityChiSquare
MathCumulativeDistributionChiSquare
MathQuantileChiSquare
MathRandomChiSquare
dchisq
pchisq
qchisq
rchisq
6Exponential
MathProbabilityDensityExponential
MathCumulativeDistributionExponential
MathQuantileExponential
MathRandomExponential
dexp
pexp
qexp
rexp
7Fisher's F
MathProbabilityDensityF
MathCumulativeDistributionF
MathQuantileF
MathRandomF
df
pf
qf
rf
8Gamma
MathProbabilityDensityGamma
MathCumulativeDistributionGamma
MathQuantileGamma
MathRandomGamma
dgamma
pgamma
qgamma
rgamma
9Geometrisch
MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
10Hypergeometrisch
MathProbabilityDensityHypergeometric
MathCumulativeDistributionHypergeometric
MathQuantileHypergeometric
MathRandomHypergeometric
dhyper
phyper
qhyper
rhyper
11
Logistik
MathProbabilityDensityLogistic
MathCumulativeDistributionLogistic
MathQuantileLogistic
MathRandomLogistic
dlogis
plogis
qlogis
rlogis
12Lognormal
MathProbabilityDensityLognormal
MathCumulativeDistributionLognormal
MathQuantileLognormal
MathRandomLognormal
dlnorm
plnorm
qlnorm
rlnorm
13Negatives Binomial
MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
14Nicht-zentrales Beta
MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
15Nicht-zentrales Chi-Quadrat
MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
16
Dezentrale F
MathProbabilityDensityNoncentralF()
MathCumulativeDistributionNoncentralF()
MathQuantileNoncentralF()
MathRandomNoncentralF()
df
pf
qf
rf
17Dezentrale T Student
MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
18Poissonsches
MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
19T Student
MathProbabilityDensityT
MathCumulativeDistributionT
MathQuantileT
MathRandomT
dt
pt
qt
rt
20
Uniform
MathProbabilityDensityUniform
MathCumulativeDistributionUniform
MathQuantileUniform
MathRandomUniform
dunif
punif
qunif
runif
21Weibull
MathProbabilityDensityWeibull
MathCumulativeDistributionWeibull
MathQuantileWeibull
MathRandomWeibull
dweibull
pweibull
qweibull
rweibull

Wir versuchen, den Code aus R in Bezug auf Größe und Zeitaufwand nahezu identisch mit dem Code in MQL5 zu machen.

Morgen werden wir die grafische Bibliothek als Beta-Version freigeben und gleich große Teile des Codes in R und MQL5 zusammen mit Bildern demonstrieren.



Sie verwenden eine veraltete Version von R. Sie sollten R Version 3.3.1 (2016-06-21) von MRAN - Microsofn R Open Website nehmen. Dabei ist es zwingend erforderlich, MKL zu installieren. Microsoft behauptet in der erwähnten R-Veröffentlichung, dass es ihm gelungen ist, die Ausführungsgeschwindigkeit einiger Pakete und Funktionen um das bis zu 50-fache (!) zu erhöhen.

Ich bezweifle, dass die Standardversion von R plötzlich schneller wird - der Code dort ändert sich nicht viel. Natürlich können einige Funktionen beschleunigt werden, insbesondere Matrixfunktionen. Und Ihre Aussage bestätigt meine Meinung, dass der Code in R im Hinblick auf die Leistung eher schlampig geschrieben ist.

Wenn Sie den Artikel lesen, werden Sie sehen, dass wir selbst bei grundlegenden Funktionen ohne Multithreading und MKL Geschwindigkeitssteigerungen von bis zu 46x erreicht haben:

Die Berechnungen wurden auf einem Intel Core i7-4790, 3,6 Ghz CPU, 16 GB RAM, Windows 10 x64 durchgeführt. Ergebnisse der Berechnungszeit in Mikrosekunden


Vertrieb
MQL5-Zeit
PDF-Berechnungszeit (µs)
R Berechnungszeit
PDF-Berechnungszeit (µs)
PDF
R/MQL5
MQL5-Berechnungszeit
CDF-Berechnungszeit (µs)
R Berechnungszeit
CDF-Berechnungszeit (µs)
CDF
R/MQL5
MQL5-Berechnungszeit
Quantilzeit (µs)
R Berechnungszeit
Quantilberechnungszeit (µs)
Quantil
R/MQL5
MQL5-Generierungszeit
Generierungszeit der Zufallszahlen (µs)
R Generationszeit
Zeit für die Erzeugung von Zufallszahlen (μs)
Zufällig
R/MQL5
1
Binomisch
4.39
11.663
2.657
13.65
25.316
1.855
50.18
66.845
1.332
318.73
1816.463
5.699
2
Beta
1.74
17.352
9.972
4.76
15.076
3.167
48.72
129.992
2.668
688.81
1723.45
2.502
3
Gamma
1.31
8.251
6.347
8.09
14.792
1.828
50.83
64.286
1.265
142.84
1281.707
8.973
4
Cauchy
0.45
1.423
3.162
1.33
15.078
11.34
1.37
2.845
2.077
224.19
588.517
2.625
5
Exponential
0.85
3.13
3.682
0.77
2.845
3.695
0.53
2.276
4.294
143.18
389.406
2.72
6
Uniform
0.42
2.561
6.098
0.45
1.423
3.162
0.18
2.846
15.81
40.3
247.467
6.141
7
Geometrisch
2.3
5.121
2.227
2.12
4.552
2.147
0.81
5.407
6.675
278
1078.045
3.879
8
Hypergeometrisch
1.8511.095
5.997
0.9
8.819
9.799
0.75
9.957
13.28
302.55
880.356
2.91
9
Logistik
1.27
4.267
3.36
1.11
4.267
3.844
0.71
3.13
4.408
178.65
626.632
3.508
10
Weibull
2.99
5.69
1.903
2.74
4.268
1.558
2.64
6.828
2.586
536.37
1558.472
2.906
11
Poisson
2.91
5.974
2.053
6.26
8.534
1.363
3.43
13.085
3.815
153.59
303.219
1.974
12
F
3.86
10.241
2.653
9.94
22.472
2.261
65.47
135.396
2.068
1249.22
1801.955
1.442
13
Chi-Quadrat
2.47
5.974
2.419
7.71
13.37
1.734
44.11
61.725
1.399
210.24
1235.059
5.875
14
Nicht-zentrales Chi-Quadrat
8.05
14.223
1.767
45.61
209.068
4.584
220.66
10342.96
46.873
744.45
1997.653
2.683
15
Nicht-zentral F
19.1
28.446
1.489
14.67
46.935
3.199
212.21
2561.991
12.073
1848.9
2912.141
1.575
16
Nicht-zentrales Beta
16.3
26.739
1.64
10.48
43.237
4.126
153.66
2290.915
14.909
2686.82
2839.893
1.057
17
Negatives Binomial
6.13
11.094
1.81
12.21
19.627
1.607
14.05
60.019
4.272
1130.39
1936.498
1.713
18
Normal
1.15
4.267
3.71
0.81
3.983
4.917
0.7
2.277
3.253
293.7
696.321
2.371
19
Lognormal
1.99
5.406
2.717
3.19
8.819
2.765
3.18
6.259
1.968
479.75
1269.761
2.647
20
T
2.32
11.663
5.027
8.01
19.059
2.379
50.23
58.596
1.167
951.58
1425.92
1.498
21
Nicht-zentral T
38.47
86.757
2.255
27.75
39.823
1.435
1339.51
1930.524
1.441
1550.27
1699.84
1.096
<PDF R/MQL5>
3.474<CDF R/MQL5>
3.465
<Quantil R/MQL5>
7.03
<Random R/MQL5>
3.13



Aber die angegebene Version wird natürlich getestet. Sowohl für Geschwindigkeit als auch für Leistung.

 
SanSanych Fomenko:

Sie haben Unrecht mit der "falschen Antwort".

...

In der MQL-Dokumentation findet sich beispielsweise ein Beispiel für den Arkussinus und die Aussage, dass arcsine(2) = unendlich ist. Dies ist nicht korrekt. Genau: arcsinus(2) = NaN, d.h. kein numerischer Wert, arcsinus(1) = Inf, aber fehlende Notierungen während des Handels = NA, d.h. sie sollten (oder könnten am Wochenende) sein und sind es nicht.

Ich habe ihn mit einer gewissen Ironie über falsche Antworten geschrieben. Ich hätte einen Smiley hinzufügen sollen... Ich habe am Ende hinzugefügt, dass es sich in beiden Fällen nicht um einen Fehler handelt, da das Verhalten des Compilers und des Interpreters in nicht-defenierten Funktionsbereichen vollständig von der Systemarchitektur und den Entwicklern abhängig ist. In diesem Fall ist es natürlich besser, nan zurückzugeben.
Ich meine, rufen Sie keine Funktion mit Parametern auf, für die sie nicht definiert ist, und vergleichen Sie dann die Ergebnisse mit einer anderen Bibliothek, sonst können Sie Hunderte von "Fehlern" finden.

Übrigens ist das Beispiel mit dem Arcsinus interessant.
mql -
MathArcsin(1) = MathArcsin(2) = -nan(ind)

Wolfram -
Arcsin(1) = Pi/2
Arcsin(2) = etwas Komplexes. Es gibt keine Lösung mit einem gültigen Ergebnis.

R -
asin(1) = Pi/2
asin(2) = nan (die Antwort gilt für reelle Zahlen)
asin(2+0i) = etwas Komplexes, wie in wolfram

wiki sagt, dass asin(1) immer noch definiert ist(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions), können Sie einen Fehlerbericht an servicedesk schreiben.
Aber asin(2) ist eine undefinierbare Region, sie ist OK und passt überall.

Und noch einmal zum letzten Beitrag - Division durch 0 in einfacher Mathematik ist unmöglich, also ist es logisch, dass das mql-Skript mit Fehler abstürzt, keine Bugs hier. Aber es ist sehr seltsam, eine solche Akribie, um die Genauigkeit der Ergebnisse bis zu 16 Dezimalstellen zu sehen, und zurück nan oder Inf bei der Division durch Null aus irgendeinem Grund ist es unmöglich. Imho müssen Inf zurück und nicht quälen Entwickler mit plötzlichen Abstürzen ihrer Skripte.

 
Renat, war diese Übersetzung mehrerer Funktionen von R nach mql wirklich die Überraschung, von der du gesprochen hast?
 

Um die Kontrolle der Realwert-Division zu deaktivieren, verwenden Sie den Parameter FpNoZeroCheckOnDivision=1 im Abschnitt [Experts] der Datei metaeditor.ini

Wenn dieser Parameter vorhanden ist, erzeugt der folgende Code inf

void OnStart()
  {
   double x=0;  
   Print(1/x);
  }

Natürlich wird das Vorhandensein dieses Parameters Sie nicht vor einem Kompilierungsfehler bewahren, wenn Sie durch eine Konstante 0,0 dividieren
Print(1/0.0);

'0.0' - division by zero in the constant expression    s1.mq5    8    12
 
mytarmailS:
Renat, war diese Übertragung einiger Funktionen von R nach mql wirklich die Überraschung, von der du gesprochen hast?

Nein.

Überraschung macht keinen Sinn, wir werden alles innerhalb von MQL5 und MetaTrader 5 machen.

 
Renat Fatkhullin:

Wenn dieser Parameter vorhanden ist, gibt der folgende Code Auskunft

Vielen Dank, sehr korrekte Einstellung. Und wenn man Null durch Null teilt, erhält man nan anstelle von inf, und das ist sogar noch korrekter, eine solche Genauigkeit hatte ich gar nicht erwartet!
Grund der Beschwerde: