Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 200

 
Renat Fatkhullin:

Volvamos a la afirmación original sobre los errores de la R en el artículo.

Nuestra opinión sigue siendo la misma: hay errores, y fueron causados por un descuido en la aplicación.

Su especialista no quiere responderme sobre el fondo. Me pinchó en el tungsteno y ya está.

Repetiré nuestro punto. No hay error en la distribución gamma. Esto es una cuestión de convención en la comunidad matemática. Hay una frase de error por su parte que no es correcta.

La derivación de cero para la densidad en su versión es, en primer lugar, una de las opciones posibles (convenciones). Y en segundo lugar, la esencia del análisis aplicado de la elección de este valor (nan, 0 o 1) no afecta a nada. Las funciones de distribución se utilizan para estimar estadísticas. En ésta la distribución es nula. Y eso es suficiente.

En cuanto a la distribución de t. He reproducido este error en la última versión de R. pero no he llegado a la esencia del algoritmo. Reconozco que la corrección era realmente necesaria.

Intentaré hacer una pregunta al equipo de soporte de R.
 

Y te metes en él, lo recalculas todo, te pasas unas semanas revisándolo como hizo él. Pero en cambio, ni siquiera has leído nuestro artículo.

Por nuestra parte, hicimos el trabajo. Y hemos hecho un buen trabajo. Si Wolfram tampoco es una autoridad para ti, entonces estás perdiendo el tiempo con esta forma de comunicación.

No confundas a los creadores con los usuarios, por favor.

 
Renat Fatkhullin:

Y te metes en él, lo recalculas todo, te pasas unas semanas volviendo a comprobarlo, como hizo él. Pero en cambio, ni siquiera has leído nuestro artículo.

Por nuestra parte, hicimos el trabajo. Y hemos hecho un buen trabajo. Si Wolfram tampoco es una autoridad para ti, entonces estás perdiendo el tiempo con esta forma de comunicación.

No confundas a los creadores con los usuarios, por favor.

Respeto su opinión. Pero, ¿por qué responden por ello?

Lo diré de nuevo.

La derivación de cero para la densidad en su versión, en primer lugar, es una de las opciones posibles (convenciones). Y en segundo lugar, la esencia del análisis aplicado de la elección de este valor (nan, 0 o 1) no afecta a nada. Las funciones de distribución se utilizan para estimar estadísticas. En este punto, la distribución es cero. Y esto es suficiente.

Yo añadiría que, en general, acelerar los cálculos es una ventaja. Es decir, objetivamente la aplicación de las funciones no es peor o incluso mejor, según su artículo.
 
Espero que la parte emocional haya terminado...

He buscado por ahí 0^0. Este es exactamente el punto de controversia - contenido en la ecuación de densidad de probabilidad para la distribución gamma cuando x = 0.


En esta discusión, esta es la respuesta:
0^0 y 0! son iguales a 1 debido a la regla del producto vacío. La norma IEEE dice que 0^0 debe evaluar 1. Así que la mayoría de los programas informáticos lo evaluarán así. No hay situaciones en las que evaluar a 0 sea útil.

Hay muchas fórmulas que suponen 0^0=1, por ejemplo la notación para polinomios y series de potencias, la aritmética de los números cardinales, el teorema del binomio, etc., todos ellos suponen 0^0=1. Por ejemplo, sustituyendo x=0 en x^0+x^1+x^2+... = 1/(1-x) muestra que 0^0 = 1.

Es decir, la norma para convertir esta expresión en 1. Y no hay beneficio ni perjuicio en llevar la expresión a 0.

Creo que en R se codificó 1... y tú tienes 0.

Esa es la cuestión y no tiene sentido discutirla. Un ordenador no puede calcular el valor algebraicamente.
 
Alexey Burnakov:

La derivación de cero para la densidad en su versión es, en primer lugar, una posibilidad (convenciones).

Se puede suponer que definir una función significa especificar una forma de calcularla.

Expresión dada
Alexey Burnakov:

Además, según:

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

si x = 0, alfa = 1, beta = 1, se obtiene un valor indefinido en el numerador, lo que hace que toda la fracción entre en incertidumbre.

Afirmamos que, en sentido estricto, la densidad gamma de la distribución en el punto cero es indefinida. Y tomando el límite de la derecha, la densidad es uno.

A la luz de esto, creemos que la formulación de la afirmación "errores de cálculo en R" no es correcta. Más concretamente, se trata de una cuestión de convención: lo que debe considerarse igual a la expresión cero a la potencia de cero. Igualar la densidad de la distribución gamma a cero en el punto cero no parece ser una práctica válida.

no se ajusta a la definición de la función porque contiene una incertidumbre en el punto x=0, como has señalado.

Si se pone la condición x>=0 en lugar de x>0 entonces no hay incertidumbre y se pueden calcular los valores con esta fórmula.

En cuanto a la práctica - Mathematica y Matlab pueden considerarse como estándares de la industria para los cálculos de ingeniería, producen 0, es decir, esa expresión sólo es válida para x>0.

 
Quantum:

Podemos suponer que definir una función significa especificar una forma de calcularla.

La expresión dada es.

no es apropiado para definir una función porque contiene una incertidumbre en x=0, como has señalado.

Si se pone la condición x>=0 en lugar de x>0, no hay incertidumbre y se pueden calcular los valores con esta fórmula.

En cuanto a la práctica - Mathematica y Matlab pueden considerarse el estándar de la industria para los cálculos de ingeniería, dan 0, es decir, esa expresión sólo es verdadera para x>0.

Correcto. La función se define en el área positiva (0,inf).

¿Por qué sigue teniendo 0 en el punto 0? y ¿por qué el error es un 1?


Por cierto, interesante. El tungsteno define una función de probabilidad de distribución gamma en el espacio [0,inf]. Y así dan un cierto valor a cero... Lo cual es extraño.


 
Quantum:

Mathematica y Matlab pueden considerarse el estándar de la industria para los cálculos de ingeniería

Has tomado una situación para la que no hay solución, has buscado el resultado que devuelve Wolfram y has calificado de erróneos todos los demás resultados. No se trata de cálculos de ingeniería, sino de un dogma.

Podrían tomar R como referencia, y escribir sobre la búsqueda de un error en Wolfram. Supongo que si tomas todo el software de matemáticas, y los divides en dos grupos basados en lo que devuelven en esta situación - habrá una división 50%/50%, puedes añadir una docena más de software que mql sobresale en un artículo sobre mql.

Gracias por los errores mencionados enAS 243. Pero no hay que achacarlo al comportamiento de otras funciones con parámetros, para las que no hay una solución clara.
Deberías haber escrito en el artículo sobre las ventajas de mql - R tiene tal o cual función que tiene un error de 15 decimales. Y tenemos otra función en mql que es más precisa. Todo sería culto y científico, no dogmático como ahora.

 
Alexey Burnakov:

¿Por qué sigue teniendo 0 en el punto 0? y ¿por qué el error es un 1?

Consideremos un ejemplo con los parámetros a=0,5, b=1 en el punto x=0

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

Si no excluimos el punto x=0, la densidad diverge y la probabilidad está bien.

Y más adelante tampoco hay ningún problema:

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

Resulta que al calcular la CDF R se excluye el punto x=0, el infinito ha desaparecido en alguna parte.

 
Quantum

¡Querido colega!

Durante varias páginas se discute sobre las diferencias entre sus algoritmos y los de R en los bordes del dominio de la función. Los puntos marginales son puntos marginales y, en la práctica, las diferencias pueden despreciarse.

Pero en este caso tengo una pregunta mucho más sustancial:

¿Dónde está la documentación de todas sus funciones?

Anteriormente, pensé que tomamos su función, luego tomamos la documentación de R, ya que sus funciones son análogas, y profundizamos en las partes de la documentación de R que describen los algoritmos, o van a los enlaces proporcionados por R. R tiene una documentación y un aparato de referencia de muy alta calidad.

En el transcurso de la discusión, descubrí que sus funciones son diferentes a las de R: son otras funciones cuyos algoritmos se basan en otras fuentes. No hay nada sobre esto en el propio artículo, ni documentación. Y nos enteramos por Renat en un contexto completamente diferente.

En la práctica, podemos sacar una conclusión inequívoca de que el código no puede ser portado de R a MQL5.

Y he aquí por qué.

Tengo claro que si dice "análogo de R" y no hay documentación sobre el análogo, entonces es 100% análogo y puedo transferir fácilmente el código del intérprete al compilador sin preocuparme. Y si no es así, es suficiente para acabar con la idea de portar código de R a MQL5. Nadie quiere tener un dolor de cabeza completamente muerto cuando al transferir el código de trabajo a R se obtiene un código MQL que no funciona debido a sutilezas en la implementación de los algoritmos.

 
SanSanych Fomenko:

¿Dónde está la documentación de todas sus funciones?

Anteriormente, pensé que tomamos su función, luego tomamos la documentación de R, ya que sus funciones son análogas, y vamos a las partes de la documentación de R que describen los algoritmos, o van a los enlaces proporcionados por R. R tiene una documentación y un aparato de referencia de muy alta calidad.

En el transcurso de la discusión, descubrí que sus funciones son diferentes a las de R: son otras funciones cuyos algoritmos se basan en otras fuentes. No hay nada sobre esto en el propio artículo, ni documentación. Y nos enteramos por Renat en un contexto completamente diferente.

En la práctica, podemos sacar una conclusión inequívoca de que el código no puede ser portado de R a MQL5.

Y he aquí por qué.

Tengo claro que si dice "análogo de R" y no hay documentación sobre el análogo, entonces es 100% análogo y puedo transferir fácilmente el código del intérprete al compilador sin preocuparme. Y si no es así, es suficiente para acabar con la idea de portar código de R a MQL5. Nadie quiere llegar a un punto muerto completo, cuando después de la migración del código de trabajo en R se obtiene el código MQL, que no funciona debido a las sutilezas en la implementación de algoritmos.

Por el momento, las funciones se describen en el artículo https://www.mql5.com/ru/articles/2742

Considere el cálculo de una distribución normal con parámetros mu=2, sigma=1 como ejemplo:

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) El análogo de la función R dnorm() es una función:

La función calcula los valores de la función de densidad de probabilidad de la distribución normal con los parámetros mu y sigma para el conjunto de variables aleatorias x[]. En caso de error devuelve false. Un análogo de 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) Pnorma analógica:

La función calcula el valor de la función de distribución normal con los parámetros mu y sigma para el array de variables aleatorias x[]. En caso de error, devuelve false. Análogo 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) Análogo de qnorm:

Esta función calcula los valores de la función inversa de la distribución normal con los parámetros mu y sigma para el array de valores probability[]. En caso de error, devuelve false. El análogo de qnorm() en 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] Массив со значениями квантилей
);

Este es un ejemplo de cómo utilizarlo:

#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]);
  }

Resultado:

2016.11.11:56:46.413 Prueba (EURUSD,H1) 1 0, x=0.0000000000000000e+00 PDF=5.39909665131880628364e-02, CDF=2.27501319481792120547e-02, Q=0.0000000000000000e+00,
2016.11.11 11:56:46.413 Prueba (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 Prueba (EURUSD,H1) 1 2, x=2.00000000000000011102e-01 PDF=7.89501583008941493214e-02, CDF=3.593031911292598098213e-02, Q=2.0000000000177636e-01
2016.11.11 11:56:46.413 Prueba (EURUSD,H1) 1 3, x=2.9999999999988898e-01 PDF=9.40490773768869470217e-02, CDF=4.456546247585430410108e-02, Q=3.0000000000266454e-01
2016.11.11 11:56:46.413 Prueba (EURUSD,H1) 1 4, x=4.00000000000000022204e-01 PDF=1.109208346794543315e-01, CDF=5.47992916995579740225e-02, Q=3.99999999911182e-01
2016.11.11:56:46.413 Prueba (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 Prueba (EURUSD,H1) 1 6, x=5.99999999999999977796e-01 PDF=1.49727465635744877437e-01, CDF=8.07566592337710387195e-02, Q=6.0000000000310862e-01
2016.11.11 11:56:46.413 Prueba (EURUSD,H1) 1 7, x=6.999999999999955591e-01 PDF=1.71368592047807355438e-01, CDF=9.68004845856103440793e-02, Q=7.0000000000177636e-01
2016.11.11:56:46.413 Prueba (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 Prueba (EURUSD,H1) 1 9, x=9.000000000000022204e-01 PDF=2.17852177032550525793e-01, CDF=1.356660946382671659e-01, Q=9.0000000000133227e-01
2016.11.11:56:46.413 Prueba (EURUSD,H1) 1 10, x=1.00000000000000000000e+00 PDF=2.41970724519143365328e-01, CDF=1.58655253931457046468e-01, Q=1.0000000000000000e+00,

Resultado del cálculo 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.7 0.8 0.9 1.0
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее
  • 2016.10.06
  • MetaQuotes Software Corp.
  • www.mql5.com
Рассмотрены функции для работы с основными статистическими распределениями, реализованными в языке R. Это распределения Коши, Вейбулла, нормальное, логнормальное, логистическое, экспоненциальное, равномерное, гамма-распределение, центральное и нецентральные распределения Бета, хи-квадрат, F-распределения Фишера, t-распределения Стьюдента, а также дискретные биномиальное и отрицательное биномиальные распределения, геометрическое, гипергеометрическое и распределение Пуассона. Есть функции расчета теоретических моментов распределений, которые позволяют оценить степень соответствия реального распределения модельному.
Archivos adjuntos:
Test.mq5  2 kb