Discussão do artigo "Distribuições estatísticas no MQL5 - tirando o melhor de R" - página 4
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
Que porra é essa?! Os objetivos da bíblia da matemática são claros.
Não estou entendendo algo
Qual é o resultado da chamada da função especificada em MQL? Um escalar? Um vetor?Aqui está o que temos no R
n <- 2000
>
> k <- seq(0, n, by = 20)
>
> dbinom(k, n, pi/10, log = TRUE)
[1] -754.219687 -660.247472 -592.126636 -534.532344 -483.881605
[6] -438.460449 -397.256529 -359.600217 -325.015561 -293.146935
[11] -263.718651 -236.510862 -211.344286 -188.070044 -166.562645
[16] -146.714976 -128.434635 -111.641185 -96.264050 -82.240889
[21] -69.516303 -58.040813 -47.770020 -38.663934 -30.686405
[26] -23.804662 -17.988917 -13.212041 -9.449276 -6.678001
[31] -4.877524 -4.028903 -4.114796 -5.119322 -7.027950
> a<-dbinom(k, n, pi/10, log = TRUE)> str(a)
num [1:101] -754 -660 -592 -535 -484 ...
Ou seja, chamar a função no R produz um vetor que pode ser desenhado usando o método universal plot
> plot(a)
Coloque o arquivo atualizado em /Include/Math/Stat, por favor.
Ele adiciona uma função sobrecarregada para o vetor + um parâmetro log_mode adicional.
Aqui está um análogo de seus cálculos, combinando completamente os resultados com o R:
Conclusão:
Agora estamos trabalhando para adicionar operações de vetor para que a sintaxe seja a mais próxima possível do R.
Obviamente, adicionaremos muitos novos testes unitários à entrega.
A propósito, as afirmações sobre a otimização em velocidade total das bibliotecas matemáticas em R são muito exageradas.
Esse é o resultado da escrita do código de cabeça para baixo e da sobrecarga do sistema devido ao trabalho com objetos/entidades dinâmicos. Ao contrário do R, a MQL5 opera com matrizes claramente tipadas e compila o código em x64 nativo. Isso proporciona uma enorme vantagem e permite que você vença até mesmo as implementações de funções em DLL no R.
Aqui está um teste baseado no exemplo acima: R 3.3.1 x64
A execução tripla mostrou um tempo mínimo de 20 microssegundos.
O mesmo teste em MQL5:
MQL5 conta duas vezes mais rápido: 10 microssegundos contra 20 microssegundos em R.
Calculado em i7-4930k, Windows 10 x64, MetaTrader 5 x64, sem virtualizações e sem carga externa.
A propósito, as afirmações sobre a otimização em velocidade total das bibliotecas matemáticas em R são muito exageradas.
Esse é o resultado da escrita do código de cabeça para baixo e da sobrecarga do sistema devido ao trabalho com objetos/entidades dinâmicos. Ao contrário do R, a MQL5 opera com matrizes claramente tipadas e compila o código em x64 nativo. Isso proporciona uma enorme vantagem e permite que você vença até mesmo as implementações de funções em DLL no R.
Aqui está um teste baseado no exemplo acima: R 3.3.1 x64
A execução tripla mostrou um tempo mínimo de 20 microssegundos.
O mesmo teste em MQL5:
MQL5 conta duas vezes mais rápido: 10 microssegundos vs. 20 microssegundos em R.
Calculado em i7-4930k, Windows 10 x64, MetaTrader 5 x64, sem virtualizações e sem carga externa.
A propósito, as afirmações sobre a otimização em velocidade total das bibliotecas matemáticas em R são muito exageradas.
Esse é o resultado da escrita do código de cabeça para baixo e da sobrecarga do sistema devido ao trabalho com objetos/entidades dinâmicos. Ao contrário do R, a MQL5 opera com matrizes claramente tipadas e compila o código em x64 nativo. Isso proporciona uma enorme vantagem e permite que você vença até mesmo as implementações de funções em DLL no R.
Aqui está um teste baseado no exemplo acima: R 3.3.1 x64
A execução tripla mostrou um tempo mínimo de 20 microssegundos.
O mesmo teste em MQL5:
MQL5 conta duas vezes mais rápido: 10 microssegundos contra 20 microssegundos em R.
Cálculo no i7-4930k, Windows 10 x64, MetaTrader 5 x64, sem virtualizações e sem carga externa.
e recebi um erro((
'vars' - conversão de parâmetro não permitida
e recebi um erro((
'vars' - conversão de parâmetro não permitida
Você precisa obter o arquivo atualizado em https://www.mql5.com/ru/forum/97153/page4#comment_2882502.
A função substituída para vetores foi adicionada lá.
Você precisa obter o arquivo atualizado em https://www.mql5.com/ru/forum/97153/page4#comment_2882502
Há uma função redefinida para vetores.
Sim, obrigado. Funciona assim. Funcionou assim para mim. Devo dizer desde já que executo o MT em vyne, 32 bits. é por isso que acho que a resposta será - 64 bits é mais rápido))) para evitar qualquer confusão - o R também é 32 bits.
Sim, obrigado. Funciona assim. Funcionou assim para mim. Devo dizer que estou executando o MT sob o wyne, 32 bits. Então, qual será a resposta, posso adivinhar - 64 bits é mais rápido))))
Isso não é sério.
Em wyne, e até mesmo em 32 bits. Para 32 bits, o MT5 usa um compilador antigo semelhante ao MT4. Ele é algumas dezenas de vezes mais lento do que o código de 64 bits, que é criado por um novo compilador especialmente para a versão de 64 bits do MT5. Publicamos um relatório comparando a velocidade dos programas MQL5 de 32 e 64 bits.
Na verdade, cada programa MQL5 contém duas cópias do código compilado: 32 bits para sistemas antigos, para fins de compatibilidade, e 64 bits para os novos.
Abandonamos completamente o desenvolvimento de compiladores de 32 bits, pois não faz sentido e não tem futuro.
É por isso que você deve usar apenas versões de 64 bits do MetaTrader 5 se quiser obter o máximo desempenho.
A propósito, uma informação para aqueles que usam o MT4 - lá também a velocidade de execução do código MQL4 é algumas dezenas de vezes mais lenta do que no MetaTrader 5 de 64 bits.
Parabéns! Uma vitória limpa, em ambas as lâminas.
o cálculo é duas vezes mais rápido do que o cálculo semelhante do R com compilação (a primeira passagem do R é a compilação byte/or jit, portanto, tem máx>1,5 avg e mín~=avg)?
bem, conquista... :-)
duas vezes mais rápido do que o mesmo cálculo do R com compilação (a primeira passagem do R é a compilação byte/or jit, portanto, tem max>1,5 avg e min~=avg)?
bem, realização... :-)
O R levou o tempo mínimo de várias execuções, não a primeira execução e o tempo máximo.
Portanto, não, a "inicialização a frio" não explica o problema aqui. E mesmo em um ambiente em que todo o código da biblioteca está em uma DLL. Não há praticamente nada para aquecer.
Mas o que de fato explica o fato:
É aqui que o compilador tem muito espaço em comparação com as implementações realmente não otimizadas em DLLs, que não têm chance de aprender o ambiente e se ajustar a ele.