Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 199

 
Alexey Burnakov:

Comente então, por ordem de literalismo, como para uma distribuição uniforme contínua a densidade no ponto extremo é positiva e a integral é zero: https://en.wikipedia.org/wiki/Uniform_distribution_(contínuo)

Voltemos à declaração original sobre os erros R no artigo.

A nossa opinião mantém-se - há erros e eles são causados por descuido na implementação.

 
Renat Fatkhullin:

A questão é que @Quantum é uma implementação pura e uma verificação completa da biblioteca de matemática R analógica em MQL5.

Este não é o raciocínio de um teórico. E ele está cavando fundo quando escreve testes unitários que dão garantia de que a biblioteca está correta.


Não se deve assumir a priori que tudo está correto em R. Pelo contrário, eu diria que mesmo que haja uma implementação em C++ das funções lá, tudo é bastante primitivo. E em termos de velocidade, você pode ver que a biblioteca MQL5 no código fonte do nosso compilador vence por 3 vezes em média.

Demos-nos ao trabalho de verificar tudo de novo e encontrámos erros óbvios. Estes erros foram confirmados:

Veja as datas das publicações, por favor. Você vai ver como o trabalho está indo com o conselho dos cientistas.

Além disso, seria um erro não considerar @Quantum um cientista.

Caro Renat!

Tenho as seguintes perguntas sobre as suas últimas mensagens, que são questões de princípio para mim:

1. A julgar pela data de publicação do seu artigo, estamos no ano de 2003. Naturalmente, o R, assim como qualquer outro sistema de software, tem erros e uma lista de correções é sempre publicada no momento do lançamento. Ao mesmo tempo, R sempre enfatizou que o baixo nível de bugs devido ao número extremamente grande de usuários é uma virtude de R. E aqui desde 2003 um bug no algoritmo foi identificado ao nível da publicação e não foi corrigido. Isto não está claro para mim.

Já fizeste um inquérito ao R sobre este assunto?

2. gostaria de ver o código pelo qual o desempenho do R e do MQL5 foi comparado.

Agradeço antecipadamente.

 
SanSanych Fomenko:

Caro Renat!

Tenho as seguintes perguntas sobre as suas últimas mensagens, que são fundamentais para mim:

1. A julgar pela data de publicação do artigo, estamos em 2003. Naturalmente, o R, assim como qualquer outro sistema de software, tem erros e uma lista de correções é sempre publicada no momento do lançamento. Ao mesmo tempo, R sempre enfatizou o baixo nível de bugs devido ao número extremamente grande de usuários como uma vantagem do R. E aqui desde 2003 um bug no algoritmo foi identificado ao nível da publicação e não foi corrigido. Isto não está claro para mim.

É elementar e absolutamente claro.

Todos cometem erros - isso é o que os desenvolvedores fazem. Cometemos uma tonelada de erros e não desanimamos.

Este erro em R é simplesmente por descuido e confiança em uma função básica que bagunçou as outras. Será corrigido.

Fez algum pedido ao R sobre este assunto?

Nós conduzimos testes, examinamos tudo em detalhes enquanto escrevíamos a biblioteca, comparamos constantemente os resultados entre MQL5 - Wolfram Alpha - R, mostramos nossos resultados e estamos prontos para responder por eles publicamente. É claro, nós anexamos três grandes scripts com testes unitários e um benchmark ao nosso pacote de matemática (que está no código fonte).

Tenho a certeza que @Quantum irá escrever um relatório de bug em R. O artigo actualizado foi lançado há apenas algumas horas.


Eu gostaria de ver o código comparando o desempenho do R e do MQL5.

O código de referência para a MQL5 pode ser encontrado em {\i1}Scripts\i}UnitTests\i}StatTestStatBenchmark.mq5 e o código R pode ser encontrado no final do artigo Statistical Distributions in MQL5 - tire o melhor de R e torne-o mais rápido, veja "Appendix. Resultados do Cálculo da Linha do Tempo das Funções Estatísticas".

