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

 
Sergey Voytsekhovsky:

Загрузил новый архив, попробовал компилировать TestZZ_03.mq5

Результат тот-же. Ошибка и отсылка на ту-же функцию, дважды иницированную разными параметрами.

Покажите код метода CZigZagModule::GetZigZagData(), в который нужно передавать номера буферов.

 
TestZZ_03 и TestZZ_04 не появляются среди загруженных советников, значит TestZZ_04 тоже не компелируется.
 
Anatoli Kazharski:

Покажите код метода CZigZagModule::GetZigZagData(), в который нужно передавать номера буферов.

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++;

        }

     }


 
Sergey Voytsekhovsky:
TestZZ_03 и TestZZ_04 не появляются среди загруженных советников, значит TestZZ_04 тоже не компелируется.

Тогда попробуйте сначала разобраться, почему они у вас не появляются. Посмотрел архив ещё раз. Там есть всё для тестов.

 
Anatoli Kazharski:

Покажите код метода CZigZagModule::GetZigZagData(), в который нужно передавать номера буферов.

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,2,0,times_total,m_zz_highs_temp);

   int lows_total  =::CopyBuffer(handle,3,0,times_total,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);

  }

 
Sergey Voytsekhovsky:

...

Вставляйте код правильно:

//---

Это не тот метод. Вот с этим списком параметров:

//+------------------------------------------------------------------+
//| Получает данные 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)
 

Оба метода записаны в инклюдфайле. 

Первый стр 217

Второй стр 258

 
Sergey Voytsekhovsky:

...

Вы не заменили файлы. Удалите их все. И загрузите заново из последнего архива: https://www.mql5.com/ru/forum/299970/page6#comment_10495849

Обсуждение статьи "ZigZag всему голова (Часть I). Разработка базового класса индикатора"
Обсуждение статьи "ZigZag всему голова (Часть I). Разработка базового класса индикатора"
  • 2019.02.03
  • www.mql5.com
Опубликована статья ZigZag всему голова (Часть I). Разработка базового класса индикатора: Автор: Anatoli Kazharski...
 
удалил все, загрузил новый архив, там только папка Files, теперь и 1 и 2 варианта советника нету. ....Или я слишком много удалил ??? 
 
Если я вообще удалю МТ5 с компа, поставлю новый, что мне нужно загрузить ? Старый архив и поверх него новый ? Просто новый ? Что-то я окончательно запутался в архивах. Старый ставит 1 и 2 варианты, но неправильно. В новом ничего не ставится, должен работать правильно, но его явно недостаточно. Пардон за мою файловую безграмотность, но я уже давно не могу найти нормального объяснения или инструкции, какие файлы в МТ5 за что отвечают.