L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 198

 
Dr. Trader:

J'ai trouvé une autre erreur dans R. R ne divise pas correctement par 0.

Voici le script :

//+------------------------------------------------------------------+
//|                                                         test.mq5 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"

#property script_show_inputs

input double div = 0.0;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print(1.0/div);
  }
//+------------------------------------------------------------------+

La réponse correcte, en mql, est.
division par zéro dans 'test.mq5' (20,13)
avec
arrêt du script

Non propriétaire, en R :
> 1/0
Inf
avec la
suite du scénario

Je veux dire la même chose qu'Alexey - le comportement des programmes dans des conditions non définies peut être différent, et ce n'est pas une erreur. C'est ainsi que l'architecture est censée être, c'est ainsi que le résultat sera.


Vous avez tort au sujet de "pas la bonne réponse".

La réponse en R est tout à fait correcte et très pratique. Le fait est que R pousse le concept de "valeur de la variable" jusqu'à sa conclusion logique et dispose de trois valeurs spécifiques pour la variable : NA (il existe une valeur, mais elle n'est pas connue), NaN (pas de valeur numérique) et Inf - infini. Il s'agit d'une telle valeur et il est totalement inadmissible d'interrompre le travail du programme. Si vous tenez compte des limites de l'ordinateur en matière de précision réelle, Inf pourrait bien avoir une valeur finie. Et il est tout à fait naturel de continuer à travailler et un programme bien écrit devrait vérifier ces résultats s'ils sont supposés.

Par exemple, la documentation MQL donne un exemple sur l'arcsine et indique que arcsine(2) = infini. Ce n'est pas exact. Précisément : 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 le week-end) et ne le sont pas.

 
Alexey Burnakov:

Ce que Wolfram dit 0 n'est pas la vérité finale. Je veux dire que le mot "erreur" dans le libellé est redondant...

Il ne s'agit pas de Wolfram ici. L'intégrale des valeurs positives non nulles ne peut pas être nulle.

Des vérifications ont également révélé des erreurs dans les algorithmes.

Par exemple, pour la distribution t non centrale, les quantiles ne sont pas convertis :


> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf [1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf [1] 6.220961e-16 1.388760e-15 3,166372e-15 7,362630e-15 1,742915e-14 4,191776e-14 1,021850e-13 [8] 2,518433e-13 6,257956e-13 1,563360e-12 3,914610e-12> k [1] 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1.0> nt_quantile [1] -Inf -1,340781e+154 -1,340781e+154 -1,340781e+154 -1,340781e+154 [7] -1,340781e+154 7,000000e-01 8 ,000000e-01 9,000000e-01 1,000000e+154


Ici, les quantiles 0-0.6 sont calculés de manière incorrecte.

Un exemple d'un calcul similaire dans MQL5 :

2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) Tests unitaires pour le Package Stat
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) Le test de distribution T non centrale a été lancé.
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) Test de distribution T non central : Test 1 : Calculs pour les valeurs uniques
2016.11.10 17:53:32.645 TestStatNCT (EURUSD,H1) 1 0, PDF=4.92773299108629100851e-15, CDF=6.23274905782904190070e-16, Q=1.51119154775858715131e-18,
2016.11.10 17:53:32.646 TestStatNCT (EURUSD,H1) 1 1, PDF=1.130226163094897516453e-14, CDF=1.38993895779573769266e-15, Q=9.999999999989369615e-02,
2016.11.10 17:53:32.647 TestStatNCT (EURUSD,H1) 1 2, PDF=2.64161256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.00000000000000004840572e-01,
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 3, PDF=6.28106243570810575054e-14, CDF=7.3638179090305861902898e-15, Q=2.9999999999999998601119e-01
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 4, PDF=1.5163698393962646374250e-13, CDF=1.743039359090744906969191e-14, Q=4.00000000000005184742e-01
2016.11.10 17:53:32.648 TestStatNCT (EURUSD,H1) 1 5, PDF=3.70864175555731463525e-13, CDF=4.19192812277470617962e-14, Q=5.0000000000000000e-01,
2016.11.10 17:53:32.649 TestStatNCT (EURUSD,H1) 1 6, PDF=9.16615229573755101565e-13, CDF=1.02187737277044947465e-13, Q=5.99999999999998867573e-01,
2016.11.10 17:53:32.651 TestStatNCT (EURUSD,H1) 1 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.99999999999999289457e-01,
2016.11.10 17:53:32.652 TestStatNCT (EURUSD,H1) 1 8, PDF=5.7160930393970751591223e-12, CDF=6.25821417361289428232e-13, Q=7.99999999999999299967253e-01,
2016.11.10 17:53:32.653 TestStatNCT (EURUSD,H1) 1 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.999999999999999998578915e-01,
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) 1 10, PDF=3.59391445912256345050e-11, CDF=3.91468724033560601170e-12, Q=9.99999999999998889777e-01,
2016.11.10 17:53:32.655 TestStatNCT (EURUSD,H1) Test de distribution T non central : Test 2 : Calculs sur les tableaux
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 0, PDF=4.92773299108629100851e-15, CDF=6.23274905782904190070e-16, Q=1.51119154775858715131e-18,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 1, PDF=1.130226163094897516453e-14, CDF=1.38993895779573769266e-15, Q=9.999999999989369615e-02,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 2, PDF=2.64161256619123119969e-14, CDF=3.16755115913693189175e-15, Q=2.00000000000000004840572e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 3, PDF=6.28106243570810575054e-14, CDF=7.3638179090305861902898e-15, Q=2.9999999999999998601119e-01
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 4, PDF=1.5163698393962646374250e-13, CDF=1.743039359090744906969191e-14, Q=4.00000000000005184742e-01
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 5, PDF=3.70864175555731463525e-13, CDF=4.19192812277470617962e-14, Q=5.0000000000000000e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 6, PDF=9.16615229573755101565e-13, CDF=1.02187737277044947465e-13, Q=5.99999999999998867573e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 7, PDF=2.28327725393015114329e-12, CDF=2.51850847368662607692e-13, Q=6.99999999999999289457e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 8, PDF=5.7160930393970751591223e-12, CDF=6.25821417361289428232e-13, Q=7.99999999999999299967253e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 9, PDF=1.43395037240077606742e-11, CDF=1.56338059375202603523e-12, Q=8.999999999999999998578915e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) 2 10, PDF=3.59391445912256345050e-11, CDF=3.91468724033560601170e-12, Q=9.99999999999998889777e-01,
2016.11.10 17:53:32.665 TestStatNCT (EURUSD,H1) Test de distribution T non central : Test 3 : fonctions surchargées de type R
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 0, PDF=-3.29438973521509552711e+01, CDF=-3.50115439911437320575e+01, Q=9.32008491370933962264e-15,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 1, PDF=-3.21137735448868468468779e+01, CDF=-3.42095165639872504926e+01, Q=9.9999999999999992561506e-02
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 2, PDF=-3.12648017507063613607e+01, CDF=-3.33858176105613679852e+01, Q=2.00000000000004563017e-01
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 3, PDF=-3.03986521580849320401e+01, CDF=-3.25421978598387227066e+01, Q=2.9999999999999998490097e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 4, PDF=-2.95172869939179705057e+01, CDF=-3.16805609544090991392e+01, Q=4.00000000000005240253e-01
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 5, PDF=-2.86229405029589081266e+01, CDF=-3.08030305013295588878e+01, Q=5.0000000000000000e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 6, PDF=-2.77180886076848480570e+01, CDF=-2.99119647118446110312e+01, Q=5.9999999999999998756550e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 7, PDF=-2.680540931294946693489897e+01, CDF=-2.90099393581479034765e+01, Q=6.999999999999999999400480e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 8, PDF=-2.58877355789277032727e+01, CDF=-2.80997113402901490531e+01, Q=7.99999999999999489297e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 9, PDF=-2.49680028891657173062e+01, CDF=-2.71841705920503962091e+01, Q=8.9999999999999998689937e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) 3 10, PDF=-2.40491940358795979979193e+01, CDF=-2.62662856772029869035e+01, Q=9.99999999999998889777e-01,
2016.11.10 17:53:32.676 TestStatNCT (EURUSD,H1) Test de distribution T non central : Test 4 : Générateurs de valeurs aléatoires
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Test de distribution T non centrale réussi.
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Test de distribution T non central : erreur max PDF : 1.48634016318122160328e-25
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Test de distribution T non central : erreur max CDF : 2.759664393722392108e-18
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Test de distribution T non central : Erreur max du quantile : 5.16253706450697791297e-15
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Test de distribution T non central : PDF chiffres corrects : 24
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Test de distribution T non central : CDF chiffres corrects : 17
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) Test de distribution T non central : Quantile des chiffres corrects : 14
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1)
2016.11.10 17:53:32.683 TestStatNCT (EURUSD,H1) 1 de 1 passé

Résultat du script TestStatNCT.mq5 (test de TestStat.mq5, ajout de la sortie des valeurs calculées dans la fonction TestNoncentralTDistribution)

Comme on peut le voir, les quantiles sont abordés et les tests sont réussis.

Quant aux erreurs, elles sont les suivantes :

//--- precision
double calc_precision_pdf=10 E-15;
double calc_precision_cdf=10 E-15;
double calc_precision_quantile=10 E-14;

Dans Denise Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions : noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", il a été démontré que l'algorithme AS 243 comporte des erreurs :


Il y a donc des erreurs dans R et leur cause probable se trouve dans l'algorithme AS 243, qui est utilisé pour calculer la CDF.

Dossiers :
TestStatNCT.mq5  16 kb
 
Quantum:

1)Il ne s'agit pas de Wolfram. L'intégrale des valeurs positives non nulles ne peut pas être nulle.

2)Il y a également eu des erreurs dans les algorithmes pendant les tests.

3)Par exemple, pour une distribution t non centrale, les quantiles ne sont pas réversibles :


1 - Si vous écrivez également sur une erreur concernant la distribution gamma, alors je vous adresse ma réclamation. Il est incorrect de dire que dans R c'est avec erreur. Je vois une tentative d'étiquetage dans ce post. Apparemment, vous n'avez pas consulté les universitaires qui utilisent les paquets et qui n'y voient aucune erreur. La fonction en Python produit également 1 densité en zéro.

Encore une fois. La valeur de la densité n'est pas définie à zéro. Wolfram pense que c'est 0 et vous êtes simplement d'accord avec cela sans faire de déductions indépendantes.

Vous dites que le tungstène n'a rien à voir avec cela, mais vous ne pouvez pas répondre à ma question sur la multiplication de zéro à la puissance zéro. Au lieu de cela, vous me montrez du tungstène...

Vous voyez vous-même que dans la bonne approximation, la valeur atteint l'unité, ce qui signifie que l'intégrale dans l'approximation n'est pas non plus nulle. Et elle n'est pas à zéro, pas plus que la densité, car cela n'a aucun sens d'intégrer une quantité indéterminée.

2 - Ce résultat peut être vérifié de manière plus approfondie et une erreur dans l'algorithme peut être établie, par exemple.

3)Par exemple, il peut être vérifié.

 
Quantum:


Par exemple, pour la distribution t non centrale, les quantiles ne sont pas inversés :


Les quantiles 0-0.6 ne sont pas calculés correctement ici.

> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf [1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf [1] 6.220961e-16 1.388760e-15 3,166372e-15 7,362630e-15 1,742915e-14 4,191776e-14 1,021850e-13 [8] 2,518433e-13 6,257956e-13 1,563360e-12 3,914610e-12> k [1] 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1.0> nt_quantile [1] -Inf -1,340781e+154 -1,340781e+154-1,340781e+154 -1,340781e+154 [7] -1,340781e+154 7 ,000000e-01 8,000000e-01 9,000000e-01
Désolé, où dans votre code la variable nt_quantile est-elle initialisée ? c'est-à-dire d'où vient-elle ?
 

1) Comment expliquer qu'en un point cdf=0, alors que pdf est non nul ?

> n <- 5> k <- seq(0,1,by=1/n)> gamma_pdf<-dgamma(k, 1,1, log = FALSE)> gamma_cdf<-pgamma(k, 1,1, log = FALSE)> k[1] 0.0 0.2 0.4 0.6 0,8 1,0> gamma_pdf[1] 1,0000000 0,8187308 0,6703200 0,5488116 0,4493290 0,3678794> gamma_cdf[1] 0,0000000 0,1812692 0,3296800 0,4511884 0,5506710 0,6321206

2) Comment expliquer que les quantiles ne correspondent pas à ceux d'origine ?

> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf [1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf [1] 6.220961e-16 1.388760e-15 3,166372e-15 7,362630e-15 1,742915e-14 4,191776e-14 1,021850e-13 [8] 2,518433e-13 6,257956e-13 1,563360e-12 3,914610e-12> k [1] 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1.0> nt_quantile [1] -Inf -1,340781e+154 -1,340781e+154 -1,340781e+154 -1,340781e+154 [7] -1,340781e+154 7,000000e-01 8,000000e-01 9,000000e-01
 
Alexey Burnakov:
Désolé, où dans votre code la variable nt_quantile est-elle initialisée ? c'est-à-dire d'où vient-elle ?

Désolé, il y avait une coquille dans le script, je l'ai corrigée.

Le script est le suivant :

> n <- 10> k <- seq(0,1,by=1/n)> nt_pdf<-dt(k, 10,8, log = FALSE)> nt_cdf<-pt(k, 10,8, log = FALSE)> nt_quantile<-qt(nt_cdf, 10,8, log = FALSE)> nt_pdf [1] 4.927733e-15 1.130226e-14 2.641608e-14 6.281015e-14 1.516342e-13 3.708688e-13 9.166299e-13 [8] 2.283319e-12 5.716198e-12 1.433893e-11 3.593699e-11> nt_cdf [1] 6.220961e-16 1.388760e-15 3,166372e-15 7,362630e-15 1,742915e-14 4,191776e-14 1,021850e-13 [8] 2,518433e-13 6,257956e-13 1,563360e-12 3,914610e-12> k [1] 0,0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1.0> nt_quantile [1] -Inf -1.340781e+154 -1.340781e+154 -1.340781e+154 -1.340781e+154 -1.340781e+154 [7] -1.340781e+154 7.000000e-01 8.000000e-01 9.000000e-01
 
Quantum:

1) Comment expliquer qu'au point cdf=0, alors que pdf est non nul ?

2) Comment expliquer que les quantiles ne soient pas les mêmes que ceux d'origine ?

Je vais y réfléchir et vous répondre. Répondez-vous toujours à une question par une question ? Où en sont vos propres réflexions statistiques ?
 
Alexey Burnakov:

Le fait est que @Quantum est purement concerné par la mise en œuvre et la vérification complète de l'analogue des bibliothèques mathématiques de 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 :

L'algorithme AS 243 proposé par Lenth [Lenth, R.V., "Cumulative distribution function of the noncentral t distribution", Applied Statistics, vol. 38 (1989), 185-189]. L'avantage de cette méthode est le calcul rapide de la récurrence des termes de séries infinies avec des fonctions bêta incomplètes. Mais dans l'article [D. Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions : noncentral chisquare, noncentral t and the distribution of the square of the sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43, (2003), 249-267], il a été montré, que cet algorithme conduit à des erreurs dues à l'erreur d'évaluation de la précision lors de la sommation des termes de séries, surtout pour de grandes valeurs du paramètre delta noncentral. Les auteurs de l'article ont proposé un algorithme corrigé pour le calcul par récurrence de la probabilité de la distribution T non centrale.

Nous utilisons dans la bibliothèque statistique MQL5 l'algorithme correct de calcul des probabilités de l'article [D. Benton, K. Krishnamoorthy, "Computing discrete mixtures of continuous distributions : noncentral chisquare, noncentral t and the distribution of the sample multiple correlation coefficient", Computational Statistics & Data Analysis, 43, (2003), 249-267]. qui donne des résultats exacts.

Pour garantir l'exactitude des calculs et permettre aux développeurs tiers de vérifier la qualité de la bibliothèque, nous avons inclus plusieurs scripts de test unitaire dans la livraison. Vous pouvez les trouver dans /Scripts/UnitTests/Stat.

Regardez les dates de publication, s'il vous plaît. Vous verrez comment le travail se déroule grâce aux conseils des universitaires.

De même, ce serait une erreur de ne pas considérer @Quantum comme un scientifique.

 

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)

 
Renat Fatkhullin:

Le fait est que @Quantum est purement concerné par la mise en œuvre et la validation complète de l'analogue des bibliothèques mathématiques de 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.

En outre, ce serait une erreur de ne pas considérer @Quantum comme un scientifique.

Je n'ai rien dit à propos de cette erreur. Il y a donc il y a donc il y a donc il y a.

À propos de la distribution gamma - c'est ce que j'ai compris qu'il faisait avec votre implémentation. Et je répète que son affirmation à ce sujet est du pur littéralisme.