Certifique-se de atualizar para o MetaTrader 5 build 1467 conectando-se ao servidor MetaQuotes-Demo, por favor. É nesta versão beta que incluímos a nova biblioteca e todos os scripts de teste.

 
Renat Fatkhullin:

Isto é elementar e completamente compreensível.

Todos cometem erros - essa é a natureza dos desenvolvedores. Cometemos uma tonelada de erros e não desanimamos.

Este erro em R é apenas por descuido e confiança numa função básica que lixou outras. Será corrigido.

Nós conduzimos testes, examinamos tudo em detalhes enquanto escrevíamos a biblioteca, comparamos constantemente os resultados entre MQL5 - Wolfram Alpha - R, mostramos nossos resultados e estamos prontos para responder por eles publicamente. É claro, nós anexamos três grandes scripts com testes unitários e um benchmark ao nosso pacote de matemática (que está no código fonte).

Tenho a certeza que @Quantum irá escrever um relatório de bug em R. O artigo actualizado foi lançado há apenas algumas horas.


O código de referência em MQL5 pode ser encontrado em {\i1}Scripts\i}UnitTests\i}StatTestStatBenchmark.mq5 e o código em R pode ser encontrado no final do artigo Distribuições estatísticas em MQL5 - tire o melhor de R e torne-o mais rápido em "Apêndice. Resultados do Cálculo do Tempo para Funções Estatísticas".

Certifique-se de atualizar para o MetaTrader 5 build 1467 conectando-se ao servidor MetaQuotes-Demo, por favor. É nesta versão beta que incluímos a nova biblioteca e todos os scripts de teste.

Ainda não posso formar a minha própria opinião sobre a comparação de desempenho. E isto é uma questão de princípio.

A questão é que R é um ambiente ideal para o desenvolvimento - um intérprete em uma palavra. Mas o código que existe durante o desenvolvimento é muito diferente do código de trabalho - pelo número de linhas muitas vezes. E o código de trabalho, por outro lado, é muito breve e muito capcioso. Portanto, devemos comparar em quaisquer funções de pacotes, que fazem sentido ao tomar decisões de negociação, por exemplo, floresta aleatória, que usam algoritmos computacionalmente capacitivos, operações matriciais, carregamento de todos os núcleos....

PS.

Você está usando uma versão desatualizada de R. Você deve pegar R versão 3.3.1 (2016-06-21) do site MRAN - Microsofn R Open. É obrigatório instalar MKL ao fazer isso. A Microsoft alegou no mencionado lançamento R que era capaz de aumentar a velocidade de execução de alguns pacotes e funções em até 50 (!) vezes.

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:

Eu ainda não posso formar uma opinião sobre a comparação de desempenho. E isto é uma questão de princípio.

A questão é que R é um ambiente ideal para o desenvolvimento - um intérprete em uma palavra. Mas o código que existe durante o desenvolvimento é muito diferente do código de trabalho - pelo número de linhas muitas vezes. E o código de trabalho, por outro lado, é muito breve e muito capcioso. É por isso que devemos comparar em quaisquer funções de pacotes, que fazem sentido enquanto tomamos decisões de negociação, por exemplo, floresta aleatória, que usam algoritmos computacionalmente capacitivos, operações matriciais, carregamento de todos os núcleos....

Traduzimos metodicamente as características R em MQL5. E de tal forma que a essência das chamadas funcionais acaba por ser muito semelhante.

Aqui está um exemplo da correspondência do artigo:


