Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 199
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
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.
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.
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.
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.
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:
Uniforme
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.
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
Tempo de cálculo em PDF (µs)
Tempo de cálculo em PDF (µs)
R/MQL5
Tempo de cálculo do CDF (µs)
Tempo de cálculo do CDF (µs)
R/MQL5
tempo de quantil (µs)
tempo de computação de quantis (µs)
R/MQL5
tempo de geração de números aleatórios (µs)
tempo de geração de números aleatórios (μs)
R/MQL5
Mas a versão especificada será testada, é claro. Tanto pela velocidade como pelo desempenho.
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.
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
Naturalmente, a presença deste parâmetro não o salvará de um erro de compilação ao dividir por uma constante 0,0
'0.0' - division by zero in the constant expression s1.mq5 8 12
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.
Se este parâmetro estiver presente, o seguinte código dará inf