Indicadores: FullSSA

 

FullSSA:

Redesenho do oscilador plotado com base no código SSA.mqh da transformação singular nas funções da biblioteca.

Infelizmente, o autor não deixou quaisquer comentários e explicações tanto para a sua biblioteca de transformação singular como para o próprio oscilador.

Nesta versão da biblioteca em comparação com o seu original, as variáveis de tamanho array incluídas nas funções da biblioteca SSA.mqh foram reduzidas de forma significativa para uma grave diminuição dos recursos consumidos pelo indicador!

Fig.1 Indicador FullSSA

Autor: Nikolay Kositsin

 
for(k=0;k<=n-2;k++)for(i=k+1;i<=n-1;i++)
     {
      if(!B[k][k])
        {
         for(i1=0;i<=n-1;i++)
           {
            w[i1]=B[i1][k];
            B[i1][k]=B[i1][k+1];
            B[i1][k+1]=w[i1];
           }
         cp++;
        }
      Print(__FUNCTION__+": i=",i);  
      c=1.0*B[i][k]/B[k][k];
      for(j=0;j<=n-1;j++) B[i][j]-=B[k][j]*c;
     }

2019.03.31 00:07:28.689 (GBPUSD,H1) array out of range in 'SSA.mqh' (147,14)


 
        for(i1=0;i1<=n-1;i1++)
           {
            w[i1]=B[i1][k];
            B[i1][k]=B[i1][k+1];
            B[i1][k+1]=w[i1];
           }

deve ser i1 em todos os lugares em for() ?

 
leonerd:

deve ser i1 em todo lugar em for() ?

Você é o tolo.

 
Алексей Тарабанов:

Você mesmo é um tolo.

Linha direta do Ministério da Saúde da Rússia: 8 800 550 99 03

 

Há um erro após o outro. Sobreposições de matriz e divisão por 0.

E não sei como corrigi-lo, pois não entendo nada sobre o que é essa biblioteca....

Este loop, por exemplo:

for(k=0;k<=n-2;k++)for(i=k+1;i<=n-1;i++)
     {
      if(!B[k][k])
        {
         for(i1=0;i<=n-1;i++)
           {
            w[i1]=B[i1][k];
            B[i1][k]=B[i1][k+1];
            B[i1][k+1]=w[i1];
           }
         cp++;
        }
        
      c=1.0*B[i][k]/B[k][k];
      for(j=0;j<=n-1;j++) B[i][j]-=B[k][j]*c;
     }
Se ele atingir o loop interno for (e ele atinge, porque B[k][k] é igual a zero), então i já ultrapassa o limite do loop externo, ou seja, i se torna maior que n-1. E então, ao acessar B[i], obtemos uma saída além dos limites do array, porque, por uma incrível coincidência, seu tamanho é igual a n.