Teste o novo compilador MQL5 para plataformas x64 - cálculos 2 a 10 vezes mais rápidos! - página 19

 
Aleksey Vyazmikin:

O profiler já foi sugerido?

 
Aleksey Vyazmikin:

Opção nº 2. Pegue cada linha de tipo:

if(Test_P==1000)if(DonProc<5.5 && Levl_Down_DC<-7.5) CalcTest=CalcTest+1; //(0.4810127 0.3037975 0.2151899)
                  if(Test_P==1001)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N< 2.5) CalcTest=CalcTest+1; //(0.4400657 0.4072250 0.1527094)
                  if(Test_P==1002)if(DonProc< 5.5 && Levl_Down_DC>=-7.5 && TimeH< 21.5 && TimeH>=16.5 && TimeH< 19.5 && Levl_Close_H1s1N>=2.5) CalcTest=CalcTest+1; //(0.3739837 0.5121951 0.1138211)
                  if(Test_P==1003)if(DonProc<5.5 && Levl_Down_DC>=-7.5 && TimeH<21.5 && TimeH>=16.5 && TimeH>=19.5) CalcTest=CalcTest+1; //(0.3390706 0.4647160 0.1962134)

em uma função separada. Tente acreditar em Renate:)

Isto é, o resultado deve ser assim no final:

if(Test_P==1000 && Func1000()) CalcTest = CalcTest+1;
if(Test_P==1001 && Func1001()) CalcTest = CalcTest+1;
etc.
 
Aleksey Vyazmikin:

Sim, há aqui um link para a EA.

Já se passaram dois dias - a compilação é de 7%...

'Tree_Brut_TestPL_F_Fast.mq5'
'Normal.mqh'
'Math.mqh'
code generated
0 error(s), 0 warning(s), 1456022 msec elapsed

Nesta máquina.

2019.10.15 09:08:34.692 Terminal        Windows 10 (build 18362) x64, IE 11, UAC, Intel Xeon  E5-2630 v4 @ 2.20 GHz, Memory: 58760 / 65457 Mb, Disk: 20 / 224 Gb, GMT+2
 
Alexey Kozitsyn:

O profiler já foi oferecido?

Não, não tem - o que exatamente eu devo ver nele? Eu não sei realmente como usá-lo.


Alexey Kozitsyn:

Opção 2. Para colocar cada fio do tipo:

em uma função separada. Tente acreditar em Renat:)

Isto é, o resultado deve ser assim no final:

etc.

É a variante "case :" e não a variante "se" que dá um ganho significativo de velocidade. Se você fizer isso assim

               switch(Test_P)
                    {
                     case 1000: F1(); break;
                     case 1001: F2(); break;
                    }
   

O código vai ficar ainda maior. Mas você pode comparar o tempo de compilação e o desempenho, é claro...

 
Slava:

Neste carro.

Sim, esse código não é grande, eu não postei um código de 500 megabytes - se você precisar dele eu posso...

 
Aleksey Vyazmikin:

Que outros meios você sugere? Esta é a opção mais rápida que encontrei até agora...

Otimizar a lógica. Por exemplo, trabalhar com arrays e loops. Tente embalar os valores dos critérios em uma matriz. E fazer verificações em loop. Talvez então não haja necessidade em 74 mil casos...

 
Aleksey Vyazmikin:

1. Não, não fizeram - o que exatamente eu deveria ver nele? Eu não sei realmente como usá-lo.


2. É a variante "case :" e não a variante "se" que dá um impulso significativo de velocidade. Se você até faz isso como

O código vai ficar ainda mais rápido... Mas certamente você pode comparar o tempo de compilação e o desempenho...

1. você verá as partes mais lentas do código lá. Embora... Outra questão é se isso afeta a compilação...

2. Como você quiser: você pode usar o case. Você foi aconselhado a dividi-lo em funções menores. Separar e testar. Sim, é claro, o código vai ficar maior. Mas o que fazer.

 
@Renat Fatkhullin, por favor, esclareça, o profiler pode ajudar a revelar os gargalos de compilação? Ou usá-la apenas para verificar a velocidade do código em tempo real?
 
Aleksey Vyazmikin:

Eu transferiria esta enumeração, digamos, para um arquivo CSV externo, mas então surge outro problema - perda de tempo para ler o arquivo, e além disso, ao distribuir tarefas aos agentes eu não sou capaz de enviar 500 megabytes para cada agente, enquanto o código EA é enviado para um agente (ou não?) e dividido entre eles.

E outra pergunta, meu código é facilmente comprimido por 7zip de 500 a 15 megabytes, mas após a compressão, o arquivo ficará em torno de 500 - por que é assim - não há como fazer compressão primitiva (pelo menos até 100 megabytes)?

Comprimir o arquivo por zip. Ler zip, descomprimir por dentro. Será mais rápido do que transferir 500 Mb de EA (também é transferido para cada agente).

 
Alexey Kozitsyn:
@Renat Fatkhullin, você poderia esclarecer, o profiler pode ajudar a revelar os gargalos da compilação? Ou usá-la apenas para verificar a velocidade do código em tempo real?

O perfilador não tem nada a ver com a compilação.

Профилирование кода - Разработка программ - Справка по MetaEditor
Профилирование кода - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Профилирование — это сбор характеристик программы во время ее выполнения. При профилировании замеряется время выполнения и количество вызовов отдельных функций и строк в коде программы. При помощи этого инструмента программист может найти наиболее медленные участки кода и провести их оптимизацию. Профилирование можно проводить на обычном...