Discussão do artigo "LifeHack para traders: preparemos "fast-food" de indicadores" - página 13

 
Vladimir Karputov:

- você tinha um bom código e uma descrição dos resultados da medição.

Não tive a chance de dar uma olhada no código

 

chamar indicadores no modo MQL4, a velocidade é menor em 40%.

Estilo MQL5

i = 0 Pass = 0 OnTester = 7.679 s.: Count = 9986677, 1300517.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 7.645 s.: Count = 9986677, 1306301.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


Estilo MQL4 (sem cache)

i = 0 Pass = 0 OnTester = 14.117 s.: Count = 9986677, 707422.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 14.067 s.: Count = 9986677, 709936.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


Estilo MQL4(com cache)

i = 0 Pass = 0 OnTester = 10.077 s.: Count = 9986677, 991036.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 10.104 s.: Count = 9986677, 988388.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755

A variante com cache é 32% mais lenta do que a variante no estilo MQL5. Quanto à variante sem cache, não foi possível obter os 40% mencionados. Como antes, ela é duas vezes mais lenta. Mas a coincidência em termos de lucro está certamente presente.

 

Desculpe-me, mas não entendo por que esse artigo foi autorizado a ser publicado pela Metaquotes.

As principais vantagens da manipulação de indicadores no mql5 é a capacidade de obter vários valores de um buffer, descartando-o completamente. E isso para fornecer um código que será muito menos eficiente na maior parte do tempo! Não estou nem falando de práticas de codificação ruins que consistem em não verificar o valor retornado de uma função.

Esse artigo é inútil ou pior ainda. Não se surpreenda que as pessoas queiram continuar usando o mql4.

 
Alain Verleyen:

Desculpe-me, mas não entendo por que esse artigo foi autorizado a ser publicado pelo Metaquotes.

As principais vantagens da manipulação de indicadores no mql5 é a capacidade de obter vários valores de um buffer, descartando-o completamente. E isso para fornecer um código que será muito menos eficiente na maior parte do tempo! Não estou nem falando de uma prática de codificação ruim que consiste em não verificar o valor retornado de uma função.

Esse artigo é inútil ou pior ainda. Não se surpreenda que as pessoas queiram continuar usando o mql4.

Acho que você não está certo. Este artigo, em primeiro lugar, ajuda os programadores amadores não tão instruídos e flexíveis a entender o manuseio dos indicadores no mql5 em comparação com o mql4 e, em segundo lugar, mostra a eles uma maneira de usar os indicadores da mesma forma que estão acostumados no MQL4.
 

Se eu executar um iVolume simples em um loop, sobre todos os instrumentos disponíveis, em MQL5, a plataforma simplesmente congela, as chamadas massivas de copybuffer agem como um ataque de ddos no sistema operacional, ele simplesmente trava, enquanto que se eu fizer esse mesmo processo em MQL4, ele funciona sem problemas como um pacote de manteiga derretida quente.

Na mesma máquina, e isso me diz mais do que eu preciso saber.

Combine isso com todos os sinais e ruídos provenientes da comunidade, o que me diz que minhas conclusões estavam certas o tempo todo.

 
Marcar apenas
 

O problema é: por que tenho que copiar o buffer toda vez que preciso ler o valor do indicador? O buffer está lá, já foi calculado, por que não posso acessar seu valor diretamente?

Isso não faz sentido!

Eu só deveria ter acesso direto ao buffer do indicador, copiá-lo repetidamente só prejudicará o desempenho.

Eu realmente não entendo por que a Metaquotes seguiu essa forma de trabalho.

CopyBuffer(...) vs buffer[i] ?

 
ludoz:

O problema é: por que tenho que copiar o buffer toda vez que preciso ler o valor do indicador? O buffer está lá, já foi calculado, por que não posso acessar seu valor diretamente?

Isso não faz sentido!

Eu só deveria ter acesso direto ao buffer do indicador, copiá-lo repetidamente só prejudicará o desempenho.

Eu realmente não entendo por que a Metaquotes seguiu essa forma de trabalho.

CopyBuffer(...) vs buffer[i] ?

Porque isso não é tão simples. O indicador é executado em um thread e um EA em outro thread (e você pode ter vários indicadores/vários EAs). Se você está reclamando de um procedimento tão simples como handle/CopyBuffer, não vai querer continuar com um aplicativo multithread, acredite.

O mql5 fornece soluções genéricas, capazes de gerenciar a maioria das situações "normais". Se você tiver um problema específico em seu projeto, sempre haverá uma solução.

 
Agora é MQL5, mas a maioria das pessoas ainda usa o mt4.