Discusión sobre el artículo "El poder del ZigZag (Parte I). Desarrollando la clase base del indicador" - página 8

 
 

El tercero y el cuarto siguen sin compilar.

 

"GetZigZagData" - no se puede aplicar ninguna de las sobrecargas a la llamada de función TestZZZ_03.mq5 77 15

"Get ZigZag Data" - ninguna de las sobrecargas se puede aplicar a la llamada a la función test z_03.mq5 77 15

---------------------

podría ser una de 2 función(es) TestZZZ_03.mq5 77 15

podría ser una de 2 función(es) TestZZ_03.at MQL5 77 15

---------------------

void CZigZagModule::GetZigZagData(const int,int,int,const string,const ENUM_TIMEFRAMES,const datetime,const datetime) ZigZagModule.mqh 52 22

void CZigZagModule::GetZigZagData(const double&[],const double&[],const datetime&[]) ZigZagModule.mqh 51 22

______________

Es decir, el compilador jura que se inicia una misma función con diferentes parámetros.

 
Sergey Voytsekhovsky:

El tercero y el cuarto siguen sin compilar.

Compruebe los parámetros transmitidos. O bien su número o tipos son incorrectos. Esto ocurre al llamar a GetZigZagData.

 
ZY: ¿Por qué programas en C si no estás seguro de poder abordar una función con distintos parámetros?
 

Gracias por los comentarios. Todavía no sé cómo comprobar los parámetros, estoy aprendiendo programación. Por lo que he logrado entender - en el código el Asesor Experto llama al método GetZigZagData().

La primera vez con los parámetros GetZigZagData(h_zz,l_zz,t_zz),

la segunda vez con diferentes parámetros GetZigZagData(zz_handle_current,_Symbol,_Period,start_time_in,stop_time_in).

El archivo de inclusión tiene ambas opciones

void CZigZagModule::GetZigZagData(const double &zz_h[],const double &zz_l[],const datetime &time[])
  {
   int h_total =::ArraySize(zz_h);
   int l_total =::ArraySize(zz_l);
   int total   =h_total+l_total;
//--- Puesta a cero de las variables ZZ
   ZeroZigZagData();
//--- Vamos a recorrer los valores ZZ copiados
   for(int i=0; i<total; i++)
     {
      //--- Si ya hemos obtenido el número necesario de máximos y mínimos de ZZ, salimos del bucle
      if(m_counter_highs==m_copy_extremums && m_counter_lows==m_copy_extremums)
         break;
      //--- Control de desbordamiento de matriz
      if(i>=h_total || i>=l_total)
         break;
      //--- Llena el array de máximos hasta que hayamos copiado el número necesario de máximos
      if(zz_h[i]>0 && m_counter_highs<m_copy_extremums)
        {
         m_zz_high[m_counter_highs]      =zz_h[i];
         m_zz_high_bar[m_counter_highs]  =i;
         m_zz_high_time[m_counter_highs] =time[i];
         //--- Aumentar el contador de máximos
         m_counter_highs++;
        }
      //--- Rellena el array de mínimos hasta copiar el número deseado
      if(zz_l[i]>0 && m_counter_lows<m_copy_extremums)
        {
         m_zz_low[m_counter_lows]      =zz_l[i];
         m_zz_low_bar[m_counter_lows]  =i;
         m_zz_low_time[m_counter_lows] =time[i];
         //--- Aumenta la cuenta mínima.
         m_counter_lows++;
        }
     }
//--- Determinar la dirección del movimiento del precio
   m_direction=(m_zz_high_time[0]>m_zz_low_time[0])? 1 : -1;
  }
//+------------------------------------------------------------------+
//|| Obtiene los datos ZZ del manejador pasado ||
//+------------------------------------------------------------------+
void CZigZagModule::GetZigZagData(const int handle,int buffer_num_highs,int buffer_num_lows,
                                  const string symbol,const ENUM_TIMEFRAMES period,
                                  const datetime start_time,const datetime stop_time)
  {
//--- Vamos a obtener los datos iniciales
   int times_total =::CopyTime(symbol,period,start_time,stop_time,m_zz_time_temp);
   int highs_total =::CopyBuffer(handle,buffer_num_highs,start_time,stop_time,m_zz_highs_temp);
   int lows_total  =::CopyBuffer(handle,buffer_num_lows,start_time,stop_time,m_zz_lows_temp);
//--- Número máximo de extremos
   int max_items =(int)::fmax((double)highs_total,(double)lows_total);
//--- Si no es suficiente, vamos a intentarlo de nuevo.
   if(times_total<max_items)
     {
      while(true)
        {
         ::Sleep(100);
         times_total=::CopyTime(symbol,period,start_time,stop_time,m_zz_time_temp);
         if(times_total>=max_items)
            break;
        }
     }
//--- Contadores
   int lows_counter  =0;
   int highs_counter =0;
//--- Calcular los máximos
   int h_total=::ArraySize(m_zz_highs_temp);
   for(int i=0; i<h_total; i++)
     {
      if(m_zz_highs_temp[i]>0)
         highs_counter++;
     }
//--- Calcular los mínimos
   int l_total=::ArraySize(m_zz_lows_temp);
   for(int i=0; i<l_total; i++)
     {
      if(m_zz_lows_temp[i]>0)
         lows_counter++;
     }
//--- Obtener el número de extremos
   int copy_extremums=(int)::fmin((double)highs_counter,(double)lows_counter);
   CopyExtremums(copy_extremums);
//--- Vamos a recorrer los valores ZZ copiados
   GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
  }

escritas una tras otra.

Cargado archivos antiguos, luego los nuevos, borrado MT5 en general, instalado uno nuevo desde cero, nada ayuda, el error de la pantalla de arriba - persiste.

 
Алексей Тарабанов:
ZY: ¿Por qué programas en C si no estás seguro de poder abordar una función con diferentes parámetros?

No te entiendo muy bien. ¿Tengo muchas opciones sobre qué programar? Tengo MT5, está en MQL5, y estoy intentando aprenderlo.

Creo que se puede acceder a una función con diferentes parámetros, incluso he leído que se llama sobrecarga. Pero no entiendo como manejarlo. Por otra parte, estoy seguro de que no es el error del autor aquí en absoluto, lo más probable es que yo estoy cometiendo un error, la única pregunta es dónde exactamente ????.

 
   CopyExtremums(copy_extremums);
//--- Vamos a recorrer los valores ZZ copiados
   GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
Creo que está aquí.
 
¿Puede alguien explicar a una persona qué es la sobrecarga? No programo en C.
 

Cambié los nombres de estas funciones en el archivo de inclusión y les añadí los números 1 y 2 respectivamente.

Encontré todas las referencias a ellas en el Asesor Experto y las edité. El antiguo error desapareció, pero apareció uno nuevo. Efectivamente - algún problema con los tipos de datos. El traductor escribió lo siguiente:

'stop_time_in' - incapaz de convertir la enumeración TestZZ_03.mq5 77 78