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

 
Renat Fatkhullin:

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

Notre avis est toujours le même : des erreurs sont présentes, et elles ont été causées par une négligence dans la mise en œuvre.

Votre spécialiste ne veut pas me répondre sur le fond. Il m'a juste piqué dans le tungstène et c'est tout.

Je vais répéter notre point de vue. Il n'y a pas d'erreur sur la distribution gamma. C'est une question de convention dans la communauté mathématique. Il y a une phrase d'erreur de votre part qui n'est pas correcte.

La dérivation de zéro pour la densité dans votre version est, premièrement, une des options possibles (conventions). Et deuxièmement, l'essence de l'analyse appliquée du choix de cette valeur (nan, 0 ou 1) ne change rien. Les fonctions de distribution sont utilisées pour estimer les statistiques. Dans celui-ci, la distribution est nulle. Et c'est suffisant.

Concernant la distribution de t. J'ai reproduit cette erreur sur la dernière version de R. mais je ne suis pas entré dans l'essence de l'algorithme. J'admets que la correction était vraiment nécessaire.

Je vais essayer de poser une question à l'équipe de support R.
 

Et vous y allez, vous recalculez tout, vous passez quelques semaines à tout revérifier comme il l'a fait. Mais au lieu de cela, vous n'avez même pas lu notre article.

Pour notre part, nous avons fait le travail. Et nous avons fait du bon travail. Si Wolfram n'est pas non plus une autorité pour vous, alors vous perdez votre temps avec cette façon de communiquer.

Ne confondez pas les créateurs et les utilisateurs, s'il vous plaît.

 
Renat Fatkhullin:

Et vous y allez, vous recalculez tout, vous passez quelques semaines à le revérifier comme il l'a fait. Mais au lieu de cela, vous n'avez même pas lu notre article.

Pour notre part, nous avons fait le travail. Et nous avons fait du bon travail. Si Wolfram n'est pas non plus une autorité pour vous, alors vous perdez votre temps avec cette façon de communiquer.

Ne confondez pas les créateurs et les utilisateurs, s'il vous plaît.

Je respecte votre opinion. Mais pourquoi en répondre ?

Je vais le répéter.

La dérivation de zéro pour la densité dans votre version, tout d'abord, est l'une des options possibles (conventions). Et deuxièmement, l'essence de l'analyse appliquée du choix de cette valeur (nan, 0 ou 1) ne change rien. Les fonctions de distribution sont utilisées pour estimer les statistiques. A ce stade, la distribution est nulle. Et c'est suffisant.

J'ajouterais qu'en général, l'accélération des calculs est un plus. C'est-à-dire qu'objectivement la mise en œuvre des fonctions n'est pas pire ou même meilleure, selon votre article.
 
J'espère que la partie émotionnelle est terminée...

J'ai cherché autour de moi pour 0^0. C'est exactement le point litigieux - contenu dans l'équation de la densité de probabilité pour la distribution gamma lorsque x = 0.


Dans cette discussion, c'est la réponse :
0^0 et 0 ! sont égaux à 1 à cause de la règle du produit vide. La norme IEEE dit que 0^0 doit évaluer 1. La plupart des logiciels l'évaluent donc de cette façon. Il n'y a aucune situation où l'évaluation à 0 est utile.

Il existe de nombreuses formules qui supposent que 0^0=1, par ex. notation pour les polynômes et les séries de puissance, l'arithmétique des nombres cardinaux, le théorème binomial, etc., tous ces éléments supposent 0^0=1. Par exemple, en substituant x=0 dans x^0+x^1+x^2+... = 1/(1-x) montre que 0^0 = 1.

C'est-à-dire la norme pour convertir cette expression en 1. Et il n'y a aucun avantage ou inconvénient à ramener l'expression à 0.

Je pense que dans R hardcoded 1... et vous avez 0.

C'est le problème et il n'y a pas lieu d'en discuter. Un ordinateur ne peut pas calculer la valeur algébriquement.
 
Alexey Burnakov:

La dérivation du zéro pour la densité dans votre version est, tout d'abord, une possibilité (conventions).

On peut supposer que définir une fonction signifie spécifier une façon de la calculer.

Expression donnée
Alexey Burnakov:

En outre, selon :

https://en.wikipedia.org/wiki/Gamma_distribution

lorsque x = 0, alpha = 1, beta = 1, on obtient une valeur indéfinie au numérateur, ce qui fait entrer toute la fraction dans l'incertitude.

Nous affirmons qu'à proprement parler, la densité gamma de la distribution au point zéro est indéfinie. Et en prenant la limite à droite, la densité est égale à un.

A la lumière de ces éléments, nous pensons que la formulation de l'affirmation "erreurs de calcul dans R" n'est pas correcte. Plus précisément, c'est une question de convention : ce qui doit être considéré comme égal à l'expression zéro puissance zéro. L'égalisation de la densité de la distribution gamma à zéro au point zéro ne semble pas être une pratique valable.

ne correspond pas à la définition de la fonction car elle contient une incertitude au point x=0, comme vous l'avez souligné.

Si la condition x>=0 est mise au lieu de x>0, il n'y a pas d'incertitude et vous pouvez calculer les valeurs en utilisant cette formule.

En ce qui concerne la pratique - Mathematica et Matlab peuvent être considérés comme des normes industrielles pour les calculs d'ingénierie, ils produisent 0, c'est-à-dire que cette expression n'est valable que pour x>0.

 
Quantum:

Nous pouvons supposer que définir une fonction signifie spécifier une façon de la calculer.

L'expression donnée est.

n'est pas approprié pour définir une fonction car il contient une incertitude à x=0, comme vous l'avez souligné.

Si vous mettez la condition x>=0 au lieu de x>0, il n'y a pas d'incertitude et vous pouvez calculer des valeurs en utilisant cette formule.

En ce qui concerne la pratique - Mathematica et Matlab peuvent être considérés comme la norme industrielle pour les calculs d'ingénierie, ils donnent 0, c'est-à-dire que cette expression n'est vraie que pour x>0.

Correct. La fonction est définie sur la zone positive (0,inf).

Pourquoi avez-vous toujours 0 au point 0 ? et pourquoi l'erreur est de 1 ?


Au fait, intéressant. Le tungstène définit une fonction de probabilité de distribution gamma sur l'espace [0,inf]. Et donc ils donnent une certaine valeur à zéro... Ce qui est étrange.


 
Quantum:

Mathematica et Matlab peuvent être considérés comme la norme industrielle pour les calculs d'ingénierie.

Vous avez pris une situation pour laquelle il n'y a pas de solution, vous avez cherché le résultat que Wolfram renvoie, et vous avez qualifié tous les autres résultats de faux. Il ne s'agit pas de calculs d'ingénierie, mais de dogmes.

Ils pourraient prendre R comme référence, et écrire sur la recherche d'une erreur dans Wolfram. Je suppose que si vous prenez tous les logiciels de mathématiques, et que vous les divisez en deux groupes en fonction de ce qu'ils rapportent dans cette situation - il y aura une répartition 50%/50%, vous pouvez ajouter une douzaine d'autres logiciels que mql excelle dans un article sur mql.

Merci pour les erreurs mentionnées dans l'AS 243. Mais il ne faut pas lui reprocher le comportement d'autres fonctions avec paramètres, pour lesquelles il n'existe pas de solution claire.
On aurait donc dû écrire dans l'article sur les avantages de mql - regardez, dans R il y a une fonction qui a une erreur de 15 décimales. Et nous avons une autre fonction dans mql qui est plus précise. Tout serait cultivé et scientifique, et non dogmatique comme aujourd'hui.

 
Alexey Burnakov:

Pourquoi avez-vous toujours 0 au point 0 ? et pourquoi l'erreur est de 1 ?

Considérons un exemple avec les paramètres a=0.5, b=1 au point x=0.

> dgamma(0,0.5,1,log=FALSE)[1] Inf> pgamma(0,0.5,1,log=FALSE)[1] 0

Si on n'exclut pas le point x=0, la densité diverge et la probabilité est OK.

Et plus loin, il n'y a pas de problème non plus :

> pgamma(0.00001,0.5,1,log=FALSE)[1] 0.003568236

Il s'avère que lorsque le calcul de la CDF R exclut le point x=0, l'infini a disparu quelque part.

 
Quantum

Cher collègue !

Pendant plusieurs pages, il y a un débat sur les différences entre vos algorithmes et ceux de R sur les bords du domaine de la fonction. Les points marginaux sont des points marginaux et, dans la pratique, les différences peuvent être négligées.

Mais dans ce cas, j'ai une question beaucoup plus substantielle :

Où est la documentation pour toutes vos fonctions ?

Auparavant, je pensais que nous prenions votre fonction, puis la documentation de R, puisque vos fonctions sont des analogues, et que nous nous plongions dans les parties de la documentation de R qui décrivent les algorithmes, ou qui renvoient aux liens fournis par R. R dispose d'une documentation et d'un appareil de référence de très haute qualité.

Au cours de la discussion, j'ai découvert que vos fonctions sont différentes de R - ce sont d'autres fonctions dont les algorithmes reposent sur d'autres sources. Il n'y a rien à ce sujet dans l'article lui-même, aucune documentation. Et nous l'apprenons de Renat dans un contexte complètement différent.

En pratique, nous pouvons tirer une conclusion sans ambiguïté que le code ne peut pas être porté de R à MQL5.

Et voici pourquoi.

Il est clair pour moi que s'il est écrit "analogue de R" et qu'il n'y a pas de documentation sur l'analogue, alors c'est un analogue à 100% et je peux facilement transférer le code d'un interpréteur à un compilateur sans m'en soucier. Et si ce n'est pas le cas, alors un seul cas suffit pour mettre un terme à l'idée de porter du code de R à MQL5. Personne ne veut se retrouver dans une impasse totale lorsque, en transférant un code fonctionnel vers R, on obtient un code MQL qui ne fonctionne pas en raison de subtilités dans la mise en œuvre des algorithmes.

 
SanSanych Fomenko:

Où est la documentation pour toutes vos fonctions ?

Auparavant, je pensais que nous prenions votre fonction, puis la documentation de R, puisque vos fonctions sont analogues, et que nous allions dans les parties de la documentation de R qui décrivent les algorithmes, ou qui renvoient aux liens fournis par R. R dispose d'une documentation et d'un appareil de référence de très haute qualité.

Au cours de la discussion, j'ai découvert que vos fonctions sont différentes de R - ce sont d'autres fonctions dont les algorithmes reposent sur d'autres sources. Il n'y a rien à ce sujet dans l'article lui-même, aucune documentation. Et nous l'apprenons de Renat dans un contexte complètement différent.

En pratique, nous pouvons tirer une conclusion sans ambiguïté que le code ne peut pas être porté de R à MQL5.

Et voici pourquoi.

Il est clair pour moi que s'il est écrit "analogue de R" et qu'il n'y a pas de documentation sur l'analogue, alors c'est un analogue à 100% et je peux facilement transférer le code d'un interpréteur à un compilateur sans m'en soucier. Et si ce n'est pas le cas, c'est suffisant pour mettre un terme à l'idée de porter du code de R à MQL5. Personne ne veut se retrouver dans une impasse complète, lorsqu'après la migration du code de travail vers R, vous obtenez du code MQL, qui ne fonctionne pas en raison des subtilités de la mise en œuvre des algorithmes.

Pour le moment, les fonctions sont décrites dans l'article https://www.mql5.com/ru/articles/2742.

Prenons comme exemple le calcul d'une distribution normale avec les paramètres mu=2, sigma=1 :

n <- 10
k <- seq(0,1,by=1/n)
mu=2
sigma=1
normal_pdf<-dnorm(k, mu, sigma, log = FALSE)
normal_cdf<-pnorm(k, mu, sigma, lower.tail=TRUE,log.p = FALSE)
normal_quantile <- qnorm(normal_cdf, mu,sigma, lower.tail=TRUE,log.p = FALSE)
normal_pdf
normal_cdf
normal_quantile


1) L'analogue de la fonction R dnorm() est une fonction :

La fonction calcule les valeurs de la fonction de densité de probabilité de la distribution normale avec les paramètres mu et sigma pour le tableau de variables aléatoires x[]. En cas d'erreur, il renvoie false. Analogue à dnorm() en R.

bool MathProbabilityDensityNormal(
  const double   &x[],        // [in]  Массив со значениями случайной величины
  const double   mu,          // [in]  Параметр распределения  mean (математическое ожидание)
  const double   sigma,       // [in]  Параметр распределения sigma (среднеквадратическое отклонение)
  const bool     log_mode,    // [in]  Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм плотности вероятности
  double         &result[]    // [out] Массив для значений функции плотности вероятности
);

2) Analogique pnorm :

La fonction calcule la valeur de la fonction de distribution normale avec les paramètres mu et sigma pour le tableau de variables aléatoires x[]. En cas d'erreur, elle renvoie false. Analogue de pnorm() en R.

bool MathCumulativeDistributionNormal(
  const double   &x[],        // [in]  Массив со значениями случайной величины
  const double   mu,          // [in]  Математическое ожидание
  const double   sigma,       // [in]  Среднеквадратическое  отклонение
  const bool     tail,        // [in]  Флаг расчета, если lower_tail=true, то рассчитывается вероятность того, что случайная величина не превысит x
  const bool     log_mode,    // [in]  Флаг расчета логарифма значения, если log_mode=true, то рассчитывается натуральный логарифм вероятности
  double         &result[]    // [out] Массив для значений функции вероятности
);

3) Analogue de qnorm :

Cette fonction calcule les valeurs de la fonction inverse de la distribution normale avec les paramètres mu et sigma pour le tableau de valeurs de probabilité[]. En cas d'erreur, il renvoie false. L'analogue de qnorm() dans R.

bool MathQuantileNormal(
  const double   &probability[],// [in]  Массив со значениями вероятностей случайной величины
  const double   mu,            // [in]  Математическое ожидание
  const double   sigma,         // [in]  Среднеквадратическое отклонение
  const bool     tail,          // [in]  Флаг расчета, если lower_tail=false, то расчет ведется для вероятности 1.0-probability
  const bool     log_mode,      // [in]  Флаг расчета, если log_mode=true, то расчет ведется для вероятности Exp(probability)
  double         &result[]      // [out] Массив со значениями квантилей
);

Voici un exemple de leur utilisation :

#include <Math\Stat\Normal.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- arrays for calculated values
   double x_values[];
   double normal_pdf[];
   double normal_cdf[];
   double normal_quantile[];
//--- prepare x values
   const int N=11;
   ArrayResize(x_values,N);
   for(int i=0;i<N;i++)
      x_values[i]=i*1.0/(N-1);
//--- set distribution parameters
   double mu=2.0;
   double sigma=1.0;
//--- calculate pdf, cdf and quantiles
   MathProbabilityDensityNormal(x_values,mu,sigma,false,normal_pdf);
   MathCumulativeDistributionNormal(x_values,mu,sigma,true,false,normal_cdf);
   MathQuantileNormal(normal_cdf,mu,sigma,true,false,normal_quantile);