Distribuição
Funções da MQL5
funções R
1Normal
MathProbabilityDensityNormal
MathCumulativeDistributionNormal
MathQuantileNormal
MathRandomNormal
dnorm
pnorm
qnorm
rnorm
2Beta
MathProbabilityDensityBeta
MathCumulativeDistributionBeta
MathQuantileBeta
MathRandomBeta
dbeta
pbeta
qbeta
rbeta
3Binomial
MathProbabilityDensityBinomial
MathCumulativeDistributionBinomial
MathQuantileBinomial
MathRandomBinomial
dbinom
pbinom
qbinom
rbinom
4
Cauchy
MathProbabilityDensityCauchy
MathCumulativeDistributionCauchy
MathQuantileCauchy
MathRandomCauchy
dcauchy
pcauchy
qcauchy
rcauchy
5Qui-quadrado
MathProbabilityDensityChiSquare
MathCumulativeDistributionChiSquare
MathQuantileChiSquare
MathRandomChiSquare
dchisq
pchisq
qchisq
rchisq
6Exponencial
MathProbabilityDensityExponential
MathCumulativeDistributionExponential
MathQuantileExponential
MathRandomExponential
dexp
pexp
qexp
rexp
7Fisher's F
MathProbabilityDensityF
MathCumulativeDistributionF
MathQuantileF
MathRandomF
df
pf
qf
rf
8Gama
MathProbabilityDensityGamma
MathCumulativeDistributionGamma
MathQuantileGamma
MathRandomGamma
dgamma
pgamma
qgamma
rgamma
9Geométrico
MathProbabilityDensityGeometric
MathCumulativeDistributionGeometric
MathQuantileGeometric
MathRandomGeometric
dgeom
pgeom
qgeom
rgeom
10Hipergeometria
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
13Binômio negativo
MathProbabilityDensityNegativeBinomial
MathCumulativeDistributionNegativeBinomial
MathQuantileNegativeBinomial
MathRandomNegativeBinomial
dnbinom
pnbinom
qnbinom
rnbinom
14Beta não central
MathProbabilityDensityNoncentralBeta
MathCumulativeDistributionNoncentralBeta
MathQuantileNoncentralBeta
MathRandomNoncentralBeta
dbeta
pbeta
qbeta
rbeta
15Qui-quadrado não central
MathProbabilityDensityNoncentralChiSquare
MathCumulativeDistributionNoncentralChiSquare
MathQuantileNoncentralChiSquare
MathRandomNoncentralChiSquare
dchisq
pchisq
qchisq
rchisq
16
F descentralizada
MathProbabilityDensityNoncentralF()
MathCumulativeDistributionNoncentralF()
MathQuantileNoncentralF()
MathRandomNoncentralF()
df
pf
qf
rf
17Aluno T Descentral
MathProbabilityDensityNoncentralT
MathCumulativeDistributionNoncentralT
MathQuantileNoncentralT
MathRandomNoncentralT
dt
pt
qt
rt
18de Poisson
MathProbabilityDensityPoisson
MathCumulativeDistributionPoisson
MathQuantilePoisson
MathRandomPoisson
dpois
ppois
qpois
rpois
19T Estudante
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

Tentamos fazer o código de R muito idêntico em tamanho e tempo para escrevê-lo em MQL5.

Amanhã vamos lançar em versão beta a biblioteca gráfica e demonstrar pedaços de código de tamanho igual em R e MQL5 juntamente com imagens.



Você está usando uma versão desatualizada de R. Você deve pegar R versão 3.3.1 (2016-06-21) do site MRAN - Microsofn R Open. É obrigatório instalar MKL ao fazer isso. A Microsoft alegou no mencionado lançamento R que conseguiu aumentar a velocidade de execução de alguns pacotes e funções em até 50 (!) vezes.

Duvido que a versão em stock do R possa de repente acelerar - o código lá não muda muito. Claramente algumas funções podem ser aceleradas, especialmente as matriciais. E a sua declaração confirma a minha opinião de que o código em R está escrito de forma bastante descuidada em termos de desempenho.

Se você ler o artigo, verá que temos velocidades até 46x mesmo em funções básicas sem nenhuma multi-tarefa e MKL:

Os cálculos foram efectuados num CPU Intel Core i7-4790, 3.6 Ghz, 16 GB de RAM, Windows 10 x64. O tempo de cálculo resulta em microssegundos


