Erros, bugs, perguntas - página 2221

 

Ferramenta sintética. Importo barras de minutos, cada barra de minutos difere por 1 ponto (5 dígitos).

Fecho a janela com símbolos, depois reabro esta janela, peço barras minúsculas da carga anterior, recebo

Os símbolos são os mesmos para cada dia inteiro. O que é o erro?

 
elibrarius:

Olhando através do código do pacote Alglib. Está cheio destas construções, o que torna o código mais difícil de ler:

Não é mais simples desta forma?

Parece-me que a velocidade de execução seria ainda maior.

Porque é que tornaram o código tão complicado? Ou simplesmente portaram-no de outra língua sem quaisquer modificações? Mas ainda me pergunto porquê uma tal complicação no original?

O mais provável é que isto seja feito no código original precisamente para acelerar as coisas.

Se será mais rápido em MQL deve ser medido, "ao que parece" não funcionará aqui.

 
Koldun Zloy:

Omais provável é que isto seja feito no original para aceleração.

Se será mais rápido em MQL deve ser medido, "ao que parece" não funcionará aqui.

"Muito provavelmente" também não funciona.
Como pode tal formulário funcionar mais rapidamente? De que está a falar!

Dois loops extra e um array extra em vez de uma variável.

 

Nikolai Semko:

Dois loops extra e um array extra em vez de uma variável.

Este raciocínio primitivo não é adequado para processadores modernos.

 
Koldun Zloy:

Este raciocínio primitivo não é adequado para processadores modernos.

Sabe melhor. Tem mais experiência...

 


Koldun Zloy
:

Este raciocínio primitivo não é adequado para processadores modernos.

Em essência, lamento, mas estás a delirar.

Nenhum processador existente hoje em dia jamais

for(i=0;i<=npoints-1;i++)

mais rápido em comparação com...

for(i=0;i<npoints;i++)

e o acesso a uma matriz nunca será mais rápido do que o acesso a uma variável simples,

três loops idênticos nunca serão mais rápidos do que um loop combinado.


Não tenho sido preguiçoso e testei a velocidade de duas variantes diferentes directamente no ALGLIB original, para não ser infundado:

      e=0;
      double tmp1;
      ulong t=GetMicrosecondCount();
      for(i=0;i<npoints;i++)
        {
         v=0.0;
         for(i_=0;i_<nvars;i_++)
           {
            tmp1=xy[i][i_]-ct[xyc[i]][i_];
            v+=tmp1*tmp1;
           }
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("fast = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );



      e=0;
      t=GetMicrosecondCount();
      for(i=0;i<=npoints-1;i++)
        {
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=xy[i][i_];
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v=0.0;
         for(i_=0;i_<=nvars-1;i_++)
            v+=tmp[i_]*tmp[i_];
         e=e+v;
        }
      t=GetMicrosecondCount()-t;
      Print("slow = "+(string)t+" микросекунд, e = "+DoubleToString(e) + " , npoints = " + (string)npoints+" , nvars = " + (string)nvars );

resultado:

2018.06.27 04:36:50.265 TestClasses (GBPUSD,M6) fast = 571 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.266 TestClasses (GBPUSD,M6) slow = 841 микросекунд, e = 534.47773777 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.630 TestClasses (GBPUSD,M6) fast = 577 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:50.631 TestClasses (GBPUSD,M6) slow = 812 микросекунд, e = 531.85904819 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.143 TestClasses (GBPUSD,M6) fast = 599 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.144 TestClasses (GBPUSD,M6) slow = 853 микросекунд, e = 537.42685690 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.955 TestClasses (GBPUSD,M6) fast = 600 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:51.956 TestClasses (GBPUSD,M6) slow = 809 микросекунд, e = 531.17444713 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) fast = 567 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.344 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 540.39509565 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.857 TestClasses (GBPUSD,M6) fast = 690 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:52.858 TestClasses (GBPUSD,M6) slow = 820 микросекунд, e = 550.68494369 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.229 TestClasses (GBPUSD,M6) fast = 585 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.230 TestClasses (GBPUSD,M6) slow = 811 микросекунд, e = 547.94313745 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.736 TestClasses (GBPUSD,M6) fast = 560 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40
2018.06.27 04:36:53.737 TestClasses (GBPUSD,M6) slow = 813 микросекунд, e = 568.39404456 , npoints = 1500 , nvars = 40

Isto é, pode-se ver que o ganho de velocidade é superior a 40%.

Arquivos anexados:
dataanalysis.mqh  1150 kb
TestClasses.mqh  2762 kb
 
Nikolai Semko:

Bem, em essência, lamento, mas estás a delirar.

Nenhum processador existente hoje em dia jamais

mais rápido em comparação com...

e o acesso a uma matriz nunca será mais rápido do que o acesso a uma variável simples,

três loops idênticos nunca serão mais rápidos do que um loop combinado.


Não tenho sido preguiçoso e testei a velocidade de duas variantes diferentes directamente no ALGLIB original, para não ser infundado:

resultado:

Isto é, pode-se ver que o ganho de velocidade é superior a 40%.

Obrigado pelo teste! Penso que funcionará mais rapidamente não só em MQL, mas em todas as línguas.

As razões em que estava a pensar eram que o programador que o escreveu não era apenas pago para o programa funcionar, mas para o número de linhas. Para um programa com 500 linhas não é tão impressionante para um cliente como um programa com 5000 linhas. É uma pena que a velocidade e legibilidade do código tenha sofrido por causa disso.

 
elibrarius:
Penso que funcionará mais rapidamente não só em MQL mas em todas as línguas.

Claro.

 
Notei que ao entrar na MQL há um erro e no estado do navegador há uma resposta longa (provavelmente autorização) do Facebook
 
SEM:

Ferramenta sintética. Importo barras de minutos, cada barra de minutos difere por 1 ponto (5 dígitos).

Fecho a janela com símbolos, depois reabro esta janela, peço barras minúsculas da carga anterior, recebo

Os símbolos são os mesmos para cada dia inteiro. O que é o erro?

Reprodução estável ? Que construção?

Razão: