Que porra é essa?! Os objetivos da bíblia da matemática são claros.
Encontrar um modelo matemático robusto em R. Eles o encontraram, então o investigaram em R. E então você pode facilmente portar uma solução pesquisada pronta (um algoritmo de negociação, na verdade) do R para o MQL às custas da bibla e deste artigo. Todos os tipos de aprendizado de máquina são sempre adequados para os mercados financeiros.
Escrever em MQl é uma dor de cabeça)). É mais fácil (e mais confiável)) chamar a funcionalidade necessária diretamente do R (e assim por diante)). Renat mencionou esses métodos - eles não são os mais simples e modernos, mas existem. Por exemplo, como anexar objetos COM ao MT? Parcialmente você pode (não tudo) - (perdoe-me) por meio de juntas))).
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
install.packages("microbenchmark")
library(microbenchmark)
n <- 2000
k <- seq(0,n,by=20)
res <- microbenchmark(a<-dbinom(k, n, pi/10, log = TRUE))
print(res)
Unit: microseconds
expr min lq mean median uq max neval
a <- dbinom(k, n, pi/10, log = TRUE) 20.16720.16820.8872620.46920.7735.819100
A execução tripla mostrou um tempo mínimo de 20 microssegundos.
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.
Parabéns!!! Uma vitória limpa, em ambas as lâminas.
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.
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.
Andrey Dik: 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)?
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:
Ausência de sobrecarga em objetos dinâmicos como no R devido ao trabalho com dados duplos puramente tipados
Um compilador terrivelmente eficiente em MQL5. É realmente assustador olhar para o código asm resultante.
Presença de bibliotecas MQL5 no código-fonte, o que lhe permite incorporar nativamente o código delas diretamente no local da chamada e usar ao máximo o ambiente const do local chamado.
É 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.
Para login e uso do site MQL5.com, você deve ativar o uso de cookies.
Ative esta opção no seu navegador, caso contrário você não poderá fazer login.
Você entrou na conta. A autenticação de dois fatores foi desativada. Configure-a novamente e escaneie um novo código QR ou continue com a autenticação de dois fatores desativada.
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.