Indicadores: FullSSA

 

FullSSA:

Oscilador de nuevo trazado dibujado sobre la base de la biblioteca SSA.mqh de funciones de transformación singular

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 fuera de rango en '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];
           }

debe ser i1 en todas partes en for() ?

 
leonerd:

debe ser i1 en todas partes en for() ?

Tú eres el tonto.

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

Usted mismo es un tonto.

Línea directa del Ministerio de Sanidad ruso:8 800 550 99 03

 

Hay un error tras otro. Desbordamientos de matriz y división por 0.

Y no sé cómo corregirlo, ya que no entiendo en absoluto de qué va esta biblioteca....

Este bucle, por ejemplo:

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;
     }
Si alcanza el for del bucle interior (y lo alcanza, porque B[k][k] es igual a cero), entonces i ya supera el límite del bucle exterior, es decir, i se hace mayor que n-1. Y entonces, al acceder a B[i], obtenemos una salida más allá de los límites del array, porque por una asombrosa coincidencia su tamaño es igual a n.