Distribuição
tempo MQL5
Tempo de cálculo em PDF (µs)
Tempo de cálculo R
Tempo de cálculo em PDF (µs)
PDF
R/MQL5
Tempo de computação da MQL5
Tempo de cálculo do CDF (µs)
Tempo de cálculo R
Tempo de cálculo do CDF (µs)
CDF
R/MQL5
Tempo de computação da MQL5
tempo de quantil (µs)
Tempo de cálculo R
tempo de computação de quantis (µs)
Quantidade
R/MQL5
Tempo de geração da MQL5
tempo de geração de números aleatórios (µs)
tempo de geração R
tempo de geração de números aleatórios (μs)
Aleatório
R/MQL5
1
Binomial
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
Gama
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
Geométrico
2.3
5.121
2.227
2.12
4.552
2.147
0.81
5.407
6.675
278
1078.045
3.879
8
Hipergeometria
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
Praça Chi
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
ChiSquadrado Não-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 não 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 não 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
Binômio 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
Não central T
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
<Quantidade R/MQL5>
7.03
<Random R/MQL5>
3.13



Mas a versão especificada será testada, é claro. Tanto pela velocidade como pelo desempenho.

 
SanSanych Fomenko:

Você está errado sobre a "resposta errada".

...

Por exemplo, a documentação MQL dá um exemplo em arcsine e afirma que arcsine(2) = infinito. Isto não é exacto. Exatamente: arcsinus(2) = NaN, ou seja, sem valor numérico, arcsinus(1) = Inf, mas faltando citações durante a negociação = NA, ou seja, deve ser (ou pode ser durante o fim de semana) e não é.

Escrevi-o com um pouco de ironia sobre respostas erradas. Devia ter acrescentado uma cara sorridente... Na verdade, acrescentei no final que não é um bug em ambos os casos, pois o comportamento do compilador e do intérprete em áreas de funções não-definidas depende inteiramente da arquitetura do sistema e dos desenvolvedores. É melhor devolver a Nan nesse caso, é claro.
Quer dizer, não chame uma função com parâmetros para os quais não está definida e depois compare os resultados com outra biblioteca, caso contrário pode encontrar centenas de "bugs".

A propósito, é um exemplo interessante com o Arcsinus.
mql -
MathArcsin(1) = MathArcsin(2) = -nan(ind)

Wolfram -
Arcsin(1) = Pi/2
Arcsin(2) = algo complexo. Não existe uma solução com um resultado válido.

R -
asin(1) = Pi/2
asin(2) = nan (a resposta é para números reais)
asin(2+0i) = algo complexo, como em wolfram

O wiki diz que asin(1) ainda está definido(https://en.wikipedia.org/wiki/Inverse_trigonometric_functions), você pode escrever um relatório de bug para o servicedesk.
Mas asin(2) é uma região indefinível, está tudo bem e combina em todos os lugares.

E mais uma vez sobre o último post - divisão por 0 em matemática simples é impossível, então é lógico que o mql script falha com erro, não há bugs aqui. Mas é muito estranho ver resultados tão meticulosos com precisão de até 16 casas decimais, e retornar nan ou Inf quando a divisão por zero é impossível por alguma razão. Eu preciso devolver o Inf e não atormentar os desenvolvedores com falhas repentinas de seus scripts.

 
Renat, essa tradução de várias funções de R para mql foi realmente a surpresa de que você estava falando?
 

Para desativar o controle de divisão de valor real, use o parâmetro FpNoZeroCheckOnDivision=1 na seção [Especialistas] do arquivo metaeditor.ini

Se este parâmetro estiver presente, o seguinte código irá produzir inf

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

Naturalmente, a presença deste parâmetro não o salvará de um erro de compilação ao dividir por uma constante 0,0
Print(1/0.0);

'0.0' - division by zero in the constant expression    s1.mq5    8    12
 
mytarmailS:
Renat, essa transferência de algumas funções de R para mql foi realmente a surpresa de que você estava falando?

Não.

Surpresa não faz sentido, vamos fazer tudo dentro da MQL5 e MetaTrader 5.

 
Renat Fatkhullin:

Se este parâmetro estiver presente, o seguinte código dará inf

Obrigada, ajuste muito correcto. E se você dividir zero por zero, você recebe nan em vez de inf, e é ainda mais correto, eu nem esperava tal precisão!