L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 199

 
Alexey Burnakov:

Commentez ensuite, dans l'ordre du littéralisme, comment pour une distribution continue uniforme la densité au point extrême est positive et l'intégrale est nulle : https://en.wikipedia.org/wiki/Uniform_distribution_(continu)

Revenons à la déclaration initiale concernant les erreurs R dans l'article.

Notre avis reste le même : il y a des erreurs et elles sont dues à une négligence dans la mise en œuvre.

 
Renat Fatkhullin:

Le fait est que @Quantum est une implémentation pure et une vérification complète de l'analogue de la bibliothèque mathématique R dans MQL5.

Ce n'est pas le raisonnement d'un théoricien. Et il s'applique à écrire des tests unitaires qui garantissent que la bibliothèque est correcte.


Il ne faut pas supposer a priori que tout est correct dans R. Au contraire, je dirais que même s'il existe une implémentation C++ des fonctions, tout est assez primitif. Et en termes de vitesse, vous pouvez voir que la bibliothèque MQL5 dans le code source sur notre compilateur gagne par 3 fois en moyenne.

Nous avons pris la peine de tout revérifier et avons trouvé des erreurs évidentes. Ces erreurs ont été confirmées :

Regardez les dates des publications, s'il vous plaît. Vous verrez comment le travail se déroule avec les conseils des scientifiques.

D'ailleurs, ce serait une erreur de ne pas considérer @Quantum comme un scientifique.

Cher Renat !

J'ai les questions suivantes concernant vos derniers messages, qui sont pour moi des questions de principe :

1. A en juger par la date de publication de votre article, il s'agit de l'année 2003. Naturellement, R, comme tout autre système logiciel, comporte des erreurs et une liste de correctifs est toujours publiée lors de sa sortie. En même temps, R a toujours souligné que le faible niveau de bogues dû au nombre extrêmement élevé d'utilisateurs est une vertu de R. Et ici, depuis 2003, un bug dans l'algorithme a été détecté au niveau de la publication et il n'a pas été corrigé. Ce n'est pas clair pour moi.

Avez-vous fait une demande à R sur cette question ?

2. j'aimerais voir le code par lequel les performances de R et MQL5 ont été comparées.

Je vous en remercie d'avance.

 
SanSanych Fomenko:

Cher Renat !

J'ai les questions suivantes concernant vos derniers posts, qui sont fondamentaux pour moi :

1. A en juger par la date de publication de l'article, il s'agit de 2003. Naturellement, R, comme tout autre système logiciel, comporte des erreurs et une liste de correctifs est toujours publiée lors de sa sortie. En même temps, R a toujours souligné que le faible niveau de bogues dû au nombre extrêmement élevé d'utilisateurs est une vertu de R. Et ici, depuis 2003, un bug dans l'algorithme a été détecté au niveau de la publication et il n'a pas été corrigé. Ce n'est pas clair pour moi.

C'est élémentaire et absolument clair.

Tout le monde fait des erreurs - c'est ce que font les développeurs. Nous faisons une tonne d'erreurs et nous ne nous décourageons pas.

Cette erreur dans R provient simplement d'une négligence et d'une confiance dans une fonction de base qui a perturbé les autres. Il sera corrigé.

Avez-vous fait une demande à R sur cette question ?

Nous avons effectué des tests, examiné tout en détail lors de l'écriture de la bibliothèque, comparé constamment MQL5 - Wolfram Alpha - R, montré nos résultats et sommes prêts à en répondre publiquement. Bien sûr, nous avons joint trois gros scripts avec des tests unitaires et un benchmark à notre paquetage mathématique (qui se trouve dans le code source).

Je suis sûr que @Quantum écrira un rapport de bug dans R. L'article mis à jour a été publié il y a quelques heures seulement.


J'aimerais voir le code comparant les performances de R et de MQL5.

Le code du benchmark pour MQL5 se trouve dans \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 et le code R se trouve à la fin de l'article Distributions statistiques dans MQL5 - prendre le meilleur de R et le rendre plus rapide, voir "Annexe. Résultats du calcul de la ligne de temps des fonctions statistiques".

Assurez-vous de mettre à niveau vers MetaTrader 5 build 1467 en vous connectant au serveur MetaQuotes-Demo, s'il vous plaît. C'est dans cette version bêta que nous avons inclus la nouvelle bibliothèque et tous les scripts de test.

 
Renat Fatkhullin:

C'est élémentaire et tout à fait compréhensible.

Tout le monde fait des erreurs - c'est la nature des développeurs. Nous faisons une tonne d'erreurs et nous ne nous décourageons pas.

Cette erreur dans R est juste due à la négligence et à la confiance dans une fonction de base qui a fait foirer les autres. Il sera corrigé.

Nous avons effectué des tests, examiné tout en détail lors de l'écriture de la bibliothèque, comparé constamment les résultats entre MQL5 - Wolfram Alpha - R, montré nos résultats et sommes prêts à en répondre publiquement. Bien sûr, nous avons joint trois gros scripts avec des tests unitaires et un benchmark à notre paquet mathématique (qui se trouve dans le code source).

Je suis sûr que @Quantum écrira un rapport de bug dans R. L'article mis à jour a été publié il y a quelques heures seulement.


Le code du benchmark dans MQL5 se trouve dans \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 et le code dans R se trouve à la fin de l'article Distributions statistiques dans MQL5 - prendre le meilleur de R et le rendre plus rapide dans "Appendix". Résultats du calcul du temps pour les fonctions statistiques".

Assurez-vous de mettre à niveau vers MetaTrader 5 build 1467 en vous connectant au serveur MetaQuotes-Demo, s'il vous plaît. C'est dans cette version bêta que nous avons inclus la nouvelle bibliothèque et tous les scripts de test.

Je ne peux pas encore me faire une opinion sur la comparaison des performances. Et c'est une question de principe.

Le fait est que R est un environnement idéal pour le développement - un interprète en un mot. Mais le code qui existe pendant le développement est très différent du code de travail - par le nombre de lignes plusieurs fois. Le code de travail, quant à lui, est très bref et très volumineux. Par conséquent, nous devrions comparer sur toutes les fonctions des paquets, qui ont un sens lors de la prise de décisions commerciales, par exemple, randomforest, qui utilisent des algorithmes de calcul capacitifs, des opérations de matrice, le chargement de tous les cœurs.....

PS.

Vous utilisez une version obsolète de R. Vous devez prendre la version R 3.3.1 (2016-06-21) du site MRAN - Microsofn R Open. Il est obligatoire d'installer MKL lors de cette opération. Microsoft a affirmé dans la version de R mentionnée qu'il était capable d'augmenter la vitesse d'exécution de certains paquets et fonctions jusqu'à 50 ( !) fois.

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:

Je ne peux pas encore me faire une opinion sur la comparaison des performances. Et c'est une question de principe.

Le fait est que R est un environnement idéal pour le développement - un interprète en un mot. Mais le code qui existe pendant le développement est très différent du code de travail - par le nombre de lignes plusieurs fois. Le code de travail, quant à lui, est très bref et très volumineux. C'est pourquoi nous devrions comparer toutes les fonctions des paquets, qui ont un sens lors de la prise de décisions de trading, par exemple, randomforest, qui utilise des algorithmes de grande capacité de calcul, des opérations matricielles, le chargement de tous les cœurs.....

Nous traduisons méthodiquement les fonctionnalités de R en MQL5. Et de telle manière que l'essence des appels de fonction s'avère très similaire.

Voici un exemple de la correspondance de l'article :


Distribution
Fonctions MQL5
Fonctions R
1Normal
MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2Bêta
MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
3Binomiale
MathProbabilityDensityBinomial
MathCumulativeDistributionBinomial
MathQuantileBinomial
MathRandomBinomial
dbinom
pbinom
qbinom
rbinom
4
Cauchy
MathProbabilityDensityCauchy
MathCumulativeDistributionCauchy
MathQuantileCauchy
MathRandomCauchy
dcauchy
pcauchy
qcauchy
rcauchy
5Chi-deux
MathProbabilityDensityChiSquare
MathCumulativeDistributionChiSquare
MathQuantileChiSquare
MathRandomChiSquare
dchisq
pchisq
qchisq
rchisq
6Exponentiel
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
9Géométrique
MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
10Hypergéométrique
MathProbabilityDensityHypergeometric
MathCumulativeDistributionHypergeometric
MathQuantileHypergeometric
MathRandomHypergeometric
dhyper
phyper
qhyper
rhyper
11
Logistique
MathProbabilityDensityLogistic
MathCumulativeDistributionLogistic
MathQuantileLogistic
MathRandomLogistic
dlogis
plogis
qlogis
rlogis
12Lognormal
MathProbabilityDensityLognormal
MathCumulativeDistributionLognormal
MathQuantileLognormal
MathRandomLognormal
dlnorm
plnorm
qlnorm
rlnorm
13Binôme négatif
MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
14Bêta non central
MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
15Chi-carré non central
MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
16
Décentral F
MathProbabilityDensityNoncentralF()
MathCumulativeDistributionNoncentralF()
MathQuantileNoncentralF()
MathRandomNoncentralF()
df
pf
qf
rf
17Décentral T Étudiant
MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
18de Poisson
MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
19T Étudiant
MathProbabilityDensityT
MathCumulativeDistributionT
MathQuantileT
MathRandomT
dt
pt
qt
rt
20
Uniforme
MathProbabilityDensityUniform
MathCumulativeDistributionUniform
MathQuantileUniform
MathRandomUniform
dunif
punif
qunif
runif
21Weibull
MathProbabilityDensityWeibull
MathCumulativeDistributionWeibull
MathQuantileWeibull
MathRandomWeibull
dweibull
pweibull
qweibull
rweibull

Nous essayons de faire en sorte que le code provenant de R soit presque identique en taille et en temps à celui écrit dans MQL5.

Demain, nous publierons la bibliothèque graphique en version bêta et ferons la démonstration de morceaux de code de taille égale en R et MQL5, accompagnés d'images.



Vous utilisez une version obsolète de R. Vous devez prendre la version R 3.3.1 (2016-06-21) du site MRAN - Microsofn R Open. Il est obligatoire d'installer MKL lors de cette opération. Microsoft a affirmé dans la version de R mentionnée qu'il a réussi à augmenter la vitesse d'exécution de certains paquets et fonctions jusqu'à 50 ( !) fois.

Je doute que la version standard de R puisse soudainement accélérer - le code ne change pas beaucoup. Il est clair que certaines fonctions peuvent être accélérées, notamment les fonctions matricielles. Et votre déclaration confirme mon opinion selon laquelle le code de R est plutôt mal écrit en termes de performances.

Si vous lisez l'article, vous verrez que nous avons obtenu des accélérations allant jusqu'à 46x, même pour les fonctions de base, sans multithreading ni MKL :

Les calculs ont été effectués sur un processeur Intel Core i7-4790, 3,6 Ghz, 16 Go de RAM, Windows 10 x64. Résultats du temps de calcul en microsecondes


Distribution
Temps MQL5
Temps de calcul du PDF (µs)
Temps de calcul R
Temps de calcul du PDF (µs)
PDF
R/MQL5
Temps de calcul du MQL5
Temps de calcul du CDF (µs)
Temps de calcul R
Temps de calcul du CDF (µs)
CDF
R/MQL5
Temps de calcul du MQL5
temps de quantile (µs)
Temps de calcul R
temps de calcul du quantile (µs)
Quantile
R/MQL5
Temps de génération de MQL5
temps de génération des nombres aléatoires (µs)
Temps de génération R
temps de génération des nombres aléatoires (μs)
Random
R/MQL5
1
Binomiale
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
Bêta
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
Exponentiel
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
Uniforme
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
Géométrique
2.3
5.121
2.227
2.12
4.552
2.147
0.81
5.407
6.675
278
1078.045
3.879
8
Hypergéométrique
1.8511.095
5.997
0.9
8.819
9.799
0.75
9.957
13.28
302.55
880.356
2.91
9
Logistique
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 carré
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
Chi carré non central
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
Noncentral 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
Bêta non central
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
Binomiale négative
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
T non central
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
<Quantile R/MQL5>
7.03
<Random R/MQL5>
3.13



Mais la version spécifiée sera testée bien sûr. Tant pour la vitesse que pour les performances.

 
SanSanych Fomenko:

Vous avez tort au sujet de la "mauvaise réponse"

...

Par exemple, la documentation MQL donne un exemple sur l'arcsine et indique que arcsine(2) = infini. Ce n'est pas exact. Exactement : arcsinus(2) = NaN, c'est-à-dire aucune valeur numérique, arcsinus(1) = Inf, mais les cotations manquantes pendant le trading = NA, c'est-à-dire qu'elles devraient être (ou pourraient être pendant le week-end) et ne le sont pas.

Je l'ai écrit avec un peu d'ironie sur les mauvaises réponses. J'aurais dû ajouter un smiley... En fait, j'ai ajouté à la fin que ce n'est pas un bug dans les deux cas, car le comportement du compilateur et de l'interpréteur dans les zones de fonctions non définies dépend entièrement de l'architecture du système et des développeurs. Dans ce cas, il est préférable de rendre nan, bien sûr.
Je veux dire, n'appelez pas une fonction avec des paramètres pour lesquels elle n'est pas définie et comparez ensuite les résultats avec une autre bibliothèque, sinon vous pouvez trouver des centaines de "bugs".

Au fait, c'est un exemple intéressant avec arcsinus.
mql -
MathArcsin(1) = MathArcsin(2) = -nan(ind)

Wolfram -
Arcsin(1) = Pi/2
Arcsin(2) = quelque chose de complexe. Il n'y a pas de solution avec un résultat valable.

R -
asin(1) = Pi/2
asin(2) = nan (la réponse est pour les nombres réels)
asin(2+0i) = quelque chose de complexe, comme dans wolfram

wiki dit que asin(1) est toujours défini(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions), vous pouvez écrire un rapport de bug à servicedesk.
Mais asin(2) est une région indéfinissable, elle est OK et correspond partout.

Et encore une fois à propos du dernier post - la division par 0 en mathématiques simples est impossible, il est donc logique que le script mql se plante avec une erreur, pas de bugs ici. Mais il est très étrange de voir une telle minutie dans la précision des résultats jusqu'à 16 décimales, et de renvoyer nan ou Inf lorsqu'on divise par zéro pour une raison quelconque. Imho besoin de retourner Inf et de ne pas tourmenter les développeurs avec des crashs soudains de leurs scripts.

 
Renat, cette traduction de plusieurs fonctions de R vers mql était-elle vraiment la surprise dont vous parliez ?
 

Pour désactiver le contrôle de la division de la valeur réelle, utilisez le paramètre FpNoZeroCheckOnDivision=1 dans la section [Experts] du fichier metaeditor.ini.

Si ce paramètre est présent, le code suivant produira l'infographie

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

Bien entendu, la présence de ce paramètre ne vous sauvera pas d'une erreur de compilation lors de la division par une constante de 0,0.
Print(1/0.0);

'0.0' - division by zero in the constant expression    s1.mq5    8    12
 
mytarmailS:
Renat, ce transfert de certaines fonctions de R vers mql était-il vraiment la surprise dont vous parliez ?

Non.

La surprise n'a pas de sens, nous ferons tout dans MQL5 et MetaTrader 5.

 
Renat Fatkhullin:

Si ce paramètre est présent, le code suivant donnera inf

Merci, réglage très correct. Et si vous divisez zéro par zéro, vous obtenez nan au lieu de inf, et c'est encore plus correct, je ne m'attendais même pas à une telle précision !