//--- show calculated values
   for(int i=0;i<N;i++)
      PrintFormat("1 %d, x=%.20e PDF=%.20e, CDF=%.20e, Q=%.20e,",i,x_values[i],normal_pdf[i],normal_cdf[i],normal_quantile[i]);
  }

Résultat :

2016.11.11:56:46.413 Test (EURUSD,H1) 1 0, x=0.0000000000000000e+00 PDF=5.39909665131880628364e-02, CDF=2.27501319481792120547e-02, Q=0.00000000000000e+00,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 1, x=1.00000000000000005551e-01 PDF=6.56158147746765951780e-02, CDF=2.87165598160018034624e-02, Q=1.000000000000088818e-01
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 2, x=2.000000000000000000011102e-01 PDF=7.89501583008941493214e-02, CDF=3.593031911292598098213e-02, Q=2.0000000000177636e-01
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 3, x=2.999999999999988898e-01 PDF=9.40490773768869470217e-02, CDF=4.456546247585430410108e-02, Q=3.00000000000000266454e-01
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 4, x=4.00000000000000022204e-01 PDF=1.1092083434679455543315e-01, CDF=5.47992916995579740225e-02, Q=3.999999999999999999911182e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 5, x=5.0000000000000000e-01 PDF=1.29517595665891743772e-01, CDF=6.68072012688580713080e-02, Q=5.0000000000222045e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 6, x=5.999999999999999999977796e-01 PDF=1.49727465635744877437e-01, CDF=8.07566592337710387195e-02, Q=6.00000000000000310862e-01
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 7, x=6.99999999999999955591e-01 PDF=1.71368592047807355438e-01, CDF=9.68004845856103440793e-02, Q=7.00000000000000177636e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 8, x=8.000000000000044409e-01 PDF=1.94186054983212952330e-01, CDF=1.15069670221708289515e-01, Q=8.000000000000044409e-01,
2016.11.11 11:56:46.413 Test (EURUSD,H1) 1 9, x=9.000000000000022204e-01 PDF=2.1785217177032550525793e-01, CDF=1.35666060946382671659e-01, Q=9.000000000000133227e-01
2016.11.11:56:46.413 Test (EURUSD,H1) 1 10, x=1.00000000000000000000e+00 PDF=2.41970724519143365328e-01, CDF=1.58655253931457046468e-01, Q=1.0000000000000000e+,

Résultat du calcul en R :

> n <- 10> k <- seq(0,1,by=1/n)> mu=2> sigma=1> normal_pdf<-dnorm(k, mu, sigma, log = FALSE)> normal_cdf<-pnorm(k, mu, sigma, lower.tail=TRUE,log.p = FALSE)> normal_quantile <- qnorm(normal_cdf, mu,sigma, lower.tail=TRUE,log.p = FALSE)> normal_pdf [1] 0.05399097 0.06561581 0.07895016 0.09404908 0.11092083 0.12951760 0.14972747 0.17136859 [9] 0.19418605 0.21785218 0.24197072> normal_cdf [1] 0.02275013 0.02871656 0.03593032 0.04456546 0.05479929 0.06680720 0.08075666 0.09680048 [9] 0.11506967 0.13566606 0.15865525> normal_quantile [1] 0.0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
  • 2016.10.06
  • MetaQuotes Software Corp.
  • www.mql5.com
Рассмотрены функции для работы с основными статистическими распределениями, реализованными в языке R. Это распределения Коши, Вейбулла, нормальное, логнормальное, логистическое, экспоненциальное, равномерное, гамма-распределение, центральное и нецентральные распределения Бета, хи-квадрат, F-распределения Фишера, t-распределения Стьюдента, а также дискретные биномиальное и отрицательное биномиальные распределения, геометрическое, гипергеометрическое и распределение Пуассона. Есть функции расчета теоретических моментов распределений, которые позволяют оценить степень соответствия реального распределения модельному.
Dossiers :
Test.mq5  2 kb