Обсуждение статьи "ZigZag всему голова (Часть I). Разработка базового класса индикатора" - страница 8

 
 

Третий и четвертый по прежнему не компелируются.

 

'GetZigZagData' - no one of the overloads can be applied to the function call TestZZ_03.mq5 77 15

"Get ZigZag Data" - ни одна из перегрузок не может быть применена к тесту вызова функции z_03.mq5 77 15

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

could be one of 2 function(s) TestZZ_03.mq5 77 15

может быть одна из функции 2(х) TestZZ_03.на 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

______________

Тоесть компилятор ругается что одна и та-же функция иницирована (или как там правильно) с разными параметрами.

 
Sergey Voytsekhovsky:

Третий и четвертый по прежнему не компелируются.

Передаваемые параметры проверьте. То-ли их количество, то-ли типы некорректны. Это при вызове GetZigZagData.  

 
ЗЫ: Зачем Вы программируете на С, если не уверены, что можно обращаться к функции с разными параметрами? 
 

Спасибо что отзвались. Пока не знаю как проверить параметры, только разбираюсь с програмированием. Из того что успел понять - в коде советник обращается к методу GetZigZagData().

Первый раз с параметрами    GetZigZagData(h_zz,l_zz,t_zz),

второй раз параметры уже другие    GetZigZagData(zz_handle_current,_Symbol,_Period,start_time_in,stop_time_in).

В инклюд файле есть оба варианта

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;
//--- Обнуление переменных ZZ
   ZeroZigZagData();
//--- Пройдёмся в цикле по скопированным значениям ZZ
   for(int i=0; i<total; i++)
     {
      //--- Если уже получили нужное количество максимумов и минимумов ZZ, выйдем из цикла
      if(m_counter_highs==m_copy_extremums && m_counter_lows==m_copy_extremums)
         break;
      //--- Контроль выхода за пределы массива
      if(i>=h_total || i>=l_total)
         break;
      //--- Заполняем массив максимумов пока не скопируем нужное количество
      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];
         //--- Увеличим счётчик максимумов
         m_counter_highs++;
        }
      //--- Заполняем массив минимумов пока не скопируем нужное количество
      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];
         //--- Увеличим счётчик минимумов
         m_counter_lows++;
        }
     }
//--- Определим направление движения цены
   m_direction=(m_zz_high_time[0]>m_zz_low_time[0])? 1 : -1;
  }
//+------------------------------------------------------------------+
//| Получает данные ZZ из переданного хендла                         |
//+------------------------------------------------------------------+
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)
  {
//--- Получим исходные данные
   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);
//--- Максимальное количество экстремумов
   int max_items =(int)::fmax((double)highs_total,(double)lows_total);
//--- Если не хватает, попробуем ещё раз
   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;
        }
     }
//--- Счётчики
   int lows_counter  =0;
   int highs_counter =0;
//--- Считаем максимумы
   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++;
     }
//--- Считаем минимумы
   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++;
     }
//--- Получим количество экстремумов
   int copy_extremums=(int)::fmin((double)highs_counter,(double)lows_counter);
   CopyExtremums(copy_extremums);
//--- Пройдёмся в цикле по скопированным значениям ZZ
   GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
  }

записаны последовательно друг за другом.

Загружал старые архивы, потом новые, удалил вообще МТ5, поставил с нуля новый, ничего не помогает, ошибка со скрина выше - сохраняется.

 
Алексей Тарабанов:
ЗЫ: Зачем Вы программируете на С, если не уверены, что можно обращаться к функции с разными параметрами? 

Не совсем Вас понял. У меня много выбора на чем програмировать? Есть МТ5, он на MQL5, на нем и пытаюсь научиться. 

Думаю что к функции можно обращаться с разными параметрами, даже прочитал что это называется перегрузка. Но хоть убей не пойму как с этим обращаться. Более того уверен что и здесь совсем не ошибка автора, это скорее всего я косячу, вопрос только - где именно ????

 
   CopyExtremums(copy_extremums);
//--- Пройдёмся в цикле по скопированным значениям ZZ
   GetZigZagData(m_zz_highs_temp,m_zz_lows_temp,m_zz_time_temp);
Думаю, здесь. 
 
Может, кто-нибудь объяснит человеку, что такое перегрузка? Я не программирую на С. 
 

В инклюд файле изменил имена этих функций. добавил к ним цифры 1 и 2 соответственно.

Нашел все обращения к ним в советнике, отредактировал. Старая ошибка пропала, появилась новая. Действительно - какая-то проблема с типами данных. Переводчик написал так:

'stop_time_in' - не удается преобразовать перечисление TestZZ_03.mq5 77 78


Причина обращения: