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

 
Alexey Burnakov:

Comenta entonces, por orden de literalidad, cómo para una distribución continua uniforme la densidad en el punto extremo es positiva y la integral es cero: https://en.wikipedia.org/wiki/Uniform_distribution_(continuo)

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

Nuestra opinión se mantiene: hay errores y están causados por el descuido en la aplicación.

 
Renat Fatkhullin:

La cuestión es que @Quantum es una implementación pura y una comprobación completa del análogo de la biblioteca matemática R en MQL5.

Este no es el razonamiento de un teórico. Y profundiza en la escritura de las pruebas unitarias que proporcionan la garantía de que la biblioteca es correcta.


No hay que asumir a priori que todo es correcto en R. Por el contrario, yo diría que aunque haya una implementación de las funciones en C++, todo es bastante primitivo. Y en términos de velocidad, se puede ver que la biblioteca MQL5 en el código fuente en nuestro compilador gana por 3 veces en promedio.

Nos hemos tomado la molestia de comprobarlo todo y hemos encontrado errores evidentes. Estos errores han sido confirmados:

Mira las fechas de las publicaciones, por favor. Verás cómo el trabajo se desarrolla con el asesoramiento de los científicos.

Además, sería un error no considerar a @Quantum un científico.

¡Querido Renat!

Tengo las siguientes preguntas sobre sus últimos posts, que son cuestiones de principio para mí:

1. A juzgar por la fecha de publicación de su artículo, es el año 2003. Naturalmente, R, al igual que cualquier otro sistema de software, tiene errores y siempre se publica una lista de correcciones tras su lanzamiento. Al mismo tiempo, R siempre ha hecho hincapié en que el bajo nivel de errores debido al número extremadamente grande de usuarios es una virtud de R. Y aquí desde 2003 se ha detectado un error en el algoritmo a nivel de publicación y no se ha arreglado. Esto no está claro para mí.

¿Has hecho una consulta a R sobre este tema?

2. Me gustaría ver el código con el que se comparó el rendimiento de R y MQL5.

Se lo agradezco de antemano.

 
SanSanych Fomenko:

¡Querido Renat!

Tengo las siguientes preguntas sobre tus últimos posts, que son fundamentales para mí:

1. A juzgar por la fecha de publicación del artículo, se trata de 2003. Naturalmente, R, al igual que cualquier otro sistema de software, tiene errores y siempre se publica una lista de correcciones tras su lanzamiento. Al mismo tiempo, R siempre ha hecho hincapié en el bajo nivel de errores debido al gran número de usuarios como ventaja de R. Y aquí desde 2003 se ha detectado un error en el algoritmo a nivel de publicación y no se ha arreglado. Esto no está claro para mí.

Es elemental y absolutamente claro.

Todo el mundo comete errores, eso es lo que hacen los desarrolladores. Cometemos muchos errores y no nos desanimamos.

Este error en R es sólo por descuido y por confiar en una función básica que estropea las demás. Se corregirá.

¿Has hecho una petición a R sobre este tema?

Hemos realizado pruebas, hemos estudiado todo en detalle mientras escribíamos la biblioteca, hemos comparado constantemente los resultados entre MQL5 - Wolfram Alpha - R, hemos mostrado nuestros resultados y estamos dispuestos a responder por ellos públicamente. Por supuesto, hemos adjuntado tres grandes scripts con pruebas unitarias y un benchmark a nuestro paquete matemático (que está en el código fuente).

Estoy seguro de que @Quantum escribirá un informe de errores en R. El artículo actualizado se publicó hace apenas un par de horas.


Me gustaría ver el código que compara el rendimiento de R y MQL5.

El código del benchmark para MQL5 se puede encontrar en \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 y el código de R se puede encontrar al final del artículo Distribuciones estadísticas en MQL5 - tomar lo mejor de R y hacerlo más rápido, ver "Apéndice. Resultados del cálculo de la línea de tiempo de las funciones estadísticas".

Asegúrese de actualizar a MetaTrader 5 build 1467 conectándose al servidor MetaQuotes-Demo, por favor. En esta versión beta hemos incluido la nueva biblioteca y todos los scripts de prueba.

 
Renat Fatkhullin:

Esto es elemental y completamente comprensible.

Todo el mundo comete errores, es la naturaleza de los desarrolladores. Cometemos muchos errores y no nos desanimamos.

Este error en R es sólo por el descuido y la confianza en una función básica que arruinó otras. Se corregirá.

Hemos realizado pruebas, hemos estudiado todo en detalle mientras escribíamos la biblioteca, hemos comparado constantemente los resultados entre MQL5 - Wolfram Alpha - R, hemos mostrado nuestros resultados y estamos dispuestos a responder por ellos públicamente. Por supuesto, hemos adjuntado tres grandes scripts con pruebas unitarias y un benchmark a nuestro paquete matemático (que está en el código fuente).

Estoy seguro de que @Quantum escribirá un informe de errores en R. El artículo actualizado se publicó hace apenas un par de horas.


El código del benchmark en MQL5 se puede encontrar en \Scripts\UnitTests\Stat\TestStatBenchmark.mq5 y el código en R se puede encontrar al final del artículo Distribuciones estadísticas en MQL5 - tomar lo mejor de R y hacerlo más rápido en "Apéndice. Resultados del cálculo del tiempo de las funciones estadísticas".

Asegúrese de actualizar a MetaTrader 5 build 1467 conectándose al servidor MetaQuotes-Demo, por favor. En esta versión beta hemos incluido la nueva biblioteca y todos los scripts de prueba.

Todavía no puedo formarme una opinión propia sobre la comparación del rendimiento. Y esto es una cuestión de principios.

La cuestión es que R es un entorno ideal para el desarrollo, un intérprete en una palabra. Pero el código que existe durante el desarrollo es muy diferente del código de trabajo, por el número de líneas muchas veces. Y el código de trabajo, en cambio, es muy breve y muy amplio. Por lo tanto, debemos comparar en cualquier función de los paquetes, que tienen sentido al tomar decisiones de comercio, por ejemplo, randomforest, que utilizan algoritmos computacionalmente capacitados, operaciones de matriz, la carga de todos los núcleos....

PS.

Está utilizando una versión obsoleta de R. Debe tomar la versión 3.3.1 de R (2016-06-21) del sitio web MRAN - Microsofn R Open. Es obligatorio instalar MKL al hacerlo. Microsoft afirmó en la mencionada versión de R que era capaz de aumentar la velocidad de ejecución de algunos paquetes y funciones hasta 50 (!) veces.

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:

Todavía no puedo formarme una opinión sobre la comparación del rendimiento. Y esto es una cuestión de principios.

La cuestión es que R es un entorno ideal para el desarrollo, un intérprete en una palabra. Pero el código que existe durante el desarrollo es muy diferente del código de trabajo, por el número de líneas muchas veces. Y el código de trabajo, en cambio, es muy breve y muy amplio. Por eso debemos comparar en cualquier función de los paquetes, que tienen sentido mientras se toman las decisiones comerciales, por ejemplo, randomforest, que utilizan algoritmos computacionales de gran capacidad, operaciones matriciales, carga de todos los núcleos....

Traducimos metódicamente las características de R a MQL5. Y de tal manera que la esencia de las llamadas de función resulta ser muy similar.

Este es un ejemplo de la correspondencia del artículo:


Distribución
Funciones MQL5
Funciones R
1Normal
MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2Beta
MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
3Binomio
MathProbabilityDensityBinomial
MathCumulativeDistributionBinomial
MathQuantileBinomial
MathRandomBinomial
dbinom
pbinom
qbinom
rbinom
4
Cauchy
MathProbabilityDensityCauchy
MathCumulativeDistributionCauchy
MathQuantileCauchy
MathRandomCauchy
dcauchy
pcauchy
qcauchy
rcauchy
5Chi-cuadrado
MathProbabilityDensityChiSquare
MathCumulativeDistributionChiSquare
MathQuantileChiSquare
MathRandomChiSquare
dchisq
pchisq
qchisq
rchisq
6Exponencial
MathProbabilityDensityExponential
MathCumulativeDistributionExponential
MathQuantileExponential
MathRandomExponential
dexp
pexp
qexp
rexp
7F de Fisher
MathProbabilityDensityF
MathCumulativeDistributionF
MathQuantileF
MathRandomF
df
pf
qf
rf
8Gamma
MathProbabilityDensityGamma
MathCumulativeDistributionGamma
MathQuantileGamma
MathRandomGamma
dgamma
pgamma
qgamma
rgamma
9Geometría
MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
10Hipergeométrico
MathProbabilityDensityHypergeometric
MathCumulativeDistributionHypergeometric
MathQuantileHypergeometric
MathRandomHypergeometric
dhyper
phyper
qhyper
rhyper
11
Logística
MathProbabilityDensityLogistic
MathCumulativeDistributionLogistic
MathQuantileLogistic
MathRandomLogistic
dlogis
plogis
qlogis
rlogis
12Lognormal
MathProbabilityDensityLognormal
MathCumulativeDistributionLognormal
MathQuantileLognormal
MathRandomLognormal
dlnorm
plnorm
qlnorm
rlnorm
13Binomio negativo
MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
14Beta no central
MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
15Chi-cuadrado no central
MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
16
Decentral F
MathProbabilityDensityNoncentralF()
MathCumulativeDistributionNoncentralF()
MathQuantileNoncentralF()
MathRandomNoncentralF()
df
pf
qf
rf
17Estudiante T descentralizado
MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
18de Poisson
MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
19T Estudiante
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

Intentamos que el código de R sea casi idéntico en tamaño y tiempo a escribirlo en MQL5.

Mañana lanzaremos en beta la biblioteca gráfica y demostraremos trozos de código de igual tamaño en R y MQL5 junto con imágenes.



Está utilizando una versión obsoleta de R. Debe tomar la versión 3.3.1 de R (2016-06-21) del sitio web MRAN - Microsofn R Open. Es obligatorio instalar MKL al hacerlo. Microsoft afirmó en la mencionada versión de R que consiguió aumentar la velocidad de ejecución de algunos paquetes y funciones hasta 50 (!) veces.

Dudo que la versión de stock de R pueda acelerar de repente - el código no cambia mucho. Está claro que algunas funciones pueden acelerarse, especialmente las matriciales. Y tu afirmación confirma mi opinión de que el código en R está escrito de forma bastante descuidada en términos de rendimiento.

Si lees el artículo, verás que obtuvimos un aumento de velocidad de hasta 46 veces incluso en funciones básicas sin ningún tipo de multihilo y MKL:

Los cálculos se realizaron en un Intel Core i7-4790, CPU de 3,6 Ghz, 16 GB de RAM, Windows 10 x64. Resultados del tiempo de cálculo en microsegundos


Distribución
Tiempo MQL5
Tiempo de cálculo del PDF (µs)
Tiempo de cálculo de R
Tiempo de cálculo del PDF (µs)
PDF
R/MQL5
Tiempo de cálculo de MQL5
Tiempo de cálculo del CDF (µs)
Tiempo de cálculo de R
Tiempo de cálculo del CDF (µs)
CDF
R/MQL5
Tiempo de cálculo de MQL5
tiempo cuantificado (µs)
Tiempo de cálculo de R
tiempo de cálculo de cuantiles (µs)
Quantile
R/MQL5
Tiempo de generación de MQL5
tiempo de generación de números aleatorios (µs)
Tiempo de generación de R
tiempo de generación de números aleatorios (μs)
Al azar
R/MQL5
1
Binomio
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
Exponencial
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
Geometría
2.3
5.121
2.227
2.12
4.552
2.147
0.81
5.407
6.675
278
1078.045
3.879
8
Hipergeométrico
1.8511.095
5.997
0.9
8.819
9.799
0.75
9.957
13.28
302.55
880.356
2.91
9
Logística
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 Cuadrado
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
ChiCuadrado no 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
F no central
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
Beta no 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
Binomio negativo
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 no 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
<Cuántica R/MQL5>
7.03
<Random R/MQL5>
3.13



Pero la versión especificada se probará, por supuesto. Tanto por velocidad como por rendimiento.

 
SanSanych Fomenko:

Te equivocas con lo de "respuesta equivocada"

...

Por ejemplo, la documentación de MQL da un ejemplo sobre el arcoseno y afirma que arcoseno(2) = infinito. Esto no es exacto. Exactamente: arcsinus(2) = NaN, es decir, no hay valor numérico, arcsinus(1) = Inf, pero las cotizaciones que faltan durante la negociación = NA, es decir, deberían estar (o podrían estar durante el fin de semana) y no lo están.

Lo escribí con un poco de ironía sobre las respuestas erróneas. Debería haber añadido una cara sonriente... En realidad añadí al final que no es un bug en ambos casos, porque el comportamiento del compilador y del intérprete en áreas de funciones no definidas depende totalmente de la arquitectura del sistema y de los desarrolladores. En ese caso, es mejor devolver la nan en ese caso, por supuesto.
Es decir, no llames a una función con parámetros para los que no está definida y luego compares los resultados con los de otra biblioteca, de lo contrario puedes encontrar cientos de "bugs".

Por cierto, es interesante el ejemplo con arcsinus.
mql -
MathArcsin(1) = MathArcsin(2) = -nan(ind)

Wolfram -
Arcsin(1) = Pi/2
Arcsin(2) = algo complejo. No hay ninguna solución con un resultado válido.

R -
asin(1) = Pi/2
asin(2) = nan (la respuesta es para números reales)
asin(2+0i) = algo complejo, como en wolfram

La wiki dice que asin(1) todavía está definido(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions), puedes escribir un informe de error a servicedesk.
Pero asin(2) es una región indefinible, está bien y coincide en todas partes.

Y de nuevo sobre el último post - la división por 0 en matemáticas simples es imposible, por lo que es lógico que el script mql se cuelgue con error, no hay bugs aquí. Pero es muy extraño ver tanta meticulosidad para precisar los resultados hasta 16 decimales, y devolver nan o inf cuando dividir por cero es imposible por alguna razón. Imho necesita devolver a Inf y no atormentar a los desarrolladores con caídas repentinas de sus scripts.

 
Renat, ¿esta traducción de varias funciones de R a mql era realmente la sorpresa de la que hablabas?
 

Para desactivar el control de la división del valor real, utilice el parámetro FpNoZeroCheckOnDivision=1 en la sección [Experts] del archivo metaeditor.ini

Si este parámetro está presente, el siguiente código producirá inf

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

Por supuesto, la presencia de este parámetro no le salvará de un error de compilación al dividir por una constante 0,0
Print(1/0.0);

'0.0' - division by zero in the constant expression    s1.mq5    8    12
 
mytarmailS:
Renat, ¿fue realmente esta transferencia de algunas funciones de R a mql la sorpresa de la que hablabas?

No.

La sorpresa no tiene sentido, lo haremos todo dentro de MQL5 y MetaTrader 5.

 
Renat Fatkhullin:

Si este parámetro está presente, el siguiente código dará inf

Gracias, una configuración muy correcta. Y si divides cero entre cero obtienes nan en lugar de inf, y es aún más correcto, ¡ni siquiera esperaba tanta precisión!
Razón de la queja: