Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 18

 
Artyom Trishkin:
Isso não é muito bom. Você provavelmente recebeu avisos na hora da compilação? Você precisa se livrar das causas dos avisos em tais casos, e não # de uma propriedade estrita
Quando #property strict foi escrito, o compilador deu erros em cada loop for() que as variáveis devem ter um tipo, então eu tive que escrever int i e int p em cada loop. Depois disso, o compilador não gerou erros, mas a linha não foi construída. Quando removi o #property strict, o compilador não precisava mais declarar o tipo em cada ciclo, e a linha foi construída.
 

Eu completei meu saldo e agora não consigo encontrar o terminal com a conta real.

 
Timur1988:
Quando #propriedade estrita foi soletrada, o compilador gerou erros em cada loop for() que as variáveis devem ter um tipo, então eu tive que soletrar int i e int p em cada loop. Depois disso, o compilador não gerou erros, mas a linha não foi construída. Quando removi o #property strict, o compilador não exigia declarar o tipo em cada laço, e a linha foi construída.

Um caso típico de exploração de erros implícitos na lógica. Uma vez que o compilador tenha se tornado "mais rígido", a auto-engano está desaparecendo lentamente.

Eu estava me perguntando por que havia tantos loops idênticos?

E por que você não se preocupa de forma alguma com o erro "out of array" ao executar o indicador no gráfico?

Por exemplo, aqui:

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }        
      }
 
7u6y5t4r3e2w1q:

Eu completei meu saldo e agora não consigo encontrar o terminal com a conta real.

O terminal é o mesmo, você só precisa fazer o login novamente em uma conta real. Como fazer: Arquivo - Conectar à conta de negociação - especificar o número da conta, senha e servidor na janela que aparece. Todos esses dados foram fornecidos pelo CD, caso algo fosse solicitado.
 
Timur1988:
Quando #propriedade estrita foi soletrada, o compilador deu erros em cada loop for() que as variáveis devem ter um tipo, e assim eu tive que soletrar int i e int p em cada loop. Depois disso, o compilador não gerou erros, mas a linha não foi construída. Quando removi o #property strict, o compilador não precisava mais declarar o tipo em cada ciclo, e a linha foi construída.

a resposta é muito simples - você tem uma matriz trivial ultrapassada - e seu indicador deixa de funcionar por causa desse erro

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
        
         }        
      }
  
   for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {      
         Mx[i][p]=sum_x[p+1][m-1]/(n-1);  
         My[i][p]=sum_y[p+1][m-1]/(n-1);

você pode ver este erro no momento da execução - inicie o indicador e veja o arquivo de registro na guia Terminal - Especialistas:

 
Vitalie Postolache:

Este é um caso típico de exploração de erros lógicos implícitos. ...

Substituir uma matriz é um erro grosseiro de lógica - e não se pode chamar tal erro de "implícito".
 
Vitalie Postolache:

Um caso típico de exploração de erros implícitos na lógica. Uma vez que o compilador tenha se tornado "mais rígido", a auto-engano está desaparecendo lentamente.

Eu não parava de me perguntar, por que existem tantos loops idênticos?

E por que você não se preocupa de forma alguma com o erro "out of array" ao executar o indicador no gráfico?

Por exemplo, aqui:

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }        
      }


Como calcular a soma dos preços de fechamento em cada dimensão?
Quanto aos mesmos ciclos, eu, devido a meu conhecimento limitado de programação e algoritmos, não pensei em nada melhor para selecionar o elemento da matriz a partir da dimensão necessária, o que era necessário para a substituição na fórmula.
 
Andrey F. Zelinsky:

a resposta é muito simples - você tem uma matriz trivial ultrapassada - e seu indicador deixa de funcionar por causa desse erro

    for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {  
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
        
         }        
      }
  
   for(int i=1; i<n; i++)
      {    
      for(int p=0; p<m; p++)
         {      
         Mx[i][p]=sum_x[p+1][m-1]/(n-1);  
         My[i][p]=sum_y[p+1][m-1]/(n-1);

você pode ver este erro na etapa de execução - inicie o indicador e veja o arquivo de registro na guia Terminal - Especialistas:

Você poderia me dizer como corrigir este erro?
 
Timur1988:
Então como calcular a soma dos preços de fechamento em cada dimensão???
Quanto aos mesmos ciclos, devido a meu conhecimento limitado de programação e algoritmos, não consegui pensar em nada melhor para selecionar aquele elemento da matriz da dimensão desejada, que era necessário substituir na fórmula.

Por exemplo, assim:

     for(int i=1; i<n; i++)

      {    
      for(int p=1; p<m; p++)
         {   
         sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];                                        
         sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
         }         
      }
 
Timur1988:
Você pode me dizer como corrigir este erro?

Para corrigir este erro, você precisa entender sua fórmula - o que, por que e como você está contando.

E só então você será capaz de elaborar seu algoritmo e eliminar o erro.

Pelo método "gut feeling" e não compreender sua fórmula - você eliminará o erro, mas fará um cálculo errado.

p.s. Explique em detalhes o que você está calculando -- comente seu código em detalhes -- e então entenderemos como corrigir o erro.